Ho provato molti passaggi per correggere questo problema. Ci sono così tante fonti per possibili soluzioni a questo problema che è difficile filtrare il senso dall'assurdità. Finalmente ho trovato una buona soluzione qui :
Passaggio 1: identificare la versione del database
$ mysql --version
Vedrai alcuni output come questo con MySQL:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
O output come questo per MariaDB:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Prendi nota del database e della versione in uso, poiché li utilizzerai in seguito. Successivamente, è necessario arrestare il database in modo da poter accedervi manualmente.
Passaggio 2: arresto del server database
Per modificare la password di root, è necessario arrestare preventivamente il server di database.
Puoi farlo per MySQL con:
$ sudo systemctl stop mysql
E per MariaDB con:
$ sudo systemctl stop mariadb
Passaggio 3: riavviare il server database senza controllo delle autorizzazioni
Se si esegue MySQL e MariaDB senza caricare informazioni sui privilegi dell'utente, sarà possibile accedere alla riga di comando del database con i privilegi di root senza fornire una password. Ciò ti consentirà di accedere al database senza saperlo.
Per fare ciò, è necessario interrompere il caricamento delle tabelle di concessione nel database, che memorizzano le informazioni sui privilegi dell'utente. Poiché questo rappresenta un po 'un rischio per la sicurezza, dovresti anche saltare la rete e impedire ad altri client di connettersi.
Avviare il database senza caricare le tabelle delle sovvenzioni o abilitare la rete:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
La e commerciale alla fine di questo comando farà eseguire questo processo in background in modo da poter continuare a utilizzare il terminale.
Ora puoi connetterti al database come utente root, che non dovrebbe chiedere una password.
$ mysql -u root
Vedrai immediatamente invece un prompt della shell del database.
MySQL Prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Richiesta MariaDB
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Ora che hai accesso root, puoi cambiare la password di root.
Passaggio 4: modifica della password di root
mysql> FLUSH PRIVILEGES;
Ora possiamo effettivamente cambiare la password di root.
Per MySQL 5.7.6 e versioni successive , nonché per MariaDB 10.1.20 e versioni successive , utilizzare il comando seguente:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Per MySQL 5.7.5 e più anziani , così come MariaDB 10.1.20 e più anziani , l'uso:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Assicurati di sostituire new_password
con la tua nuova password preferita.
Nota: se il ALTER USER
comando non funziona, di solito è indicativo di un problema più grande. Tuttavia, puoi provare UPDATE ... SET
a reimpostare la password di root.
[IMPORTANTE] Questa è la riga specifica che ha risolto il mio problema specifico:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Ricorda di ricaricare le tabelle delle sovvenzioni dopo questo.
In entrambi i casi, dovresti vedere la conferma che il comando è stato eseguito con successo.
Query OK, 0 rows affected (0.00 sec)
La password è stata modificata, quindi ora è possibile interrompere l'istanza manuale del server di database e riavviarla come prima.
Passaggio 5: riavviare il server database normalmente
L'esercitazione prevede ulteriori passaggi per riavviare il database, ma l'unico pezzo che ho usato è stato questo:
Per MySQL, utilizzare:
$ sudo systemctl start mysql
Per MariaDB, utilizzare:
$ sudo systemctl start mariadb
Ora puoi confermare che la nuova password è stata applicata correttamente eseguendo:
$ mysql -u root -p
Il comando dovrebbe ora richiedere la nuova password assegnata. Inseriscilo e dovresti ottenere l'accesso al prompt del database come previsto.
Conclusione
Ora hai accesso amministrativo al server MySQL o MariaDB ripristinato. Assicurati che la nuova password di root scelta sia forte e sicura e conservala in un luogo sicuro.