Sito mostra "Database connection error"

Quando il database non risponde

Il messaggio "Error establishing a database connection" (WordPress) o equivalenti su altre piattaforme indica che l'applicazione non riesce a connettersi al database MySQL/MariaDB. Il web server funziona, PHP esegue, ma la connessione al database fallisce. La diagnosi richiede di isolare lato applicazione o lato database.

MySQL/MariaDB in esecuzione?

Da SSH: systemctl status mysql o systemctl status mariadb. Se è fermo, avvia con systemctl start. Controlla i log per capire perché si era fermato: tail -50 /var/log/mysql/error.log. Cause tipiche: corruzione tabelle, disco pieno, OOM Killer.

Credenziali errate

Verifica le credenziali nel file di configurazione applicazione. Per WordPress: wp-config.php, cerca DB_NAME, DB_USER, DB_PASSWORD, DB_HOST. Tenta una connessione manuale: mysql -u DB_USER -p -h DB_HOST DB_NAME. Se fallisce, la causa è sicuramente nelle credenziali.

Host del database

Il valore DB_HOST è tipicamente localhost. Se il database è su server diverso (es. Amazon RDS), serve l'hostname remoto. Attenzione: localhost usa socket Unix mentre 127.0.0.1 usa TCP. Su alcuni MySQL configurati senza socket TCP, localhost funziona ma 127.0.0.1 no.

Database o tabelle corrotte

Crash improvvisi possono corrompere tabelle InnoDB. Su MySQL: mysqlcheck -u root -p --all-databases mostra eventuali tabelle corrotte. Per riparare: mysqlcheck -u root -p --auto-repair --all-databases. Se è il caso, ripristina dal backup recente.

Disco pieno

MySQL non può scrivere se il disco è pieno e crasha. df -h per controllare. Cancella log obsoleti: /var/log/mysql/*.log dopo backup, log Apache /var/log/apache2/*.gz. Considera anche binary log MySQL che possono crescere: PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY;.

Max_connections esaurite

MySQL ha un limite di connessioni concorrenti (default 151). Su siti con molto traffico può saturarsi. Verifica: SHOW VARIABLES LIKE 'max_connections'; e SHOW STATUS LIKE 'Threads_connected';. Aumenta in my.cnf: max_connections=500. Riavvia MySQL.

Server overload

Anche se MySQL risponde, query lente saturano CPU/IO. Le nuove connessioni vanno in timeout. top e SHOW PROCESSLIST identificano query problematiche. Killa con KILL ID_QUERY. Risolvi causa: query non ottimizzate, mancanza indici, cron job scheduled male.

Hai bisogno di aiuto?

Se il tuo sito ha problemi di accesso, il team di G Tech Group può aiutarti. Contattaci tramite il modulo di contatto.

Hai trovato utile quest'articolo?