Reset della password dell'utente root di MySQL

Dimenticare le password non è cosa così infrequente, anzi. Spesso è possibile ovviare a questa dimenticanza in modo molto semplice (si pensi ad esempio agli strumenti di "recupero password" comuni in molte web-application), altre volte la cosa è piuttosto complicata.

Recentemente mi è capitato di dover aiutare un cliente distratto che si era dimenticato la password di root per la gestione del MySQL installato sul suo server. Accedendo alla console come root, infatti, riceveva questo messaggio:

Continua dopo la pubblicità...
Access denied for user 'root'@'localhost' (using password: NO)

Il problema è che per cambiare la password di amministrazione di MySQL... bisogna prima accedere come amministratore!

In realtà quest'ultima affermazione è vera solo in parte in quanto, avendo accesso alla root del server, avremo comunque il controllo del MySQL e quindi abbiamo la possibilità di seguire strade alternative.

In questo articolo vedremo, appunto, come re-impostare la password di root del MySQL che ci siamo dimenticati; requisito essenziale e che si abbia accesso al server con privilegi di amministrazione.

Accediamo quindi alla shell del nostro server. Una volta effettuato l'accesso stoppiamo il processo mysql, per far questo si dovrà lanciare il seguente comando da terminale:

/etc/init.d/mysqld stop

Fatto questo si dovrà riavviare, sempre da Shell, il processo precedentemente bloccato utilizzando la direttiva --skip-grant-tables essa permetterà di accedere all'applicazione senza che il sistema provveda a richiedere una password per l'autenticazione:

mysqld_safe --skip-grant-tables &

se stiamo operando in locale sul server (cioè solo se abbiamo un accesso diretto e fisico con la macchina) è bene anche bloccare l'accesso remoto:

mysqld_safe --skip-grant-tables --skip-networking &

Una volta avviato il servizio in questa modalità possiamo accedere al MySQL con:

mysql -u root

Bene, siamo dentro! Ora possiamo re-impostare la nostra password di root:

USE mysql;
UPDATE user SET password=PASSWORD("nuova_pass") WHERE User='root';
FLUSH PRIVILEGES;
exit;

Molto importante dopo aver settato la nuova password effettuare un FLUSH dei privilegi!

Ora non resta che riavviare il demone del MySQL:

/etc/init.d/mysqld restart

Una volta riavviato proviamo ad accedere con le nuove credenziali... se tutto è andato per il meglio dovrebbe funzionare!

I commenti degli utenti

I commenti sono sottoposti alle linee guida di moderazione e prima di essere visibili devono essere approvati da un moderatore.