Externaliser votre configuration MySQL

Depuis MySQL 5.0.4, il est possible de surcharger la configuration de MySQL en incluant le fichier de configuration de son choix.

Au niveau des distributions Linux, on se retrouve face à plusieurs situations (je ne sais pas ce qu'il en est pour Solaris / Windows) :

  1. Soit le fichier my.cnf n'est pas installé dans /etc/ ou /etc/mysql et dans ce cas, MySQL tourne avec des options par défaut (cas de RHEL par ex)
  2. Soit le fichier my.cnf existe et est pris en compte avec les options précisées dans ce fichier (cas de Debian par ex)

Note

Des fichiers exemples de configuration sont disponibles en général dans /usr/share/mysql/

Dans le cas 1, en créant son propre fichier my.cnf dans /etc/, on surcharge donc la configuration par défaut. Lors des montées de version de MySQL il y a a priori peu de risque que votre fichier soit effacé (sauf si la distribution se met à en fournir un par défaut, ce qui n'est jamais improbable).

Dans le cas 2, lors d'une montée de version, si vous avez modifié le fichier fourni initialement par la distribution et suivant la subtilité du gestionnaire de paquet, vos modifications peuvent potentiellement être perdues.

La solution consiste donc à externaliser vos modifications dans une zone qui ne sera jamais impactée par le package standard de MySQL.

MySQL vous offre 2 options (à ajouter en fin de fichier /etc/my.cnf) :

  • include permet de ne charger qu'un fichier de configuration donné :
!include /home/mysql/conf/myopt.cnf
  • !includedir permet de charger tous les fichiers de configuration d'un répertoire :
!includedir /home/mysql/conf

Il n'est pas précisé de règle pour l'ordre de chargement, je présuppose que cela se fait par ordre alphabétique (comme Apache)

Quelques règles :

  • Les fichiers doivent avoir une extension en .cnf pour être pris en compte.
  • Dans votre fichier, il vous faut rappeler à quelle section de la configuration vos variables s'appliquent

Ex :

[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock

[mysqld]
key_buffer = 100M
myisam_sort_buffer_size = 64M

On peut donc imaginer utiliser !includedir /home/mysql/conf et que ce répertoire contienne n fichiers :

  • cache.cnf qui contient les paramètres pour les mécanismes de cache
  • replication.cnf qui contient les paramètres pour la réplication
  • etc.

Ref : http://dev.mysql.com/doc/refman/5.0/en/option-files.html

Learn more »

Monitorer MySQL

Ce tutoriel donne quelques pistes pour monitorer MySQL afin de réperer la source de latences par ex ou procéder à des optimisations. Enregistrer les requêtes longues (slow queries)

Surveillez les requêtes consommatrices de ressources

Dans /etc/mysql/my.cnf décommentez la variable log-slow-queries :

# Here you can see queries with especially long duration
log-slow-queries = /var/log/mysql/mysql-slow.log

Relancez mysql :

/etc/init.d/mysql restart

Dans /var/log/mysql/mysql-slow.log seront dès lors enregistrées toutes les requêtes qui mettent du temps à s’exécuter...

mytop - le top de mysql

Vous connaissez la commande top qui permet de connaitre les process en cours et qui demandent le plus de ressources. Voici la même chose pour mysql et qui donne l’équivalent d’un "SHOW PROCESSLIST" :

Pour l’installer :

aptitude update
aptitude install mytop

Ensuite, exécutez mytop dans une console :

mytop -u root -p motdepasse

Cela permet d’avoir une vision générale de mysql mais vous pouvez tout à fait préciser une base de donnnées, etc. (voir man mytop)

View details »

Réinitialiser le mot de passe root de votre serveur MySQL

Comment réinitialiser le mot de passe de l’utilisateur root de votre serveur MySQL si vous l’avez perdu ?

Arrêt du serveur

Arrêter votre serveur MySQL :

sudo /etc/init.d/mysql stop

Lancer le serveur en mode "sans privilèges"

Lancez le serveur MySQL en désactivant les privilèges et l’accès réseau (pour d’évidentes précautions sécuritaires...). En effet, sans cette option, votre base est ouverte à l’ensemble du monde sans restriction...

sudo mysqld_safe --skip-grant-tables --skip-networking &

Connectez-vous sur le serveur MySQL qui tourne :

mysql mysql

Redéfinir un mot de passe pour root

Dans le shell MySQL, définissez votre nouveau mot de passe :

UPDATE user SET password=PASSWORD(votre_nouveau_mot_de_passe) WHERE user="root" AND host="localhost";

Sortir du client MySQL :

exit

Arrêyter votre instance MySQL :

sudo mysqladmin shutdown

Lancez votre instance "normale" MySQL :

sudo /etc/init.d/mysql start

Testez votre connexion en root :

mysql -u root -p

Saisissez alors votre nouveau mot de passe...

View details »