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.