My.cnf

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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émarrage mysqld_safe
  • [client] — options par défaut appliquées aux clients (mysql, mysqldump...)
  • [mysql] — options spécifiques au client interactif mysql

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.1 restreint 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 GRANT doivent 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 .ibd plutô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_time secondes), 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