MySQL: Root-Passwort retten

 

Ab und zu kann es passieren, dass man sein Root-Passwort für den MySQL-Root vergessen hat. Um einer Neuinstallation von MySQLvorzubeugen, möchte ich hier Lösungswege zeigen, mit denen man sich wieder Zutritt zu MySQL verschaffen kann.


Grundsätzlich kann man das Rootpasswort so setzen

  1. Öffnen Sie auf dem Server eine Root-Konsole.

  2. Geben Sie folgenden Befehl ein: 

# mysqladmin --user=root --password=<altes_pw> password <neues_pw>

Wenn man aber nicht mehr als Root reinkommt helfen diese zwei Wege.

Der Weg über die Shell

Dabei wird MySQL gestoppt, um dann eine MySQL-Initialisierungs-Datei beim sicheren MySQL-Start aufzurufen.

# /etc/init.d/mysql stop
# echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');" >~/setrootpassword.sql
# mysqld_safe --init-file=~/setrootpassword.sql

Anschließend wird dieser Prozeß wieder gestoppt

[ctrl]+[c]

oder mit

# ps aux | grep mysql
# root      3313  0.0  0.0  11008  1364 ?        S    08:10   0:00 /bin/sh /usr/bin/mysqld_safe

# kill 3313

Danach kann MySQL wieder normal gestartet werden. Und nach einem Löschen der Passwortdatei kann man sich wieder auf dem MySQL-Monitor einloggen.

/etc/init.d/mysql start
rm -f ~/setrootpassword.sql

 

Sollten alle User weg sein, so kann man auch einen neuen root-User anlegen. Statt SET PASSWORD ... wird dann folgender MySQL-Befehl gesetzt werden:

GRANT ALL PRIVILEGES TO root@localhost IDENTIFIED BY 'MyNewPassword';

 

 

Oder mit zwei Shells

1. Shell:

# /etc/init.d/mysql stop/usr/bin/mysqld --skip-networking --skip-grant-tables

2. Shell:

# mysqladmin -u root password "NEUESPW" 

Zurück in der 1. Shell:

[ctrl]+[c]

# /etc/init.d/mysql start

Der Weg über die Konfigurationsdatei my.cnf

Da dieser Weg wegen der Sichbarkeit in der MySQL-History unsicher ist, muss diese später editiert werden.

Wir editieren die my.cnf /etc/mysql/my.cnf (Debian) oder unter /etc/my.cnf) und schreiben in die [mysqld]-Sektion:

skip-grant-tables

# /etc/init.d/mysql restart
# mysql -u root
    >UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
    >quit

Der Eintrag "skip-grant-tables" muss jetzt wieder aus der my.cnf herausgenohmen werden. Dann wird MySQL neugestartet.

# /etc/init.d/mysql restart

 
Das Passwort löschen wir aus der MySQL-History des Benutzers, indem wir die Datei ~/.mysql_history mit einem Editor im jeweiligen HOME-Verzeichnis öffnet,  nach der oben genannten Zeile sucht und sie löscht.