Può capitare a tutti di dimenticare la password di root di MySQL. Fortunatamente, resettare la password di root di MySQL e recuperare il pieno accesso al database è piuttosto semplice (ora ancora di più, grazie ad uno script automatico!). In questa guida vedremo come procedere
Trattazione aggiornata per presentare lo script automatico e gestire meglio il caso in cui l'utente fosse stato creato con un plugin di autenticazione diverso da quello di default.
nota: questa guida è incentrata sulla procedura da svolgere per resettare la password di root di MySQL. Per la guida all'installazione, vedi quest'altro approfondimento:
» Leggi: Guida: come installare MySQL per Linux (Ubuntu/CentOS)
Reset password root MySQL, Passo 1: Aprire il terminale
Se stai lavorando via SSH su un server MySQL remoto oppure con un'edizione spiccatamente "server" (come Ubuntu Server), sei già davanti alla linea di comando, quindi procedi al Passo successivo.
Se invece hai installato MySQL sul tuo PC locale e stai usando una distribuzione "desktop" con interfaccia grafica, devi avviare il Terminale. Con Ubuntu, ad esempio, procedi così:
- clicca sul pulsante con i 3x3 punti in basso a sinistra
- cerca
terminale
per lanciare rapidamente l'omonima applicazione
» Leggi anche: Come aprire il terminale di Ubuntu
Reset password root MySQL, Passo 2: Diventare root
Iniziamo ottenendo privilegi massimi, diventando root. Il comando è:
sudo -s
In caso ti fosse richiesta la password, digita quella dell'account corrente.
» Leggi anche: Linux (Ubuntu) e sudo: come disabilitare la richiesta di password quando si eseguono comandi come root
In alternativa, puoi utilizzare il tuo utente "normale" ed anteporre sudo
ad ogni comando mostrato di seguito.... ma divenire root immediatamente è molto più comodo.
Reset password root MySQL automaticamente
Nel prosieguo della guida vedremo come resettare la password di root di MySQL manualmente, un passo alla volta. Ma se hai fretta e vuoi fare tutto automaticamente, puoi utilizzare questo script che ho preparato allo scopo:
sudo apt install curl -y && curl -s https://raw.githubusercontent.com/TurboLabIt/webstackup/master/script/mysql/password-reset.sh?$(date +%s) | sudo bash
Ti verrà chiesto di indicare, in sequenza:
- il nome utente MySQL del quale vuoi resettare la password - batti direttamente
Invio
per indicare l'utenteroot
) - la nuova password da impostare - se batti direttamente
Invio
, ne verrà generata una casuale - l'host relativo all'utente in questione - se batti direttamente
Invio
, verrà utilizzatolocalhost
, che è la situazione più comune
Al termine, potrai connetterti con le credenziali scelte
La procedura è terminata e non devi fare altro. Se però preferisci non usare lo script e fare tutto manualmente, continua a leggere.
Reset password root MySQL, Passo 3: Preparare il file
Per resettare la password di MySQL manualmente dobbiamo innanzitutto preparare un file che contiene l'istruzione di reset. Impartisci questo comando per creare detto file e aprirlo nell'editor:
nano /etc/mysql/reset
» Leggi anche: Guida: modificare i file di configurazione di Linux Ubuntu/CentOS da terminale è facile con "nano" (alternativa a "vi")
Ora copia-incolla queste righe (per incollare in nano devi usare la combinazione da tastiera Ctrl+Alt+V
):
ALTER USER 'root'@'localhost' BY 'miaNuovaPasswordDiRoot';
ALTER USER 'root'@'%' BY 'miaNuovaPasswordDiRoot';
(sostituendo a miaNuovaPasswordDiRoot
la nuova password di root che desideriamo impostare)
Da notare che i due comandi forniti cambiano la password di MySQL per l'utente root solo per i casi "generali" (connessione da localhost e da qualsiasi altro host). Se avevi configurato anche altri host specifici (come 10.0.0.100
), devi accodarli al comando seguendo la sintassi indicata. Ad esempio:
ALTER USER 'root'@'10.0.0.100' IDENTIFIED WITH mysql_native_password BY 'miaNuovaPasswordDiRoot';
Una volta preparato il file, premi Ctrl+O
, poi Invio
e Ctrl+X
per salvare le modifiche e chiudere l'editor.
Reset password root MySQL, Passo 4: Modificare i permessi
Per motivi di sicurezza, riduciamo al minimo i permessi di accesso al file appena creato:
chown mysql:mysql /etc/mysql/reset && chmod u=r,go= /etc/mysql/reset
Reset password root MySQL, Passo 5: Arrestare il servizio
Dobbiamo ora arrestare il servizio di MySQL. Il comando è
service mysql stop
Reset password root MySQL, Passo 6: Impostare la nuova password
Procediamo ad avviare MySQL come applicazione, specificando di leggere ed eseguire le istruzioni contenute nel file che abbiamo creato un attimo fa:
mysqld --user=mysql --init-file=/etc/mysql/reset &
Subito dopo, diamo un'occhiata al log per verificare che l'operazione sia andata a buon fine:
tail -n 100 /var/log/mysql/error.log
Se l'ultima riga legge qualcosa di simile a [Server] /usr/sbin/mysqld: ready for connections
, l'operazione è andata a buon fine
Reset password root MySQL, Passo 7: Arrestare l'applicazione
In questo momento, MySQL è in esecuzione come applicazione e non come servizio. Per ripristinare la situazione di funzionamento normale procediamo ad arrestare l'applicazione:
pkill mysql
Consultando il log (tail -n 10 /var/log/mysql/error.log
) dovremmo trovare una dicitura simile a [Server] /usr/sbin/mysqld: Shutdown complete
Reset password root MySQL, Passo 8: Riavviare il servizio
Riavviamo infine il servizio di MySQL:
service mysql start
Verifica finale
Arrivati a questo punto, MySQL funziona di nuovo regolarmente e la password di root è stata modificata. Per verificarlo, proviamo a connetterci dalla linea di comando:
mysql -uroot -p'miaNuovaPasswordDiRoot' -h 127.0.0.1
(sostituendo a miaNuovaPasswordDiRoot
la nuova password che abbiamo impostato)
Se viene visualizzato il prompt mysql>
, significa che l'operazione è andata a buon fine
Prima di concludere, raccomando di eliminare il file che abbiamo utilizzato per il reset:
rm -f /etc/mysql/reset
Conclusioni
In questa guida abbiamo visto come fare il reset della password di MySQL. Si tratta di un'operazione che non dobbiamo eseguire molto spesso, ma prima o poi capita a tutti di dimenticare la password, oppure di dover accedere ad un database amministrato da qualcun altro che non ci ha opportunamente condiviso l'accesso.