Exemple de my.cnf pour Magento 1.6 / 1.7 & 1.8

### LE 26/11/2013
### /etc/mysql/my.cnf   pour Magento sur serveur dédié Ubuntu + Plesk 11.5 

 [client]
 port = 3306
 socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# This was formally known as [safe_mysqld]. 
 [mysqld_safe]
 socket = /var/run/mysqld/mysqld.sock
 nice = 0
[mysqld]
 local-infile=0
 # * IMPORTANT
 # adjust /etc/apparmor.d/usr.sbin.mysqld.

user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp

###########################################################################
##### POUR AUTORISER L ACCES A LA BASE MYSQL DEPUIS UN AUTRE SERVEUR  #####
###########################################################################
# 1)
###### Cette ligne empèche l'accès a la Base Mysql depuis un autre serveur
###### Mettre un "#" devant = #skip-external-locking #pour autoriser l acces 
skip-external-locking
# 2)
######## d'origine pour LOCALHOST = bind-address = 127.0.0.1
########  NE FONCTIONNE PAS AVEC IP FAILOVER
######## bind-address = 127.0.0.1 
######## *** REMPLACE PAR L ADRESSE DU SERVEUR bind-address = 176.31.***.***
bind-address = 127.0.0.1
###########################################################################
#
# * Fine Tuning
#
# eric --- original etait a  16M
 key_buffer = 32M
# eric --- original etait a  16M
 max_allowed_packet = 32M
 thread_stack = 192K
 thread_cache_size = 8
 # This replaces the startup script and checks MyISAM tables if needed
 # the first time they are touched
 myisam-recover = BACKUP
 #max_connections = 100
 #table_cache = 64
 #thread_concurrency = 10
 #
 # * Query Cache Configuration
 #
 # eric --- original etait   1M
 query_cache_limit = 2M
 # eric --- original etait   16M
 query_cache_size = 64M
 #
####### Ajouter ###################################
 table_cache = 1024
 # 2x le nombre de cores CPU innodb_thread_concurrency = 8
 innodb_thread_concurrency = 8
 innodb_flush_log_at_trx_commit = 0 #(safe vs speed, 0 speed, 1 safe, 2 mixed)
 innodb_log_buffer_size = 32M
# 66% de la mémoire disponible # (3 Go sur un serveur web 8 Go de RAM )

# ceci est important trop de mémoire innodb_buffer peut generer une erreur Magento
# EXEMPLE.. SQLSTATE[4200]: Syntax error or access violation: 1286 Unknown table engine 'InnoDB'
# (1024M sur un site web 4 Go de RAM)

 innodb_buffer_pool_size = 4096M
 innodb_additional_mem_pool_size = 32M
 ######## fin de l'ajout ###############################
################################################
 # * Logging and Replication
 #
 # Both location gets rotated by the cronjob.
 # Be aware that this log type is a performance killer.
 # As of 5.1 you can enable the log at runtime!
 #general_log_file = /var/log/mysql/mysql.log
 #general_log = 1
log_error = /var/log/mysql/error.log
# Here you can see queries with especially long duration
 #log_slow_queries = /var/log/mysql/mysql-slow.log
 #long_query_time = 2
 #log-queries-not-using-indexes
 #
 # The following can be used as easy to replay backup logs or for replication.
 # note: if you are setting up a replication slave, see README.Debian about
 # other settings you may need to change.
 #server-id = 1
 #log_bin = /var/log/mysql/mysql-bin.log
 expire_logs_days = 10
 max_binlog_size = 100M
 #binlog_do_db = include_database_name
 #binlog_ignore_db = include_database_name
 #
 # * InnoDB
 #
 # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
 # Read the manual for more InnoDB related options. There are many!
 #
 # * Security Features
 #
 # Read the manual, too, if you want chroot!
 # chroot = /var/lib/mysql/
 #
 # For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
 #
 # ssl-ca=/etc/mysql/cacert.pem
 # ssl-cert=/etc/mysql/server-cert.pem
 # ssl-key=/etc/mysql/server-key.pem
[mysqldump]
 quick
 quote-names
 max_allowed_packet = 32M
[mysql]
 #no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
 key_buffer = 32M
#
 # * IMPORTANT: Additional settings that can override those from this file!
 # The files must end with '.cnf', otherwise they'll be ignored.
 #
 !includedir /etc/mysql/conf.d/

Autoriser la connexion à distance MySQL sur Serveur (Plesk)

Pour des raisons évidentes de sécurité les Serveur sont parametré par defaut pour utiliser uniquement les bases de données en local : Localhost 127.0.0.1

Pour de nombreuses, on veut pouvoir accéder a la base de données Mysql à partir d’un autre serveur au Hébergement

Cela permet de séparer la base de donnée de votre Hébergement php/html, Faire des copies entre Serveurs Etc..

 

Il faut Modifier sur votre Serveur de base de donnée MsSQL deux lignes dans le fichier my.cnf

Editez le fichier : /etc/mysql/my.cnf
Commentez la ligne avec un # : skip-networking et Bind-address 

port   = 3306  (normalement c'est déjà par defaut)
#Commenter cette ligne
#skip-networking

# Commenter cette ligne
# Bind-address = 127.0.0.1
# ou facultatif : vous pouvez mettre l'adresse du serveur
Bind-adresse = 176.31.254.010  (exemple d'adresse)

Redémarrez MySQL : /etc/init.d/mysql restart , dans un terminal,  ssh

service mysql restart

Une seule adresse peut être sélectionné. Si cette option est spécifiée plusieurs fois, la dernière adresse indiquée est utilisée.

Si aucune adresse ou 0.0.0.0 est spécifié, le serveur écoute sur toutes les interfaces.

Source : http://kb.parallels.com/fr/1134

Optimiser votre serveur Magento, votre hébergement pour Magento – PHP.ini – my.cnt – Nginx.cong

Les sujets qui vont êtres abordés :

  • .htaccess
  • php.ini
  • php_admin_value memory_limit,
  • php_value max_execution_time
  • my.cnf

.htaccess conseillé pour Magento :

Voici un .htaccess optimisé pour Magento,

RewriteBase /VotreDossierMagento/

# memory_limit Mini conseillé 64M
php_value memory_limit 128M
php_value max_execution_time 18000

# Facultatif : pour Activer la compression gain de 30%
<IfModule mod_deflate.c>
php_flag zlib.output_compression on   
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascrip
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>

 

inutile depuis fooman-speedster > 2.0Si vous avec installez l’extention : fooman-speedster < 1.2 ajouter dans le .htacces

#Si vous utilisez l'extension d'acceleration fooman-speedster RewriteRule ^(index.php/)?minify/([^/]+)(/.*.(js|css))$ lib/minify/m.php?f=$3&d=$2



Php.ini

c’est le fichier d’initialisation (réglage) de votre php, c’est donc un fichier important.

Il peut être paramétré à 3  endroits,  c’est le dernier qui l’emporte, plafonné par les restrictions des précédents:

  • Le premier c’est celui du serveur donc générale, valable pour tout les sites hébergés sur le serveur.
  • Sur un serveur avec Plesk 11 il se trouve ici : opt/psa/admin/conf/php.ini)

Edit le 1/07/2014 :

  • Sur un serveur avec Plesk 12 il se trouve ici : etc/php5/apache2/php.ini  et  etc/php5/apache2/cgi/php.ini

     

 

  • Le second c’est celui de votre site, il n’est valable que dans votre site, il est prioritaire à celui du serveur dans la limite autorisé par le premier  ( domaine d’un serveur avec Plesk il est ici : var/www/vhosts/VotreSite/conf)
  • Le Troisième c’est celui de chaque dossier dans le .htaccess (pour le voir pensez a afficher les fichiers cachés) .  il est prioritaire à celui du premier (serveur), et du Second (domaine) dans la limite autorisé par le premier comme le Second.

Exemples  d’erreurs fréquentes : 

1) Dans le .htaccess de votre dossier Magento vous mettez :

php_admin_value memory_limit 256M

ça ne sert a rien si votre Serveur limite à 128M et votre Domaine limite à 64M, votre Limite est de 64M.

2) Autre erreur :

Vous modifiez le premier ../conf/php.ini, = 256M, mais laissez les deux autres d’origines  (var/www/vhosts/VotreSite/conf, et celui dans .htaccess), ça ne sert a rien aussi, si dans le .htaccess la ligne limite est à 32M, c’est lui qui sera pris en compte 🙂

php.ini du Serveur: php_admin_value memory_limit 256M 
Ligne dans .htacces: php_admin_value memory_limit 32M

Maintenant que savez ça, nous allons pourvoir  paramétrer PHP pour Magento correctement .


php_admin_value memory_limit

Magento recommande 64M, c’est la valeur pas défaut dans le .htacces, vous pouvez toujours mettre un peu plus 128M voir 256M (toujours dans la limite de Php.ini du serveur)

Selon les cas :

  • Hébergement Mutualité : Mettre dans .htacces de votre dossier Magento (demandez à votre Hebergeur le Maxi autorisé possible)

.htacces :

php_admin_value memory_limit = 128M
  •  Serveur Dédié avec Plesk : Si  vous avez un serveur puissant dans .htaccess commentez la ligne  # (# = désactiver la ligne), et paramétrez directement le domaine ou le Serveur,

1) dans .htaccess du dossier Magento

#ligne commenté car j'utilise le paramêtre dans Plesk
#php_admin_value memory_limit = 64M

2) Dans  Plesk > Domaines > VotreNomDomaine >  Personnalisé > Paramètre PHP >

memory_limit  Saisissez

  • -1    comme illimité (serveur 16Go ou +)
  • 256 Mo        pour Serveur avec 8Go de Ram
  • 128 Mo        pour Serveur avec 4Go de Ram
  • 64 Mo          pour un serveur de 2Go de ram
 -Redémarrez Le service Apache ou le Serveur pour prendre en compte les Modifications

Attention : Mettre -1 illimité comporte des risques : Si un Script, une tache Cron part en vrille, elle  peut consommer toute la mémoire de votre Serveur, donc celui-ci va planter, utiliser -1 que si vous êtes sûr 100%, surveillez-la charge de votre serveur, si non mettez 256Mo c’est largement suffisant.


php_value max_execution_time

Magento recommande 18000, c’est la valeur pas défaut dans le .htacces, vous pouvez toujours mettre un peu plus 180000 (toujours dans la limite de Php.ini du serveur)

php_value max_execution_time 180000

# ou désactivé la si vous utilisez les paramètres dans Plesk
#php_value max_execution_time 180000
  •  Serveur Dédié avec Plesk : Si  vous avez un serveur puissant (dans .htaccess commentez la ligne  # (# = désactiver la ligne), et paramétrer directement le domaine ou le Serveur, vous pouvez mettre « 1800000 »
 -Redémarrez Le service Apache ou le Serveur pour prendre en compte les Modifications

Paramétrage de PHP.ini

Conseillé pour Magento :  opt/psa/admin/conf/php.ini

Modifier

  • memory_limit = 512M     (256M si serveur 8Go, 128M si serveur 4go)
  • max_execution_time = 18000
  • max_input_time = 1200
  • output_buffering = 4096

Facultatif Ajouter

  • default_socket_timeout = 1800000
  • pdo_mysql.cache_size = 2000
  • mysql.allow_persistent = On
  • mysql.connect_timeout = 1500  (edit le 01/07/2014)

Ou Vous pouvez aussi saisir directement dans  Plesk > Domaines > VotreNomDomaine >  Personnalisé > Paramètre PHP >

-Redémarrez Le service Apache ou le Serveur pour prendre en compte les Modifications

Pensez a Désactivé ces paramètres dans .Htaccess de Magento si elle existe pas #


Optimiser Mysql / Magento dans my.cnf

my.cnf, : c’est le fichier de configuration de la base Mysql , sur un serveur avec Plesk il est ici : /etc/mysql/my.cnf

Selon les Cas :

Serveur avec de 4 à 8Go

key_buffer        = 16M
max_allowed_packet    = 16M
thread_stack        = 192K
query_cache_limit    = 1M
query_cache_size        = 24M
table_cache = 1024

Serveur avec 16Go avec 4x Core

key_buffer        = 32M
max_allowed_packet    = 32M
thread_stack        = 192K
query_cache_limit    = 2M
query_cache_size        = 64M

####### Facultatif Ajouter ######
 table_cache = 1024  
# 2x le nombre de cores CPU innodb_thread_concurrency = 8
innodb_thread_concurrency = 8
#(safe vs speed, 0 speed, 1 safe, 2 mixed)
 innodb_flush_log_at_trx_commit = 0
 innodb_log_buffer_size = 32M
# 66% de la mémoire disponible # (3 Go sur un serveur web 8 Go de RAM ) # (1024M sur un site web 4 Go de RAM
innodb_buffer_pool_size = 4096M
innodb_additional_mem_pool_size = 32M
########  fin de l'ajout  #######

Pensez a redémarrer le Service Mysql pour prendre en compte les modifications.


Serveur NGINX

Si votre serveur utilise NGINX pour éviter des time_out au bout d’une minutes :

Par default le time_out est à 60  (60 secondes ) voici ma moficiation

Créer un fichier « mon_nginx »   dans le dossier  /etc/nginx.conf/ contenant :

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6008;
## ne pas mettre autre chose + utilisera de la mémoire pour rien.
fastcgi_buffers 8 256k;
fastcgi_buffer_size 512k;

Pensez a redémarrer les services nginx pour prendre en compte les modifications :