Ich habe viele Schritte versucht, um dieses Problem zu beheben. Es gibt so viele Quellen für mögliche Lösungen für dieses Problem, dass es schwierig ist, den Sinn aus dem Unsinn herauszufiltern. Hier habe ich endlich eine gute Lösung gefunden :
Schritt 1: Identifizieren Sie die Datenbankversion
$ mysql --version
Mit MySQL sehen Sie eine Ausgabe wie diese:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Oder für MariaDB wie folgt ausgeben:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Notieren Sie sich, welche Datenbank und welche Version Sie ausführen, da Sie sie später verwenden werden. Als Nächstes müssen Sie die Datenbank stoppen, damit Sie manuell darauf zugreifen können.
Schritt 2: Stoppen des Datenbankservers
Um das Root-Passwort zu ändern, müssen Sie den Datenbankserver vorher herunterfahren.
Sie können dies für MySQL tun mit:
$ sudo systemctl stop mysql
Und für MariaDB mit:
$ sudo systemctl stop mariadb
Schritt 3: Neustarten des Datenbankservers ohne Berechtigungsprüfung
Wenn Sie MySQL und MariaDB ausführen, ohne Informationen zu Benutzerrechten zu laden, können Sie mit Root-Rechten auf die Datenbankbefehlszeile zugreifen, ohne ein Kennwort anzugeben. Auf diese Weise können Sie auf die Datenbank zugreifen, ohne es zu wissen.
Dazu müssen Sie verhindern, dass die Datenbank die Grant-Tabellen lädt, in denen Benutzerberechtigungsinformationen gespeichert sind. Da dies ein gewisses Sicherheitsrisiko darstellt, sollten Sie auch das Netzwerk überspringen, um zu verhindern, dass andere Clients eine Verbindung herstellen.
Starten Sie die Datenbank, ohne die Grant-Tabellen zu laden oder das Netzwerk zu aktivieren:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Durch das kaufmännische Und am Ende dieses Befehls wird dieser Prozess im Hintergrund ausgeführt, sodass Sie Ihr Terminal weiterhin verwenden können.
Jetzt können Sie als Root-Benutzer eine Verbindung zur Datenbank herstellen, ohne nach einem Kennwort fragen zu müssen.
$ mysql -u root
Stattdessen wird sofort eine Datenbank-Shell-Eingabeaufforderung angezeigt.
MySQL-Eingabeaufforderung
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB Eingabeaufforderung
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Nachdem Sie Root-Zugriff haben, können Sie das Root-Passwort ändern.
Schritt 4: Ändern des Root-Passworts
mysql> FLUSH PRIVILEGES;
Jetzt können wir das Root-Passwort tatsächlich ändern.
Verwenden Sie für MySQL 5.7.6 und höher sowie MariaDB 10.1.20 und neuer den folgenden Befehl:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Verwenden Sie für MySQL 5.7.5 und älter sowie MariaDB 10.1.20 und älter :
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Stellen Sie sicher, dass new_password
Sie es durch ein neues Passwort Ihrer Wahl ersetzen .
Hinweis: Wenn der ALTER USER
Befehl nicht funktioniert, weist er normalerweise auf ein größeres Problem hin. Sie können jedoch versuchen UPDATE ... SET
, stattdessen das Root-Passwort zurückzusetzen.
[WICHTIG] Dies ist die spezifische Zeile, die mein spezielles Problem behoben hat:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Denken Sie daran, die Grant-Tabellen danach neu zu laden.
In beiden Fällen sollte eine Bestätigung angezeigt werden, dass der Befehl erfolgreich ausgeführt wurde.
Query OK, 0 rows affected (0.00 sec)
Das Kennwort wurde geändert, sodass Sie die manuelle Instanz des Datenbankservers jetzt stoppen und wie zuvor neu starten können.
Schritt 5: Starten Sie den Datenbankserver normal neu
Das Tutorial enthält einige weitere Schritte zum Neustart der Datenbank. Ich habe jedoch nur Folgendes verwendet:
Verwenden Sie für MySQL:
$ sudo systemctl start mysql
Verwenden Sie für MariaDB:
$ sudo systemctl start mariadb
Jetzt können Sie bestätigen, dass das neue Passwort korrekt angewendet wurde, indem Sie Folgendes ausführen:
$ mysql -u root -p
Der Befehl sollte nun zur Eingabe des neu zugewiesenen Kennworts auffordern. Geben Sie es ein, und Sie sollten wie erwartet Zugriff auf die Datenbankaufforderung erhalten.
Fazit
Sie haben jetzt Administratorzugriff auf den wiederhergestellten MySQL- oder MariaDB-Server. Stellen Sie sicher, dass das von Ihnen gewählte neue Root-Passwort sicher und sicher ist, und bewahren Sie es an einem sicheren Ort auf.