L’errore “errore nello stabilire una con­nes­sio­ne al database” si verifica quando MySQL o MariaDB non riescono a stabilire la con­nes­sio­ne tra l’ap­pli­ca­zio­ne e il database. So­li­ta­men­te, ciò è dovuto a dati di accesso errati, un server di database fermo o problemi di con­fi­gu­ra­zio­ne.

Cosa si nasconde dietro il messaggio “errore nello stabilire una con­nes­sio­ne al database”?

Il messaggio “errore nello stabilire una con­nes­sio­ne al database” segnala che un’ap­pli­ca­zio­ne, come ad esempio un sito web PHP, non è riuscita a stabilire una con­nes­sio­ne con il database MySQL o MariaDB. Le cause comuni includono dati di accesso non validi, come un nome utente o una password errati, un server di database non attivo o im­po­sta­zio­ni server errate. Anche problemi di rete, come porte bloccate o in­for­ma­zio­ni host sbagliate, possono generare l’errore. Nei sistemi di gestione dei contenuti come WordPress, l’errore viene mostrato di­ret­ta­men­te quando il database non è rag­giun­gi­bi­le. Spesso impedisce l’accesso all’intero sito web, poiché i contenuti non possono essere caricati o salvati.

Come cor­reg­ge­re l’errore di con­nes­sio­ne al database su MySQL/MariaDB

Se non riesci a stabilire una con­nes­sio­ne con il tuo database, le cause possono essere diverse. Verifica le soluzioni seguenti per capire perché la con­nes­sio­ne fallisce nel tuo caso specifico.

Soluzione 1: as­si­cu­ra­ti che MySQL/MariaDB sia in ese­cu­zio­ne

Se MySQL o MariaDB non è più in ese­cu­zio­ne, gli script e i siti web non possono più con­net­ter­si. Su un server Linux, puoi vedere se MySQL è in ese­cu­zio­ne usando il comando:

ps -aux | grep mysql

Questo re­sti­tui­sce un elenco dei processi in ese­cu­zio­ne che con­ten­go­no “mysql” nel nome. L’elenco include il comando che hai appena eseguito. Se MySQL è in ese­cu­zio­ne, comprende anche il processo di MySQL.

Immagine: Processo MySQL
Dall’output puoi capire se MySQL/MariaDB è in ese­cu­zio­ne.

Se MySQL/MariaDB non è in ese­cu­zio­ne, vedrai solo il tuo comando grep elencato.

Avvia MySQL/MariaDB con i seguenti comandi:

# Ubuntu
systemctl start mysql
systemctl start mariadb
# CentOS
systemctl start mysqld
systemctl start mariadb

As­si­cu­ra­ti di uti­liz­za­re il nome utente e la password corretti. Queste in­for­ma­zio­ni vengono impostate al momento della creazione del database MySQL. Inoltre, devi impostare cor­ret­ta­men­te il nome host.

Soluzione 2: verifica la con­nes­sio­ne al database

Una volta con­fer­ma­to che MySQL/MariaDB è in ese­cu­zio­ne, il passo suc­ces­si­vo è con­net­ter­si dalla riga di comando con il comando:

mysql -u root -p

Dovresti essere invitato a inserire la password dell’utente root. Per im­po­sta­zio­ne pre­de­fi­ni­ta, la password per l’accesso root è la stessa della password originale di root per il tuo server.

N.B.

Se cambi la password per l’utente root del server, la password per l’utente root di MySQL non verrà mo­di­fi­ca­ta.

Dopo aver inserito la password, dovresti trovarti nel client MySQL/MariaDB. Un client MySQL appare, ad esempio, in questo modo:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 9.4.0 Homebrew
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Se riscontri problemi nello stabilire una con­nes­sio­ne al database MySQL con un altro nome utente e password, esegui nuo­va­men­te questo test so­sti­tuen­do root con l’altro nome utente.

Soluzione 3: verifica il nome utente MySQL/MariaDB

Se inserisci le cre­den­zia­li di accesso errate, riceverai un errore di con­nes­sio­ne al database come questo:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

As­si­cu­ra­ti che sia il nome utente che vedi nella richiesta che la password inserita siano scritti cor­ret­ta­men­te. Tieni presente che il nome utente distingue tra maiuscole e minuscole, quindi “Root” non è lo stesso di “root”.

Vale la pena quindi ve­ri­fi­ca­re se stai usando la giusta or­to­gra­fia e di­stin­zio­ne tra maiuscole e minuscole per il nome utente. Per elencare tutti gli utenti di MySQL/MariaDB, accedi al client da riga di comando come root con il comando:

mysql -u root -p

Suc­ces­si­va­men­te, elenca tutti gli utenti MySQL e i loro host con il comando:

select host, user from mysql.user;

In questo modo il nome utente verrà vi­sua­liz­za­to esat­ta­men­te come è stato creato. Inoltre, nella colonna host vedrai il luogo da cui l’utente è au­to­riz­za­to a con­net­ter­si.

Soluzione 4: reimposta la password MySQL/MariaDB dell’utente

N.B.

In par­ti­co­la­re, quando si reimposta la password dell’utente root, è ne­ces­sa­rio prestare at­ten­zio­ne. Quindi, fai molta at­ten­zio­ne quando segui i sug­ge­ri­men­ti seguenti per evitare di eliminare ac­ci­den­tal­men­te una password sbagliata.

Se anche la scrittura del nome utente non è il problema, l’errore potrebbe dipendere da una password non valida. Per reim­po­sta­re la password MySQL/MariaDB di un utente, accedi al client della riga di comando come root usando il comando:

mysql -u root -p

Suc­ces­si­va­men­te, reimposta la password dell’utente cor­ri­spon­den­te con il comando:

ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

So­sti­tui­sci new_password con la nuova password e myuser con il nome utente.

Soluzione 5: as­si­cu­ra­ti che l’utente abbia le au­to­riz­za­zio­ni corrette

Se hai la certezza che nome utente e password siano corretti, il problema potrebbe essere che l’utente non dispone delle giuste au­to­riz­za­zio­ni (grants) per questo database.

Per ve­ri­fi­ca­re le au­to­riz­za­zio­ni (grants) di un utente, accedi al client da riga di comando come root uti­liz­zan­do il comando:

mysql -u root -p

Suc­ces­si­va­men­te, vi­sua­liz­za le au­to­riz­za­zio­ni dell’utente con il comando:

SHOW GRANTS FOR 'myuser'@'localhost';

So­sti­tui­sci myuser con il nome utente. Modifica even­tual­men­te localhost con il nome host.

Dovresti ottenere un elenco dei privilegi che l’utente possiede per il ri­spet­ti­vo database. Dovrebbe apparire più o meno così:

+-------------------------------------------------------------+
| Grants for myuser@localhost                                 |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO `myuser`@`localhost`                  |
| GRANT ALL PRIVILEGES ON `reviews`.* TO `myuser`@`localhost` |
+-------------------------------------------------------------+
2 rows in set (0,004 sec)

Nota che questo utente ha tutte le au­to­riz­za­zio­ni per un database chiamato reviews.

Se all’utente non sono stati assegnati permessi per un database, vedrai solo qualcosa del genere:

+--------------------------------------------+
| Grants for myuser@localhost                |
+--------------------------------------------+
| GRANT USAGE ON *.* TO `myuser`@`localhost` |
+--------------------------------------------+
1 row in set (0,001 sec)

Nota che questo utente ha solo i permessi USAGE su “.” e non ha permessi per i database. Questo può causare l’errore di accesso.

Soluzione 6: verifica la con­nes­sio­ne al database dal web

Anche se MySQL o MariaDB fun­zio­na­no in locale, possono comunque ve­ri­fi­car­si problemi nell’ambiente web. Un semplice test dal browser aiuta a ve­ri­fi­ca­re esat­ta­men­te questa con­nes­sio­ne e a ri­co­no­sce­re tem­pe­sti­va­men­te possibili problemi di accesso. Utilizza un semplice script per testare se il tuo database accetta la con­nes­sio­ne. Crea un file chiamato database-connection-test.php con il seguente contenuto:

<?php
$test_connect = mysqli_connect('localhost', 'root', 'password');
 
if (!$test_connect) {
    die('Could not connect: ' . mysqli_connect_error());
}
echo 'Successful database connection.';
mysqli_close($test_connect);
mysql_close($test_connect);
?>

So­sti­tui­re la parola password con la password di root.

Posiziona questo file nella tua directory web e poi effettua l’accesso tramite un browser. Se riesci a con­net­ter­ti con il nome utente e la password di root, allora sai che il tuo database accetta le con­nes­sio­ni.

Se hai problemi a stabilire una con­nes­sio­ne MySQL/MariaDB con un altro nome utente e password, esegui questo test una seconda volta so­sti­tuen­do root con l’altro nome utente e la password con la password cor­ri­spon­den­te.

N.B.

As­si­cu­ra­ti di eliminare questo file una volta com­ple­ta­ti i tuoi test.

Soluzione 7: verifica il firewall e le porte

Anche se MySQL o MariaDB fun­zio­na­no cor­ret­ta­men­te e le cre­den­zia­li di accesso sono giuste, un firewall può bloccare la con­nes­sio­ne. Per im­po­sta­zio­ne pre­de­fi­ni­ta, MySQL utilizza la porta 3306 per le con­nes­sio­ni in entrata. Verifica in­nan­zi­tut­to se la porta è aperta. Su un sistema Linux, puoi usare i seguenti comandi:

sudo netstat -tulnp | grep 3306
# Sui sistemi con ufw (Ubuntu)
sudo ufw status

Se il firewall blocca la porta, puoi sbloc­car­la spe­ci­fi­ca­men­te:

# Ubuntu con ufw
sudo ufw allow 3306/tcp
sudo ufw reload
# CentOS o RHEL con firewalld
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

As­si­cu­ra­ti di sbloccare la porta solo per gli indirizzi IP che ne­ces­si­ta­no realmente di accesso. Aprirla per tutti può rap­pre­sen­ta­re un rischio per la sicurezza. Dopo aver con­fi­gu­ra­to cor­ret­ta­men­te il firewall, la tua ap­pli­ca­zio­ne dovrebbe essere nuo­va­men­te in grado di stabilire una con­nes­sio­ne con il database MySQL/MariaDB. Ve­ri­fi­ca­lo nuo­va­men­te con lo script di test PHP o di­ret­ta­men­te tramite la console.

Vai al menu prin­ci­pa­le