La première chose à faire, c’est d’activer les logs mysql

Pour activer les logs MySQL, nous devons nous rendre dans son fichier de configuration « /etc/mysql/my.cnf« . Il faut savoir que plusieurs types de logs peuvent être écrit dans plusieurs fichiers :

  • Les logs d’erreurs (logerror) : contient les informations indiquant que le serveur MySQL a été lancé ou arrêté ainsi que les erreurs critiques qui sont survenues lorsque le serveur fonctionnait.
  • Les logs généraux (general_log_file) : contient toutes les informations générales sur les requêtes clientes et les connexions effectuées.
  • Les logs binaires (log-bin) : contient toutes les requêtes qui modifient les données (UPDATE ou DELETE).
  • Les logs des requêtes lentes (log-slow-queries) : contient les requêtes faites au serveurs qui vont être plus longues que la valeur « long_query-time » à s’exécuter sur le serveur.

Dans mon cas, je ne vais activer que trois logs, c’est à dire log-error, log-slow-queries  et log-binaires qui iront dans le répertoire « /var/log/mysql/« . Nous allons ajouter ou décommenter quelques lignes de configuration en dessous de la ligne « [mysqld] » qui indique qu’on commence la partie de configuration du serveur MySQL :

log_error = /var/log/mysql/error.log

slow_query_log_file = /var/log/mysql/mysql-slow.log
slow_query_log      = 1
long_query_time     = 5
log_queries_not_using_indexes

log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 4
max_binlog_size         = 100M

On n’active pas le fichier des log global car il génère beaucoup trop de données.

Il nous faut maintenant redémarrer notre serveur MySQL pour que les changements soient pris en compte que les logs puissent s’écrire :

service mysql restart

Voilà les logs sont en place.

Dans mon cas ce qui m’intéresse c’est surtout d’optimiser la vitesse de la base de données, ce que je fais grâce au fichier mysql-slow.log qui va m’indiquer en particulier les colonne qui ne sont pas indexées dans les requête.

Je veux aussi pouvoir vérifier les modifications de la base de données ce qui se trouve dans les fichiers mysql-bin.00000X. Ces fichiers sont binaires et on ne peut à priori pas faire de grep à l’intérieur. Mais il existe une commande  très utile qui va permettre de traiter ces fichiers : mysqlbinlog

Voila quelques utilisation pratique de cette commande

mysqlbinlog mysqld-bin.000001
(mysqld-bin.000001 étant le nom du fichier que l'on veut lire)

Si l’on veut spécifier une base en particulier :

mysqlbinlog -d nom_de_ma_base mysqld-bin.000001

Si l’on veut renvoyer le contenu de la commande vers un fichier :

mysqlbinlog mysqld-bin.000001 > Mon_fichier.txt

Si l’on ne veut que les requêtes MySQL :

mysqlbinlog -s crm mysqld-bin.000001

Si l’on veut n’afficher qu’à partir d’une date :

mysqlbinlog --start-datetime="2017-08-16 15:00:00" mysqld-bin.000001

Si l’on ne veut afficher que jusqu’à une date :

mysqlbinlog --stop-datetime="2017-08-16 15:00:00" mysqld-bin.000001

Voilà, il y a plein d’autres options que je n’ai pas étudier mais que vous trouverez en faisant un –help

Evidement toutes ces options sont combinables ensemble.

purger des logs binaires

Lorsque vous avez besoin de purger des logs binaires sur un serveur MySQL, vous avez simplement besoin de vous connecter sur le serveur et d’utiliser la commande PURGE BINARY LOGS :

 mysql> PURGE BINARY LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'; 

By Xxavier