Installieren Sie MySQL für Windows von .zip und setzen Sie das Root-Passwort zurück


8

Ich wollte auf meinem PC (mit Windows 8.1 x64) nur den MySQL-Server haben, ohne Workbench oder so. Also habe ich das .zipArchiv von dev.mysql.com/downloads heruntergeladen . Es ist ein Download für Win64 auf x86_64 Version 5.7.9 (MySQL Community Server (GPL)).

Ich habe es als Windows-Dienst installiert, aber es gab nur keine mysqlDatenbank information_schema. Also habe ich folgendes ausgeführt:

mysql_upgrade.exe --upgrade-system-tables

Und mysqlDatenbanken wurden erstellt. Aber zusammen mit dem Root-Benutzer passierte etwas, weil ich nicht mysqlmehr darauf zugreifen konnte.

Also entschied ich mich, dieses plötzlich erscheinende Passwort zurückzusetzen (weil ich es vorher nicht hatte). Ich habe die folgende Lösung im offiziellen Handbuch gegründet und den Server folgendermaßen gestartet:

mysqld.exe --skip-grant-tables --console

Dann habe ich mysqlohne Passwort geöffnet :

mysql.exe u root

Und dann versucht, das Root-Passwort zurückzusetzen:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

Aber ich habe diesen Fehler bekommen:

FEHLER 1131 (42000): Sie verwenden MySQL als anonymen Benutzer und anonyme Benutzer dürfen keine Kennwörter ändern. "

Was ist das? Wie bin ich anonym? Alle Befehle wurden cmd.exeunter dem Administrator ausgeführt.

Was kann ich tun, um das Root-Passwort in dieser Situation zurückzusetzen?

Update 1: Ich habe versucht, den aktuellen Benutzer zu überprüfen:

SELECT USER(), CURRENT_USER();

Das gibt:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

Das ist komisch, weil ich es so angefangen habe mysql.exe -u root.

Dann habe ich die Benutzertabelle überprüft:

SELECT user FROM mysql.user;

Das gibt:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

Das ist noch seltsamer. Auch gibt es kein Passwortfeld:

SELECT user, password FROM mysql.user;

FEHLER 1054 (42S22): Unbekannte Spalte 'Passwort' in 'Feldliste'

Daher kann ich das Passwort nicht ändern.

Und ich kann keinen neuen Benutzer erstellen:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

FEHLER 1290 (HY000): Der MySQL-Server wird mit der --skip-grant-tablesOption ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann

Jetzt bin ich verloren.

Update 2: Ich denke, ich habe von Anfang an alles falsch gemacht. Anscheinend habe ich mysqld.exe --initializeirgendwie einen Befehl verpasst .

So habe ich MySQL dank @RolandoMySQLDBA aus dem ZIP-Archiv installiert :

  1. Archiv auspacken, vorbereiten my.ini.
  2. Ausführen mysqld.exe --initialize, temporäres Passwort aus der .errDatei abrufen.
  3. Installieren Sie MySQL als Dienst und führen Sie es aus

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Stellen Sie eine Verbindung mysql -u root -pmit einem temporären Passwort her.

  5. Ändern Sie das temporäre Passwort:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';

Antworten:


6

Da Sie mysqldmit --skip-grant-tables begonnen haben , können Sie keine Standardbefehle GRANT , REVOKE oder SET PASSWORD ausführen. Trotzdem können Sie das Passwort root@localhostwie folgt ändern :

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

Starten Sie dann mysqld neu und Sie sind wieder im Geschäft.

Wenn Sie sich jetzt anmelden und ausführen, werden Sie anonym

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Sie werden feststellen, dass das HowYouWereAllowedToLogineinen leeren Benutzernamen und einen Host hat.

VERSUCHE ES !!!

UPDATE 17.11.2015 16:24 EST

Die als passwordin bekannte Spalte mysql.userist in MySQL 5.7 nicht mehr vorhanden.

Es wurde umbenannt authentication_string.

Richtiger Ansatz

Was Sie hätten tun sollen, ist laufen

mysqld --initialize

Das würde den Datenordner für Sie erstellen.

Dem root @ localhost wurde ein temporäres Kennwort zugewiesen, das in der Fehlerdatei ab dem folgenden Datum und der folgenden Zeichenfolge angezeigt wird

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

Sie können sich damit anmelden und dann ausführen ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Siehe die MySQL 5.7-Dokumentation zu SET PASSWORD


Danke für deine Antwort. Ja, mir sind solche Einschränkungen bekannt. Dies sind jedoch die Schritte aus dem MySQL-Handbuch. Und ich habe versucht, Ihren Anweisungen zu folgen, siehe meine bearbeitete Frage.
Retif

In mysql.user gibt es keine Kennwortspalte mehr, daher funktioniert diese Methode nie wieder. Derzeit sind jedoch auch die anderen Methoden (über --skip-grant-tables und --init-file) fehlerhaft, sodass Sie Kennwörter in 5.7.9 atm nicht zurücksetzen können.
Mike Lischke

@ MikeLischke Danke. Ich muss diese Antwort löschen
RolandoMySQLDBA

@ MikeLischke Ich habe gerade festgestellt, dass die passwordSpalte umbenannt wurde authentication_string.
RolandoMySQLDBA

Nun, das direkte Ändern der Benutzertabelle gehört der Vergangenheit an und wird verschwinden, aber selbst die Verwendung von Standardbefehlen (wie "Benutzer ändern") funktioniert nicht, da sie derzeit abgelehnt werden, da Sie als anonymer Benutzer betrachtet werden, der nicht zulässig ist um diese Befehle auszugeben (wenn Sie den Server mit --skip-grant-tables oder --init-file gestartet haben). Die Option --initialize ist jedoch der richtige Weg, um das Root-Pw zurückzusetzen.
Mike Lischke
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.