Nach einer Migration von einem openSUSE Linux zu einem Debian System funktionierte das init Script /etc/init.d/mysql zum Verwalten des MySQL Dienstes nicht mehr. Während der Migration wurde ein Backup aller Datenbanken in dem neuen System eingespielt, unter anderem auch die MySQL Systemdatenbank mysql.
Bei einem Versuch, anschließend mit „/etc/init.d/mysql stop“ den Datenbankdienst zu beenden, trat folgender Fehler auf:
# /etc/init.d/mysql stop
Stopping MySQL database server: mysql failed!
Der Versuch, den Status des MySQL Dienstes anzuzeigen, brachte einen ersten Hinweis:
# /etc/init.d/mysql status
/usr/bin/mysqladmin: connect to server at ‚localhost‘ failed
error: ‚Access denied for user ‚debian-sys-maint’@’localhost‘ (using password: YES)‘
Das init Script versucht mit einem eigenen User namens ‚debian-sys-maint‘, den MySQL Datenbankserver zu verwalten. Dieser User existiert aber nicht, da alle Datenbanken inklusive der MySQL Systemdatenbank von einem Opensuse System stammen. In dieser MySQL System Datenbank existiert natürlich kein User namens ‚debian-sys-maint‘.
Eine Webrecherche brachte dann Gewissheit. Debian benutzt einen eigenen User für Operationen mit dem MySQL Dienst. Die Credentials für diesen User sind in der Datei /etc/mysql/debian.cnf abgelegt:
# less /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
[MySQL_upgrade]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
Um obiges Problem zu lösen, muss also ein User namens ‚debian-sys-maint‘ auf dem MySQL Server mit den entsprechenden Rechten existieren.
Dazu meldet man sich bei MySQL an:
mysql -u root -p
Mit folgendem Befehl wird in einem Schritt der User ‚debian-sys-maint‘ angelegt und mit den entsprechenden Rechten ausgestattet.
MySQL> GRANT ALL PRIVILEGES ON *.* TO ‚debian-sys-maint’@’localhost‘ IDENTIFIED BY ‚PASSWORD‘ WITH GRANT OPTION;
Ab jetzt sollte das Init Script /etc/init.d/mysql wieder wie gewohnt funktionieren:
# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.
# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
# /etc/init.d/mysql status
/usr/bin/mysqladmin Ver 8.42 Distrib 5.1.49, for debian-linux-gnu on i486
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Server version 5.1.49-3
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/MySQLd/mysqld.sock
Uptime: 6 sec
Threads: 2 Questions: 655 Slow queries: 0 Opens: 9766 Flush tables: 1 Open tables: 64 Queries per second avg: 109.166.