Christophe Casalegno

Mysql : comment purger les logs binaires lorsqu’il n’y a plus de place sur le disque ?

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';

Par exemple :

mysql> PURGE BINARY LOGS BEFORE '2017-03-02 22:46:26';

Cette commande va purger tous les logs binaires datant d’avant la date indiquée. L’autre méthode consiste par exemple à se base sur le nom du fichier log. Par exemple :

mysql> PURGE BINARY LOGS TO 'ns30XXXX-bin.009836';

Mais parfois, vous pouvez être confronté à un problème plus grave : il n’y a plus de place sur le disque, et vous n’avez pas la possibilité de libérer de l’espace autrement. Dans ce cas, la solution est d’effacer manuellement les fichiers de logs binaires. Nous allons prendre comme postulat que vos fichiers logs se trouvent dans votre /var/lib/mysql : vous pouvez alors utiliser l’astuce suivante pour résoudre votre problème :

Etape 1 : arrêter MySQL (la syntaxe peut dépendre de la version de votre distribution linux). Exemple :

service mysql stop
 
Etape 2 : compter et effacer 50% des fichiers logs binaires pour libérer de l’espace et retirez les de l’index des logs binaires MySQL

cd /var/lib/mysql && a=`ls |grep -v relay |grep bin.index` && b=`wc -l <$a` ; c=`echo $(($b/2))` |xargs -l rm ; echo $c | head -n $b $a |cut -d "/" -f2 && sed 1,$c\d $a -i
 
Etape 3 : Démarrer MySQL

service mysql start
 
Etape 4 : vérifiez qu’il n’y a pas de problèmes

mysql> SHOW BINARY LOGS;
 
Si vous pyez un fichier avec une valeur à 0 c’est qu’il y a un problème : vous devrez arrêter MySQL à nouveau et retirer le fichier de l’index manuellement. Si tout est ok vous pouvez maintenant utiliser la commande « PURGE BINARY LOGS BEFORE » de manière standard pour effacer davantage de logs si besoin.
 
Enjoy !
 
Christophe Casalegno
Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram

Leave a Comment