Wanneer u alleen "localhost" gebruikt, probeert de MySQL-clientbibliotheek een Unix-domeinsocket te gebruiken voor de verbinding in plaats van een TCP/IP-verbinding. De fout geeft aan dat de socket, genaamd MySQL
, kan niet worden gebruikt om de verbinding tot stand te brengen, waarschijnlijk omdat deze niet bestaat (foutnummer 2).
Uit de MySQL-documentatie :
Op Unix behandelen MySQL-programma's de hostnaam localhost speciaal, op een manier die waarschijnlijk anders is dan wat u verwacht in vergelijking met andere netwerkgebaseerde programma's. Voor verbindingen met localhost proberen MySQL-programma's verbinding te maken met de lokale server met behulp van een Unix-socketbestand. Dit gebeurt zelfs als een --port of -P optie wordt gegeven om een poortnummer op te geven. Om ervoor te zorgen dat de client een TCP/IP-verbinding maakt met de lokale server, gebruikt u --host of -h om een hostnaamwaarde van 127.0.0.1 op te geven, of het IP-adres of de naam van de lokale server. Je kunt het verbindingsprotocol ook expliciet specificeren, zelfs voor localhost, door de --protocol=TCP optie te gebruiken.
Er zijn een paar manieren om dit probleem op te lossen.
- Je kunt gewoon TCP/IP gebruiken in plaats van de Unix-socket. U zou dit doen door
127.0.0.1
. te gebruiken in plaats vanlocalhost
wanneer u verbinding maakt. De Unix-socket is misschien wel sneller en veiliger in gebruik. - Je kunt de socket wijzigen in
php.ini
:open het MySQL-configuratiebestandmy.cnf
om te vinden waar MySQL de socket maakt en PHP'smysqli.default_socket
in te stellen naar dat pad. Op mijn systeem is het/var/run/mysqld/mysqld.sock
. -
Configureer de socket direct in het PHP-script bij het openen van de verbinding. Bijvoorbeeld:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')