Problem:
Man hat das MySQL-Root-Passwort vergessen. Vorrausgesetzt es existiert ein root-User für MySQL (siehe Plesk: Admin-Passwort verloren) und es steht nicht in der Datei ~/.my.cnf
(wo es eigentlich auch nicht stehen sollte).
1.Lösung (eine Shell):
Hier wird der Weg über eine MySQL-Initialisierungs-Datei gegangen:
/etc/init.d/mysql stop
echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');" >~/setrootpassword.sql
mysqld_safe --init-file=~/setrootpassword.sql
#[ctrl]+[c]
/etc/init.d/mysql start
rm -f ~/setrootpassword.sql
PS: Falls mal alle User weg sein sollten, kann man natürlich auch einen neuen root-User anlegen. Statt SET PASSWORD ...
muss dann folgender SQL-Befehl gesetzt werden:
GRANT ALL PRIVILEGES TO root@localhost IDENTIFIED BY 'MyNewPassword';
Selber Weg mit zwei Shells:
Erste Shell:
/etc/init.d/mysql stop
/usr/sbin/mysqld --skip-networking --skip-grant-tables
Zweite Shell:
mysqladmin -u root password "NEUESPW"
Wieder erste Shell:
#[ctrl]+[c]
/etc/init.d/mysql start
2.Lösung:
Diese wird als nicht so sicher angesehen, da das Passwort später in der MySQL-History sichtbar ist. Dies werden wir hier aber danach löschen.
Editier die my.cnf (/etc/my.cnf
oder Debian: /etc/mysql/my.cnf
) und schreibe in die [mysqld]
-Sektion:
skip-grant-tables
/etc/init.d/mysql restart
mysql -uroot
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
exit
# "skip-grant-tables" wieder aus der my.cnf rausnehmen
/etc/init.d/mysql restart
Um das Passwort aus der MySQL-History zu löschen, öffnet man die Datei ~/.mysql_history
im Editor, sucht nach der o.g. Zeile und löscht diese.