1. Création site Internet
  2. > Articles Techniques
  3. > Ubuntu, Debian, Linux
  4. > Erreur logrotate mysql-server quotidienne
Erreur logrotate mysql-server quotidienne

Erreur logrotate mysql-server quotidienne

jeudi 5 novembre 2015, par Guillaume Orsal

Depuis quelques semaines, chaque nuit, je reçois un mail de mes serveurs sous Linux Debian Jessie indiquant une erreur provoquée par logrotate. J’ai enfin trouvé une solution pour ne plus être spamé par mes propres machines !

Le message contenu dans le mail indique ceci :

/etc/cron.daily/logrotate:
error: error running shared postrotate script for '/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log '
run-parts: /etc/cron.daily/logrotate exited with return code 1

Logrotate permet de limiter la taille des fichiers de log en archivant et compressant les anciens logs.

Les logs à archiver sont configurés dans le répertoire /etc/logrotate.d et celui qui nous pose problème est celui de mysql-server.

Pour réaliser cette opération d’archivage, logrotate doit utiliser le compte utilisateur de maintenance de mysql : debian-sys-maint

Si vous regardez le contenu de la configuration par la commande suivante, qui nécessite les droits root :

sudo cat /etc/logrotate.d/mysql-server

Vous pouvez constater que mysqladmin est appelé en utilisant un fichier de configuration :

...
               MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
...

C’est là que nous allons pouvoir trouver le compte et le mot de passe nécessaire pour la suite des opérations.

sudo cat /etc/mysql/debian.cnf

La commande précédente nous permet d’obtenir la configuration :

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = xxxxxxxxxxxxxxx
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = xxxxxxxxxxxxxxx
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Vous pouvez noter le compte utilisateur (ligne user) et le mot de passe (ligne password) utilisé par logrotate. C’est ceux-là qu’il faudra utiliser plus loin.

Le problème initial vient d’un problème de droit de cet utilisateur. Il va donc falloir les mettre à jour. Il faut se connecter à mysql en tant qu’utilisateur root pour pouvoir modifier les droits d’autres utilisateurs :

mysql -u root -p

Puis il faut mettre à jour les droits. Dans la commande suivante remplacez le compte et le mot de passe par ceux trouvés précédemment.

GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxx';
FLUSH PRIVILEGES;

Le FLUSH PRIVILEGES permet de recharger les droits en mémoire après une modification, sinon la modification ne serait pas prise en compte.

Et voilà, il n’y a plus qu’à attendre la prochaine nuit, et la prochaine exécution de logrotate pour vérifier que cela a bien fonctionné.

Spip | Plan du site | Mentions légales | RSS 2.0 |
© 2001-2024 Guillaume Orsal EI