Lors de la migration de bases de données d’un serveur à l’autre, j’ai déplacé la base mysql, qui contient les utilisateurs, les privilèges et une partie de la configuration interne du serveur SQL.
Sur le papier, cela évite de recréer tous les comptes SQL à la main. En pratique, cela peut aussi déplacer des comptes système propres à l’ancien serveur et casser les comptes de maintenance du nouveau.
C’est ainsi que l’on peut tomber sur cette erreur au démarrage ou à l’arrêt de MySQL :
Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)Code language: JavaScript (javascript)
Ou encore :
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'Code language: JavaScript (javascript)
Le problème vient généralement d’un décalage entre l’utilisateur SQL debian-sys-maint présent dans MySQL/MariaDB et le mot de passe stocké dans le fichier système /etc/mysql/debian.cnf.
À quoi sert debian-sys-maint ?
Sur certaines anciennes installations Debian/Ubuntu, le paquet MySQL créait un utilisateur spécial nommé debian-sys-maint.
Cet utilisateur servait aux scripts de maintenance du paquet : vérifier l’état du serveur, recharger certaines informations, arrêter proprement MySQL, effectuer certaines tâches administratives, etc.
Son mot de passe était stocké dans :
/etc/mysql/debian.cnf
Le wiki Evolix résume bien ce comportement : sur Debian 10 et inférieur, certaines tâches passent par l’utilisateur SQL debian-sys-maint, avec un mot de passe stocké dans /etc/mysql/debian.cnf. Evolix Wiki : Howto MySQL
Sur des systèmes plus récents, surtout avec MariaDB et l’authentification par socket Unix, ce compte peut ne plus être présent ou ne plus être nécessaire. Il faut donc adapter le diagnostic à votre version réelle de MySQL/MariaDB.