Come appare il messaggio
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)Cause frequenti
- Il servizio del database non è in esecuzione: fermato, andato in crash o terminato dall'OOM killer.
- Il server non è partito perché il disco è pieno o la directory dei dati è danneggiata o ha permessi errati.
- Client e server usano percorsi del socket diversi, ad esempio
/run/mysqld/mysqld.socke/var/lib/mysql/mysql.sock. - L'applicazione si collega a
localhost, cioè al socket, mentre il server ascolta solo su TCP. - Una seconda istanza o un container usa un altro socket.
Verifica
- Il servizio è attivo?
systemctl status mariadb - Perché si è fermato? Leggi le ultime righe del log
- Il socket esiste?
ls -l /run/mysqld/ - C'è spazio libero per la directory dei dati?
df -h /var/lib/mysql
Soluzione
- Avvia il servizio e leggi perché era fermo:
systemctl start mariadb. Su MySQL l'unità si chiamamysql. - Libera spazio o ripristina i permessi su
/var/lib/mysqlse era questo il motivo. - Se l'ha fermato l'OOM killer, riduci l'uso di memoria (
innodb_buffer_pool_size) o aggiungi RAM. - Usa lo stesso percorso del socket nelle sezioni
[client]e[mysqld]della configurazione. - Nell'applicazione usa
127.0.0.1e la porta 3306 invece dilocalhostper collegarti via TCP.
Domande frequenti
Che differenza c'è qui tra localhost e 127.0.0.1?
Con localhost il client MySQL usa il file socket Unix. Con 127.0.0.1 usa TCP. Se il socket manca ma TCP funziona, questo spiega l'errore.
Che errore compare con la password sbagliata?
È ERROR 1045. L'errore 2002 viene prima: il client non raggiunge nemmeno il server.