Mysql:tuning

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Configuration et administration MySQL
Voir aussi Mysql:GRANT · Mysql:maintenance

Mysql:tuning regroupe quelques réglages de configuration MySQL/MariaDB (fichier my.cnf) et deux procédures d'administration courantes.

Fichier de configuration

vi /etc/mysql/my.cnf

Emplacement variable selon la distribution : /etc/my.cnf, /etc/mysql/my.cnf, /etc/mysql/mariadb.conf.d/50-server.cnf... (à vérifier selon le système).

Restreindre/ouvrir l'accès réseau

Par défaut sur beaucoup de distributions, le serveur n'écoute que sur localhost :

[mysqld]
bind-address = 127.0.0.1

Pour autoriser les connexions depuis d'autres machines, commenter ou retirer cette ligne, puis restreindre l'accès via le pare-feu et des comptes limités à des IP précises (voir Mysql:GRANT) — à ne faire que si c'est réellement nécessaire.

Journaliser toutes les requêtes

[mysqld]
general_log = 1
general_log_file = /var/log/mysqld.log

Utile en diagnostic ponctuel, mais génère un volume de logs important : à désactiver une fois le diagnostic terminé.

Options de session

Désactiver/réactiver la vérification des contraintes de clés étrangères pour la session courante :

SET foreign_key_checks = 0;
SET foreign_key_checks = 1;

Procédures

Renommer une base de données

MySQL ne propose pas de RENAME DATABASE direct. Le déplacement manuel des fichiers ne fonctionne qu'avec le moteur MyISAM (un fichier par table) et implique un arrêt du serveur (à vérifier selon version/moteur) :

service mysqld stop
mv /var/lib/mysql/ancienne_base /var/lib/mysql/nouvelle_base
service mysqld start

Sur les serveurs mutualisés type Plesk, les droits des utilisateurs associés à la base doivent être recréés après ce type d'opération manuelle.

Pour une base InnoDB, cette méthode par déplacement de fichiers ne s'applique pas directement ; préférer :

CREATE DATABASE nouvelle_base;
RENAME TABLE ancienne_base.table1 TO nouvelle_base.table1, ancienne_base.table2 TO nouvelle_base.table2;
DROP DATABASE ancienne_base;

(à adapter selon le nombre de tables — il existe aussi des outils dédiés comme mysqldump suivi d'un réimport, voir Mysqldump)

Voir aussi