MySQL
Ripristina e reimposta la password di root predefinita per MySQL 5.7+
Ricerca…
introduzione
Dopo MySQL 5.7, quando installiamo MySQL a volte non è necessario creare un account di root o fornire una password di root. Per impostazione predefinita, quando si avvia il server, la password predefinita viene archiviata nel file mysqld.log
. Dobbiamo accedere al sistema usando quella password e dobbiamo cambiarlo.
Osservazioni
Il ripristino e il ripristino della password di root predefinita con questo metodo è applicabile solo per MySQL 5.7+
Cosa succede quando l'avvio iniziale del server
Dato che la directory dei dati del server è vuota:
- Il server è inizializzato.
- Il certificato SSL e i file chiave vengono generati nella directory dei dati.
- Il plug-in validate_password è installato e abilitato.
- L'account superuser 'root' @ 'localhost' viene creato. La password per il superutente è impostata e memorizzata nel file di log degli errori.
Come cambiare la password di root usando la password predefinita
Per rivelare la password di "root" predefinita:
shell> sudo grep 'temporary password' /var/log/mysqld.log
Modifica la password di root il prima possibile accedendo con la password temporanea generata e imposta una password personalizzata per l'account superuser:
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!';
Nota: il plugin validate_password di MySQL è installato per impostazione predefinita. Ciò richiede che le password contengano almeno una lettera maiuscola, una lettera minuscola, una cifra e un carattere speciale e che la lunghezza totale della password sia di almeno 8 caratteri.
reimpostare la password di root quando "/ var / run / mysqld" per il file socket UNIX non esiste "
se dimentico la password, ricevo l'errore.
$ mysql -u root -p
Inserire la password:
ERRORE 1045 (28000): accesso negato per utente 'root' @ 'localhost' (utilizzando la password: YES)
Ho provato a risolvere il problema conoscendo prima lo stato:
$ systemctl status mysql.service
mysql.service - MySQL Community Server Loaded: caricato (/lib/systemd/system/mysql.service; enabled; impostazione del fornitore: it Attivo: attivo (in esecuzione) da Thu 2017-06-08 14:31:33 IST; 38s fa
Poi ho usato il codice mysqld_safe --skip-grant-tables &
ho ricevuto l'errore:
mysqld_safe La directory '/ var / run / mysqld' per il file socket UNIX non esiste.
$ systemctl stop mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &
Ho risolto:
$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld
Ora uso lo stesso codice mysqld_safe --skip-grant-tables &
e get
mysqld_safe Avvio del demone mysqld con i database da / var / lib / mysql
Se uso $ mysql -u root
:
Versione server: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle e / o le sue affiliate. Tutti i diritti riservati.
Oracle è un marchio registrato di Oracle Corporation e / o delle sue affiliate. Gli altri nomi possono essere marchi dei rispettivi proprietari.
Digita "aiuto"; o "\ h" per aiuto. Digita "\ c" per cancellare l'istruzione di input corrente.
mysql>
Ora è il momento di cambiare password:
mysql> use mysql
mysql> describe user;
Informazioni sulla tabella di lettura per il completamento dei nomi di tabelle e colonne È possibile disattivare questa funzionalità per ottenere un avvio più rapido con -A
Database cambiato
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');
oppure Se si dispone di un account root mysql che può connettersi ovunque, si dovrebbe anche fare:
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
Metodo alternativo:
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = 'localhost' AND User = 'root';
E se hai un account root che può accedere da ovunque:
USE mysql
UPDATE user SET Password = PASSWORD('newpwd')
WHERE Host = '%' AND User = 'root';`enter code here
ora è necessario quit
da mysql e fermarsi / iniziare
FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
ora di nuovo `mysql -u root -p 'e usa la nuova password per ottenere
mysql>