Installa MySQL per Windows da .zip e reimposta la password di root


8

Volevo avere sul mio PC (con Windows 8.1 x64) solo il server MySQL, senza Workbench o qualcosa del genere. Quindi ho scaricato l' .ziparchivio da dev.mysql.com/downloads . È un download per Win64 su x86_64 versione 5.7.9 (MySQL Community Server (GPL)).

L'ho installato come servizio Windows, ma non c'erano mysqlsolo database information_schema. Quindi ho eseguito questo:

mysql_upgrade.exe --upgrade-system-tables

E mysqlsono stati creati database. Ma insieme ad esso è successo qualcosa con l'utente root, perché non potevo mysqlpiù accedervi .

Così ho deciso di reimpostare questa password improvvisamente apparso (perché non l'avevo prima). Ho fondato la seguente soluzione nel manuale ufficiale, ho avviato il server in questo modo:

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

Quindi ho aperto mysqlsenza password:

mysql.exe –u root

E poi ho provato a ripristinare la password di root:

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

Ma ho questo errore:

ERRORE 1131 (42000): Stai usando MySQL come utente anonimo e gli utenti anonimi non sono autorizzati a cambiare password ".

Cos'è questo? Come sono anonimo? Tutti i comandi sono stati eseguiti cmd.exesotto l'amministratore.

Cosa devo fare per ripristinare la password di root in questa situazione?

Aggiornamento 1: ho provato a verificare l'utente corrente:

SELECT USER(), CURRENT_USER();

Questo dà:

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

È strano, perché l'ho iniziato così mysql.exe -u root.

Quindi ho controllato la tabella degli utenti:

SELECT user FROM mysql.user;

Questo dà:

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

È ancora più strano. Inoltre non esiste un campo password:

SELECT user, password FROM mysql.user;

ERRORE 1054 (42S22): colonna sconosciuta "password" in "elenco campi"

Quindi non posso cambiare la sua password.

E non riesco a creare un nuovo utente:

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

ERRORE 1290 (HY000): il server MySQL è in esecuzione con l' --skip-grant-tablesopzione quindi non può eseguire questa istruzione

Adesso mi sono perso.

Aggiornamento 2: suppongo di aver fatto tutto male dall'inizio. Apparentemente, in mysqld.exe --initializequalche modo mi mancava un comando.

Quindi, è così che ho installato MySQL da .zip-archive, grazie a @RolandoMySQLDBA :

  1. Disimballare l'archivio, preparare my.ini.
  2. Esegui mysqld.exe --initialize, ottieni la password temporanea dal .errfile.
  3. Installa MySQL come servizio ed eseguilo

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Connettiti ad esso mysql -u root -pcon password temporanea.

  5. Cambia la password temporanea:

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

Risposte:


6

Da quando hai iniziato mysqldcon --skip-grant-tables , non puoi eseguire alcun comando GRANT , REVOKE o SET PASSWORD standard . Tuttavia, è possibile modificare la password root@localhostcome segue:

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

Quindi, riavvia mysqld e sei di nuovo in affari.

Quanto ad essere anonimo, se accedi subito ed esegui

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Noterai che HowYouWereAllowedToLoginavrà un nome utente vuoto e un host.

PROVACI !!!

AGGIORNAMENTO 2015-11-17 16:24 EST

La colonna nota come passwordin mysql.usernon esiste più in MySQL 5.7.

È stato rinominato authentication_string.

Approccio corretto

Quello che avresti dovuto fare è eseguire

mysqld --initialize

Ciò creerebbe la cartella di dati per te.

A root @ localhost è stata assegnata una password temporanea, che è visibile nel file di errore a partire dal seguente datetime e stringa

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

È possibile accedere con esso e quindi eseguire ALTER USER

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

Vedi la documentazione di MySQL 5.7 su SET PASSWORD


Grazie per la risposta. Sì, sono a conoscenza di tali restrizioni. Ma questi sono i passaggi del manuale di MySQL. E ho provato a seguire le tue istruzioni, per favore vedi la mia domanda modificata.
— retif

Non esiste più una colonna di password in mysql.user, quindi questo metodo non funzionerà mai più. Tuttavia, attualmente anche gli altri metodi (tramite --skip-grant-tables e --init-file) sono rotti, quindi non è possibile ripristinare le password in 5.7.9 atm.
— Mike Lischke,

@MikeLischke Grazie. Devo cancellare questa risposta
— RolandoMySQLDBA il

@MikeLischke Ho appena realizzato che la passwordcolonna è stata rinominata authentication_string.
— RolandoMySQLDBA

Bene, in realtà modificare direttamente la tabella degli utenti è un ricordo del passato e andrà via, ma anche l'uso dei comandi standard (come l'alter utente) non funziona perché al momento vengono rifiutati perché si considera un utente anonimo a cui non è consentito per emettere quei comandi (se hai avviato il server con --skip-grant-tables o --init-file). L'opzione --initialize è comunque il modo giusto per ripristinare il root pw.
— Mike Lischke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.