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 <code>~/.my.cnfcode> (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 <code>SET PASSWORD ...code> 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 (<code>/etc/my.cnfcode> oder Debian: <code>/etc/mysql/my.cnfcode>) und schreibe in die <code>[mysqld]code>-Sektion:
<code>skip-grant-tablescode>
/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 <code>~/.mysql_historycode> im Editor, sucht nach der o.g. Zeile und löscht diese.