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.