- Création site Internet
- > Articles Techniques
- > Ubuntu, Debian, Linux
- > Erreur logrotate avec mysql-server sur Debian
Erreur logrotate avec mysql-server sur Debian
jeudi 5 novembre 2015, par
Lors de la rotation des logs MySQL, logrotate peut échouer sur Debian et générer des erreurs répétées. Cet article explique la cause du problème et présente une solution simple pour rétablir une rotation automatique fiable.
Note historique : Cet article date de novembre 2015 (Debian Jessie). Bien que les principes restent valides, certains détails concernant logrotate et MySQL ont pu évoluer. L’approche de diagnostic décrite conserve sa pertinence pour les systèmes Debian et Ubuntu modernes.
Contexte du problème
Sur les serveurs Debian/Linux, logrotate exécute quotidiennement la rotation des fichiers journaux via un script situé dans /etc/cron.daily. Lorsque MySQL est installé, logrotate crée une configuration dédiée qui, après archivage des logs, exécute un script de post-rotation.
Ce script échoue régulièrement avec une erreur de permissions, ce qui génère des rapports envoyés par mail via cron.
Le message d’erreur type reçu est le suivant :
/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 1Diagnostic : comprendre le rôle de logrotate et debian-sys-maint
Logrotate est l’utilitaire système chargé de limiter la croissance des fichiers journaux. Il archive et compresse les anciens logs en parcourant les fichiers de configuration du répertoire /etc/logrotate.d/.
Pour la gestion de MySQL, il s’appuie sur un compte utilisateur système dédié : debian-sys-maint.
Ce compte possède les permissions minimales nécessaires à la maintenance automatique du service MySQL. Ces permissions sont référencées dans deux fichiers clés.
1. Configuration logrotate pour MySQL :
sudo cat /etc/logrotate.d/mysql-serverCe fichier définit une variable MYADMIN qui utilise les identifiants du compte de maintenance :
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"2. Fichier de configuration MySQL du compte de maintenance :
sudo cat /etc/mysql/debian.cnfCe fichier contient les identifiants du compte debian-sys-maint :
# 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 = /usrCause racine : insuffisance de privilèges
L’erreur de post-rotation survient lorsque le compte debian-sys-maint ne dispose pas des permissions MySQL suffisantes pour exécuter les commandes d’administration nécessaires (rechargement des tables, interrogation de l’état du serveur, etc.).
Le compte système existe bien et accède au fichier de configuration, mais ses droits au niveau MySQL sont incomplets ou corrompus.
Solution : restaurer les permissions du compte debian-sys-maint
La résolution consiste à accorder au compte debian-sys-maint l’ensemble des permissions administratives requises. Cette opération doit être effectuée avec un compte disposant des droits administrateur MySQL.
Étape 1 : connexion en tant qu’administrateur MySQL
mysql -u root -pSaisissez le mot de passe root MySQL.
Étape 2 : attribution des permissions
Exécutez les commandes SQL suivantes en remplaçant le mot de passe par celui figurant dans le fichier /etc/mysql/debian.cnf :
GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES
ON *.* TO 'debian-sys-maint'@'localhost'
IDENTIFIED BY 'xxxxxxxxxxxxxxx';
FLUSH PRIVILEGES;Les permissions accordées correspondent à :
- RELOAD : recharger les tables et caches
- SHUTDOWN : arrêter le serveur MySQL
- PROCESS : afficher les processus serveur
- SHOW DATABASES : lister les bases de données
- SUPER : exécuter les opérations de maintenance
- LOCK TABLES : verrouiller les tables lors des opérations de sauvegarde
Étape 3 : application immédiate des permissions
La commande FLUSH PRIVILEGES recharge les droits en mémoire et rend les changements effectifs immédiatement, sans redémarrage du serveur.
FLUSH PRIVILEGES;Vérification
Après ces modifications, la prochaine exécution de logrotate (lors du cron quotidien) fonctionnera sans erreur.
Pour tester immédiatement sans attendre l’exécution automatique :
sudo /etc/cron.daily/logrotateSi aucune erreur n’est affichée, le problème est résolu.
Prévention et bonnes pratiques
- Maintenir à jour le compte debian-sys-maint via les mises à jour du paquet mysql-server
- Surveiller les erreurs logrotate dans les logs cron : grep logrotate /var/log/syslog
- Adapter les permissions sur les installations personnalisées ou durcies
- Préserver le fichier /etc/mysql/debian.cnf, élément clé du bon fonctionnement de la maintenance automatisée