Wie starte ich MySQL mit --skip-grant-tables neu, wenn Sie das Root-Passwort nicht verwenden können?

Wie starte ich MySQL mit --skip-grant-tables neu, wenn Sie das Root-Passwort nicht verwenden können?

Ich muss MySQL in Ubuntu 16.04 mit --skip-grant-tablesaktivierter Option neu starten, aber entweder kenne ich mein Root-Passwort nicht oder es funktioniert nicht. Wie kann ich es --skip-grant-tablesohne Passwort einrichten?

Wenn ich es als normaler Benutzer versuche:

mysqld --skip-grant-tables

Ich sehe es:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

Also habe ich dieses Beispiel aus /etc/init.d/mysql ausgegraben und den --skip-grant-tablesParameter hinzugefügt:

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

Also su funktioniert nicht und das Root-Passwort hat auch nicht funktioniert. Ich habe auch Folgendes versucht:

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

Wie kann ich MySQL mit --skip-grant-tables starten?

Antwort1

Wenn Sie Ihr Root-Passwort nicht kennen (oder ein Fehler wie 'ERROR 1045 (28000): Access denied for user 'root'@'localhost'verhindert den Zugriff), können Sie Zugriff erhalten, indem Sie die Option zur MySQL-Konfigurationsdatei hinzufügen. Öffnen Sie sie zunächst zum Bearbeiten:

sudo nano /etc/mysql/my.cnf

Suchen Sie anschließend darunter [mysqld]nach den folgenden Werten und geben Sie sie ein:

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

Wie Sie sehen, besteht der Trick beim Hinzufügen von Befehlszeilenparametern darin, das --vor dem Parameter zu entfernen. JetztStarten Sie den MySQL-Dienst neuund Sie können auf Ihre Tabellen zugreifen, um Ihr Root-Benutzerkennwort zurückzusetzen oder fast alles, was Sie tun müssen. (Sie können jedoch nichts mit den Berechtigungstabellen tun, da diese nicht geladen sind.)

In acht nehmen.In diesem Modus hat jeder angemeldete Benutzer Zugriff auf Ihre gesamte Datenbank. Aus diesem Grund habe ich die skip-networkingobige Option hinzugefügt, damit Remotebenutzer während der Wiederherstellung nicht auf die Tabellen zugreifen können.

Denken Sie daran, diese Zeilen auszukommentieren und MySQL erneut zu starten, wenn Sie fertig sind, um den Server erneut zu sichern.

Antwort2

Aus Kommentaren.

Für init.rc-Konfigurationen:

Die einfachste Methode wäre, /etc/init.d/mysql vorübergehend zu ändern, um die Option einzuschließen --skip-grant-tables, und es dann mit diesem Skript zu starten (/etc/init.d/mysql start).

Auf Upstart-Systemen wie Ubuntu 16.04 muss dies in erfolgen /lib/systemd/system/mysql.service.

verwandte Informationen