Quando si utilizza solo "localhost", la libreria client MySQL tenta di utilizzare un socket di dominio Unix per la connessione anziché una connessione TCP/IP. L'errore ti dice che il socket, chiamato MySQL
, non può essere utilizzato per effettuare la connessione, probabilmente perché non esiste (errore numero 2).
Dalla Documentazione MySQL :
Su Unix, i programmi MySQL trattano il nome host localhost in modo speciale, in quanto è probabilmente diverso da quello che ti aspetti rispetto ad altri programmi basati sulla rete. Per le connessioni a localhost, i programmi MySQL tentano di connettersi al server locale utilizzando un file socket Unix. Ciò si verifica anche se viene fornita un'opzione --port o -P per specificare un numero di porta. Per garantire che il client effettui una connessione TCP/IP al server locale, utilizzare --host o -h per specificare un valore del nome host di 127.0.0.1 o l'indirizzo IP o il nome del server locale. Puoi anche specificare esplicitamente il protocollo di connessione, anche per localhost, usando l'opzione --protocol=TCP.
Ci sono alcuni modi per risolvere questo problema.
- Puoi semplicemente usare TCP/IP invece del socket Unix. Puoi farlo usando
127.0.0.1
invece dilocalhost
quando ti connetti. Tuttavia, il socket Unix potrebbe essere più veloce e più sicuro da usare. - Puoi cambiare il socket in
php.ini
:apri il file di configurazione MySQLmy.cnf
per trovare dove MySQL crea il socket e impostaremysqli.default_socket
di PHP a quel sentiero. Sul mio sistema è/var/run/mysqld/mysqld.sock
. -
Configura il socket direttamente nello script PHP all'apertura della connessione. Ad esempio:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')