In diesem Artikel zeige ich Ihnen, wie Sie das MySQL-Root-Passwort auf zwei verschiedene Arten zurücksetzen können. Außerdem funktionieren beide Methoden mit dem Oracle-freien MariaDB-Fork.
Warum?
Es gibt zwei Hauptgründe, warum man das Root-Passwort zurücksetzen müsste:
- Sie haben dieses Passwort vergessen
- Sie wissen nicht dieses Passwort
Es kann viele Gründe dafür geben, das Passwort nicht zu kennen:Sie haben das Passwort nie gekannt und der alte DBA ist weg; jemand hat sich aus Spaß oder böswilligen Gründen geändert; es ist 3 Uhr morgens, das System ist abgestürzt und der DBA ist im Urlaub in einem anderen Land usw.
Tatsache ist, dass Sie eines Morgens die Datenbank vollstopfen müssen und zu dieser Situation kommen:
Ich gehe davon aus, dass Sie einen Superuser haben (d. h. su oder sudo zu root) Zugriff auf das Betriebssystem. Mein Betriebssystem in diesem Tutorial ist Debian Linux.
Bei beiden Methoden müssen Sie den mysql-Dienst zuvor stoppen. Tun Sie dies mit (vergessen Sie nicht, bei Bedarf su/sudo zu verwenden):
# service mysql stop
Methode 1:
Erstellen Sie eine Datei mit dem SQL-Befehl, um ein neues Root-Passwort festzulegen, das wir beim Start von mysql verwenden werden. Sie können einen beliebigen Texteditor verwenden oder einfach Folgendes eingeben:
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';" > passreset.sql
Wenn Sie den Texteditor wählen, erstellen Sie eine Datei nur mit dem fettgedruckten Teil. Wählen Sie natürlich eine echte Passwort, leicht zu merken und schwer zu entdecken.
Und starten Sie es manuell mit dem Benutzer mysql ( -u mysql) und mit der zuvor erstellten Datei (–init-file:passreset.sql). Die vollständige Befehlszeile wäre:
# mysqld -u mysql --init-file=/var/lib/mysql/passreset.sql
Warten Sie bis die Meldung:mysqld:bereit für Verbindungen . Öffnen Sie dann eine andere Konsole, um Ihr neues Root-Passwort zu testen:
Methode 2:
In der Vergangenheit habe ich mehrmals im Internet gesehen, wie man das MySQL-Root-Passwort zurücksetzt. Beim ersten Versuch heute Morgen hat es bei mir nicht funktioniert, aber ich habe einen Workaround gefunden.
Wir werden diesen Schalter des mysqld-Befehls verwenden:
--skip-grant-tables Start without grant tables. This gives all users FULL ACCESS to all tables.
Dadurch hatte ich vollen Zugriff auf alle Tabellen. Das Verfahren besteht darin, eine Verbindung zu mysql herzustellen und den ALTER USER-Befehl auszuführen, den wir in der vorherigen Methode gesehen haben, aber ich habe eine Fehlermeldung erhalten, dass mysqld mit skip-grant-tables ausgeführt wird.
Die Problemumgehung besteht darin, mysqld mit dem Schalter skip-grant-tables auszuführen und den mysql-Benutzer zu verwenden. Die vollständige Befehlszeile lautet:
# mysqld -u mysql --skip-grant-tables
Und leeren Sie in einer anderen Konsole die Berechtigungen vor dem Update und leeren Sie dann die Berechtigungen erneut:
# mysql -u root
MariaDB (none) > flush privileges;
MariaDB (none) > ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
MariaDB (none) > flush privileges;
MariaDB (none) > ^DBye
Fertig
Jetzt können Sie mysql stoppen und normal starten. In meinem Fall hat Strg-C nicht funktioniert, um es zu stoppen, ich muss den manuell gestarteten Prozess vorher beenden:
# killall mysqld
# service mysql start
Und das ist es, mit einer dieser Methoden gewinnen Sie die Kontrolle über Ihre MySQL oder MariaDB zurück.