Ich muss MySQL in Ubuntu 16.04 mit --skip-grant-tables
aktivierter Option neu starten, aber entweder kenne ich mein Root-Passwort nicht oder es funktioniert nicht. Wie kann ich es --skip-grant-tables
ohne 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-tables
Parameter 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-networking
obige 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
.