Zurücksetzen oder Wiederherstellen des Administratorkontokennworts für MySQL


14

Ich habe eine MySQL-Datenbank, die ich "geerbt" habe, und mir wurden die Administratoranmeldeinformationen nicht gegeben. Ich habe jedoch Zugriff auf die Box, auf der es läuft. Gibt es eine Möglichkeit, die Administratoranmeldeinformationen wiederherzustellen oder neue zu erstellen?

Antworten:


15

Lesen und führen Sie das Kapitel zum Zurücksetzen des root-Passworts im MySQL-Referenzhandbuch aus.

Mit dieser Prozedur wird der mysql-Daemon ohne Autorisierung gestartet, sodass Sie eine Verbindung herstellen können, ohne Anmeldeinformationen anzugeben. In diesem Modus können Sie eine normale Verbindung herstellen und Kennwörter und Berechtigungen zurücksetzen. Vergessen Sie danach nicht, mysql mit der richtigen Autorisierung erneut zu starten.


6

Wenn dies eine Debian / Ubuntu-Box ist, gibt es ein spezielles root-äquivalentes Konto namens debian-sys-maint . Sie können das Passwort in /etc/mysql/debian.cnf lesen

Mit diesem Passwort können Sie sich als debian-sys-maint in mysql einloggen:

mysql --defaults-file=/etc/mysql/debian.cnf mysql

Sobald Sie angemeldet sind, gehen Sie wie folgt vor:

update user set password=password('<new password>') where user='root';
flush privileges;
quit;

root sollte jetzt mit Ihrem neuen Passwort erreichbar sein:

mysql -uroot -p

3

Mein Root-Benutzer existierte nicht. Auf

CREATE USER root@localhost;

ich habe

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

Die Lösung war zu

mysqld_safe  --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Danach habe ich mit ein wenig Hilfe alle Privs einzeln hinzugefügt:

mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N

(und dieser könnte und sollte mehr automatisiert werden)

Hinweis: Das Finden der richtigen Anzahl von 'Y' in INSERTist eine PITA.


0

Da die Schritte im MySQL-Referenzhandbuch nicht sehr klar sind, versuche ich, hier in einer einfacheren Sprache zu antworten. (Diese Antwort ist für MacBook OSX-Benutzer relevant.)

  1. Da wir das aktuelle Kennwort nicht kennen, muss der MySQL-Server die aktuellen Anmeldeinformationen überspringen / umgehen. Weisen Sie den MySQL-Server an, die Zugriffsberechtigungstabelle zu überspringen, indem Sie:
    • Stoppen Sie Ihren MySQL-Server (falls er bereits läuft).
    • Suchen Sie Ihre MySQL-Konfigurationsdatei my.cnf. (Für mich wurde es @ platziert /Applications/XAMPP/xamppfiles/etc. Sie können nur suchen, wenn Sie es nicht finden können).
    • my.cnfDatei in einem beliebigen Texteditor öffnen .
    • Fügen Sie "skip-grant-tables"(ohne Anführungszeichen) am Ende des [mysqld]Abschnitts hinzu und speichern Sie die Datei.
    • Starten Sie jetzt Ihren MySQL Server. Es wird mit der skip-grant-tablesOption beginnen.
  2. Befehl öffnen Terminalund ausführenmysql
  3. Befehl ausführen mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Befehl ausführen mysql> FLUSH PRIVILEGES;
  5. Befehl ausführen mysql> exit
  6. Starten Sie den MySQL-Server neu.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.