My.cnf
| Fiche express | |
|---|---|
| Type | Fichier de configuration du serveur/client MySQL-MariaDB |
| Emplacements usuels | /etc/my.cnf, /etc/mysql/my.cnf, ~/.my.cnf
|
| Voir aussi | Mysql · Mysql config editor |
my.cnf est le fichier de configuration principal de MySQL/MariaDB, lu au démarrage du serveur (mysqld) et par les outils clients. Il est organisé en sections, chacune préfixée par [nom_de_section], qui ne s'appliquent qu'au programme correspondant.
Emplacement et ordre de lecture
Selon la distribution, plusieurs fichiers sont lus dans l'ordre (les derniers surchargent les premiers) : typiquement /etc/my.cnf, puis /etc/mysql/my.cnf, un répertoire /etc/mysql/conf.d/*.cnf ou /etc/my.cnf.d/*.cnf selon l'OS, et enfin ~/.my.cnf pour une configuration par utilisateur (souvent utilisé côté client pour stocker des identifiants — voir Mysql config editor pour une méthode moins exposée que le mot de passe en clair).
Structure
Les sections les plus courantes :
[mysqld]— options du serveur[mysqld_safe]— options du wrapper de démarragemysqld_safe[client]— options par défaut appliquées aux clients (mysql,mysqldump...)[mysql]— options spécifiques au client interactifmysql
Exemple commenté
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Désactiver les liens symboliques : recommandé pour éviter certains risques de sécurité
symbolic-links=0
bind-address = 127.0.0.1
# Ne pas faire de résolution DNS inverse des clients à la connexion (gain de perf)
skip-name-resolve
thread_cache_size = 16
# query_cache_* : obsolète et supprimé depuis MySQL 8.0 (déprécié dès 5.7.20).
# À ne conserver que sur une instance MySQL 5.7 ou antérieure / MariaDB (toujours supporté côté MariaDB).
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2K
query_cache_size = 128M
innodb_file_per_table = 1
tmp_table_size = 128M
max_heap_table_size = 128M
#slow-query-log = 1
#slow-query-log-file = /var/lib/mysql/mysql-slow.log
#long_query_time = 1
wait_timeout = 60
[mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /run/mysqld/mysqld.pid
Détail des paramètres
- datadir / socket — emplacement des fichiers de données et du socket Unix utilisé pour les connexions locales.
- bind-address — interface d'écoute réseau ;
127.0.0.1restreint aux connexions locales, à adapter si le serveur doit être accessible depuis d'autres hôtes. - skip-name-resolve — évite une résolution DNS inverse à chaque connexion (les règles
GRANTdoivent alors utiliser des IP plutôt que des noms d'hôte). - thread_cache_size — nombre de threads clients gardés en réserve pour être réutilisés, évite le coût de création d'un thread à chaque connexion (voir réglage ci-dessous).
- innodb_file_per_table — chaque table InnoDB dans son propre fichier
.ibdplutôt que dans le tablespace partagéibdata1; recommandé (comportement par défaut depuis MySQL 5.6.6). - tmp_table_size / max_heap_table_size — taille maximale des tables temporaires en mémoire avant bascule sur disque ; les deux doivent être augmentés ensemble (c'est le plus petit des deux qui s'applique).
- slow-query-log — journal des requêtes lentes (au-delà de
long_query_timesecondes), utile pour le diagnostic de performance. - wait_timeout — délai d'inactivité (secondes) avant fermeture automatique d'une connexion.
Régler le thread_cache_size
Méthode empirique pour dimensionner le cache de threads : comparer le nombre de threads créés au nombre total de connexions.
mysql> show status like 'Threads_created';
mysql> show status like 'Connections';
Taux de threads recréés (à minimiser) :
100 - ((Threads_created / Connections) * 100) -- exemple : 100 - ((627/630) * 100) ≈ 0,5 % → cache déjà bien dimensionné
Ajustement à chaud (sans redémarrage, perdu au prochain restart sauf mise à jour du fichier) :
mysql> set global thread_cache_size = 16;
Voir aussi
- Mysql — page hub
- Mysql config editor — alternative pour ne pas stocker de mot de passe en clair dans
~/.my.cnf