Comment régler l’erreur d’accès de debian-sys-maint dans Mysql
Je viens de rencontrer un petit problème lors d’une tentative de mise à jour de Mysql. Souhaitant avoir un serveur toujours à jour en matière de sécurité, j’ai voulu appliquer la mise à jour de Mysql proposée dans Debian Wheezy. Malheureusement à l’exécution de aptitude safe-upgrade
, Debian s’est plaint fortement :
Préparation du remplacement de mysql-server-5.5 5.5.31+dfsg-0+wheezy1 (en utilisant .../mysql-server-5.5_5.5.33+dfsg-0+wheezy1_amd64.deb) ... [FAIL] Stopping MySQL database server: mysqld failed! invoke-rc.d: initscript mysql, action "stop" failed. dpkg : avertissement : le sous-processus ancien script pre-removal a retourné une erreur de sortie d'état 1 dpkg: tentative d'exécution du script du nouveau paquet à la place... [FAIL] Stopping MySQL database server: mysqld failed! invoke-rc.d: initscript mysql, action "stop" failed. dpkg: erreur de traitement de /var/cache/apt/archives/mysql-server-5.5_5.5.33+dfsg-0+wheezy1_amd64.deb (--unpack) : le sous-processus nouveau script pre-removal a retourné une erreur de sortie d'état 1 [FAIL] Stopping MySQL database server: mysqld failed! invoke-rc.d: initscript mysql, action "stop" failed. [ ok ] Starting MySQL database server: mysqld already running. Des erreurs ont été rencontrées pendant l'exécution : /var/cache/apt/archives/mysql-server-5.5_5.5.33+dfsg-0+wheezy1_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (1) Échec de l'installation d'un paquet. Tentative de réparation :
Mysql ne loguant rien par défaut, j’ai modifié mon fichier de configuration pour avoir des logs :
vi /etc/mysql/my.cnf
et j’ai décommenté les lignes suivantes :
# * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # As of 5.1 you can enable the log at runtime! general_log_file = /var/log/mysql/mysql.log general_log = 1
Ne pouvant pas redémarrer le service, j’ai alors tenté un reload :
sudo /etc/init.d/mysql reload [....] Reloading MySQL database server: mysqld/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Le problème m’est alors apparu ! Pour toutes les actions de maintenance relatives à Mysql, Debian se connecte avec un utilisateur spécial appelé : debian-sys-maint. Hors ici, il se trouve que cet utilisateur ne parvenait pas à se connecter. Voici ce qui s’est passé.
Lors de l’installation de Mysql, Debian crée un mot de passe aléatoire pour l’utilisateur debian-sys-maint, et inscrit le mot de passe dans un fichier de configuration /etc/mysql/debian.cnf
:
# Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = mot de passe aléatoire socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = mot de passe aléatoire socket = /var/run/mysqld/mysqld.sock basedir = /usr
Lors de l’installation de mon nouveau serveur dédié, Debian a bien créé cet utilisateur avec son mot de passe. Mais j’ai ensuite importé un fichier contenant tout le dump SQL de mon ancien serveur. Ce qui s’est passé est alors simple, la table mysql.User
d’origine, a été remplacé par le dump y compris le fameux utilisateur de maintenance et surtout son mot de passe.
Voici ce qu’il faut faire pour réparer ce petit souci :
On se connecte avec l’utilisateur root à Mysql :
mysql -u root -p Enter password:
Puis on recrée l’utilisateur avec le mot de passe trouvé précedemment dans /etc/mysql/debian.cnf
:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED \\ BY 'Le_passwd_du_fichier'; mysql>FLUSH PRIVILEGES; mysql>exit mysql>bye
(attention le « \\ » n’est là que pour symboliser le retour à la ligne)
Il suffit alors de redémarrer Mysql :
sudo /etc/init.d/mysql restart [ ok ] Stopping MySQL database server: mysqld. [ ok ] Starting MySQL database server: mysqld .. [info] Checking for tables which need an upgrade, are corrupt or were not closed cleanly ..
J’ai alors pu finaliser ma mise à jour :
Les paquets suivants seront mis à jour : mysql-server-5.5 1 paquets mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 0 o/2 094 ko d'archives. Après dépaquetage, 36,9 ko seront libérés. Voulez-vous continuer ? [Y/n/?] Lecture des fichiers de modifications (« changelog »)... Terminé Préconfiguration des paquets... (Lecture de la base de données... 64811 fichiers et répertoires déjà installés.) Préparation du remplacement de mysql-server-5.5 5.5.31+dfsg-0+wheezy1 (en utilisant .../mysql-server-5.5_5.5.33+dfsg-0+wheezy1_amd64.deb) ... [ ok ] Stopping MySQL database server: mysqld. [ ok ] Stopping MySQL database server: mysqld. Dépaquetage de la mise à jour de mysql-server-5.5 ... Traitement des actions différées (« triggers ») pour « man-db »... Paramétrage de mysql-server-5.5 (5.5.33+dfsg-0+wheezy1) ... [ ok ] Stopping MySQL database server: mysqld. insserv: warning: script 'rtorrent-daemon.sh' missing LSB tags and overrides [ ok ] Starting MySQL database server: mysqld .. [info] Checking for tables which need an upgrade, are corrupt or were not closed cleanly..