Hai appena completato l'aggiornamento del tuo server MySQL (magari passando alla recentissima versione MySQL 8.4 o superiore) e, all'improvviso, la tua applicazione web ha smesso di connettersi al database? Probabilmente i log parlano chiaro e restituiscono un errore inequivocabile: Plugin 'mysql_native_password' is not loaded. Ebbene: in questo articolo vedremo esattamente perché succede e, soprattutto, come risolvere il problema "Plugin 'mysql_native_password' is not loaded" in pochi minuti.

Perché compare questo errore?
Il motivo è semplice: nelle versioni recenti, MySQL ha deciso di dare un taglio netto al passato. Il vecchio plugin di autenticazione mysql_native_password (meno sicuro in base agli standard odierni) è stato completamente disabilitato di default, in favore del più moderno e robusto caching_sha2_password.
Se l'utente del database che la tua applicazione utilizza per connettersi è ancora configurato con il vecchio plugin (magari perché l'avevi creato con una versione precedente), il server MySQL rifiuterà la connessione.

Per risolvere, procederemo di une modi: una soluzione rapida (per rimettere subito online il servizio) e una soluzione definitiva (caldamente consigliata per evitare problemi futuri).
Soluzione rapida: riattivare il vecchio plugin
Se hai un sito "di produzione" bloccato e devi ripristinare il funzionamento nel più breve tempo possibile (hanno già iniziato a telefonarti, vero?), possiamo dire a MySQL di caricare nuovamente il vecchio plugin mysql_native_password. Questo farà sì che tutto quanto ritorni a funzionare immediatamente, senza bisogno di ulteriori modifiche.

Allo scopo, creiamo un nuovo file dedicato nella cartella delle configurazioni di MySQL. Impartisci il seguente comando:
- con Ubuntu o Debian:
sudo nano /etc/mysql/mysql.conf.d/30-restore-native-password.cnf - con RedHat e derivate:
sudo nano /etc/my.cnf.d/30-restore-native-password.cnf
Se ottieni un errore simile a command nano not found, devi prima installare l'editor seguendo quest'altra guida:
Ora copia-incolla le seguenti righe (per incollare in nano devi usare la combinazione da tastiera Ctrl+Alt+V):
[mysqld]
mysql_native_password=ON

Salviamo il file (Ctrl+O, Invio, Ctrl+X) e riavviamo il demone di MySQL per applicare le modifiche: sudo systemctl restart mysql
Fatto! Ora la tua applicazione dovrebbe essere in grado di connettersi esattamente come prima dell'aggiornamento.
Ricorda che potrai eliminare questo file non appena avrai applicato la soluzione definitiva proposta di seguito.
Soluzione definitiva: aggiornare gli utenti
Il plugin mysql_native_password è ormai deprecato e verrà rimosso del tutto in futuro. La mossa più saggia è migrare i tuoi utenti al nuovo standard caching_sha2_password.
Per prima cosa, entriamo nella console di MySQL impartendo il seguente comando: mysql -u root -p. Ti verrà chiesto di fornire la password dell'utente root di MySQL. Dovresti averla appuntata nel tuo gestore di password oppure, se hai installato MySQL utilizzando il nostro script automatico, puoi leggerla impartendo:
sudo cat /etc/turbolab.it/mysql.conf
Se non riesci a trovarla in alcun modo, hai un altro problema da risolvere. Fai riferimento a quest'altro approfondimento dedicato

Una voltra entrato nella console di MySQL, lancia questa query per scoprire quali utenti stanno ancora usando il vecchio plugin:
SELECT user, host, plugin FROM mysql.user WHERE plugin = 'mysql_native_password';
Il risultato sarà una tabella che ci indicherà esattamente i nomi utente da aggiornare

Ora: per ogni utente trovato, dobbiamo lanciare un comando ALTER USER, inserendo la sua password attuale. Il modello è il seguente:
ALTER USER 'nomeUtente'@'nomeHost' IDENTIFIED WITH caching_sha2_password BY 'suaPassword';
Sostituisci i valori appropriati:
nomeUtente: è lo username visualizzato nella colonnauserdella tabellanomeHost: è l'hostname visualizzato nella colonnahostdella tabellasuaPassword: è la password attuale dell'utente in questione. Se non l'hai salvata nel tuo gestore di password, puoi leggerla dai file di configurazione del sito web o dell'applicazione che lo usa: prova a verificare se esiste un file.envoppure un fileconfig.phpo similari

Se proprio non trovi la password dell'utente da inserire nel comando, hai un ulteriore problema: puoi sicuramente "resettarla" tramite console MySQL (oppure da MySqlWorkbench o simili), ma poi l'applicazione che proverà a connettersi non funzionerà più fino a quando non aggiornerai la password anche lì.
Il comando appena indicato ha effetto immediato: non appena impartito, la modifica sarà immediatamente effettiva e l'applicazione dovrebbe riuscire a connettersi come prima.
Impartisci exit; per uscire dalla console di MySQL.
Come aggiornare tutti gli utenti in un colpo solo
Purtroppo, dovrai ripetere il comando indicato in precedenza (adattandolo) per ogni utente interessato. Non è infatti possibile aggiornarli in un colpo solo, magari tramite un semplice UPDATE su tutta la tabella. Il motivo è "crittografico": il vecchio plugin usa un algoritmo hash SHA1, il nuovo usa SHA256. MySQL non può tradurre magicamente il vecchio hash nel nuovo senza conoscere la password originale in chiaro.
Se però hai tantissimi utenti, c'è un trucco per risparmiare tempo e generare i comandi automaticamente. Lancia questa query, esattamente così come la leggi:
SELECT CONCAT(
'ALTER USER ''', user, '''@''', host, ''' IDENTIFIED WITH caching_sha2_password BY ''<INSERISCI_PASSWORD>'';') AS 'Comandi da lanciare:'FROM mysql.user WHERE plugin = 'mysql_native_password';MySQL ti restituirà una lista di comandi ALTER USER già pronti. Ti basterà copiarli in un blocco note, sostituire <INSERISCI_PASSWORD> con la vera password di ciascuno, e poi incollarli tutti insieme nel terminale MySQL.
Non è esattamente il comando "aggiornali tutti" che cercavamo, ma può aiutare.
Al termine, impartisci exit; per uscire dalla console di MySQL.
Conclusioni
In questa guida abbiamo visto passo-passo come risolvere l'errore "Plugin 'mysql_native_password' is not loaded", un ostacolo molto frequente dopo un aggiornamento a MySQL 8.4 o a versioni successive. Abbiamo esplorato due percorsi: la riattivazione temporanea tramite file di configurazione per rimettere subito online i siti web bloccati, e la procedura per migrare gli utenti del database verso il più moderno e sicuro standard caching_sha2_password.
Mantenere i sistemi aggiornati e utilizzare protocolli di sicurezza recenti è fondamentale per proteggere il tuo server e i tuoi dati. Ti raccomandiamo vivamente di adottare la soluzione definitiva, abbandonando l'uso di crittografie ormai deprecate.
Sei riuscito a ripristinare la connessione al tuo database? Hai avuto difficoltà durante l'aggiornamento delle password dei tuoi utenti? Lascia un commento qui sotto e condividi la tua esperienza con la community!