Publié le

Supprimer automatiquement les fichiers binlog de MySQL

En inspectant les métriques de mon serveur, je me suis rendu compte que mon disque de 50Go était presque rempli alors que ce site n'héberge que très peu de fichiers et contient surtout des données textuelles.

Identifier les dossiers utilisant le plus d'espace disque

J'ai donc utilisé la commande du -h / 2>/dev/null | grep '[0-9\.]\+G' pour trouver les dossiers sur mon serveur qui occupaient le plus d'espace disque.

J'ai vu alors que mon dossier /var/lib/mysql pesait près de 30Go et qu'il était rempli de fichiers binlog.xxxxxx.

Les fichiers binlog de MySQL

Ces fichiers sont des fichiers de log binaires qui enregistrent les transactions effectuées sur la base de données. Ils sont utiles lors de l'utilisation de la réplication, pour la récupération de données ou comme log d'audit.

Dans mon cas, ces fichiers ne me sont pas très utiles et j'ai donc souhaité mettre en place un mécanisme pour les supprimer automatiquement.

Supprimer automatiquement les fichiers binlog de MySQL

Si vous utilisez MariaDB, la variable système binlog_expire_logs_seconds permet de spécifier le nombre de secondes après lequel les logs seront purgés lors de leur rotation ou au démarrage de MySQL.

J'ai donc opté pour une valeur conservatrice de 6 heures comme spécifié dans la documentation de MariaDB à ce sujet en ajoutant cette déclaration à mon fichier my.cnf.

[mariadb]
binlog_expire_logs_seconds=21600

Purger les anciens fichiers binlog

Pour purger les anciens fichiers de logs binaires, j'ai utilisé cette commande PURGE BINARY LOGS TO 'binlog.xxxxxx'; où xxxxxx est l'index du dernier log qui sera supprimé.

Grâce à cette configuration, j'ai pu récupérer la quasi totalité de l'espace utilisé par MySQL et faire chuter l'utilisation de l'espace disque de mon serveur en dessous des 10%.