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 (log–error) : 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';