När du bara använder "localhost" försöker MySQL-klientbiblioteket att använda en Unix-domänsocket för anslutningen istället för en TCP/IP-anslutning. Felet talar om för dig att sockeln, som kallas MySQL
, kan inte användas för att göra anslutningen, förmodligen för att den inte existerar (fel nummer 2).
Från MySQL-dokumentationen :
På Unix behandlar MySQL-program värdnamnet localhost speciellt, på ett sätt som sannolikt skiljer sig från vad du förväntar dig jämfört med andra nätverksbaserade program. För anslutningar till localhost, försökte MySQL-programmet att ansluta till den lokala servern genom att använda en Unix-socket-fil. Detta inträffar även om ett --port eller -P alternativ ges för att ange ett portnummer. För att säkerställa att klienten gör en TCP/IP-anslutning till den lokala servern, använd --host eller -h för att ange ett värde på värdnamnet 127.0.0.1, eller IP-adressen eller namnet på den lokala servern. Du kan också ange anslutningsprotokollet explicit, även för localhost, genom att använda --protocol=TCP-alternativet.
Det finns några sätt att lösa detta problem.
- Du kan bara använda TCP/IP istället för Unix-socket. Du skulle göra detta genom att använda
127.0.0.1
istället förlocalhost
när du ansluter. Unix-uttaget kan dock bli snabbare och säkrare att använda. - Du kan ändra socket i
php.ini
:öppna MySQL-konfigurationsfilenmy.cnf
för att hitta var MySQL skapar sockeln och ställ in PHPsmysqli.default_socket
till den vägen. På mitt system är det/var/run/mysqld/mysqld.sock
. -
Konfigurera socket direkt i PHP-skriptet när du öppnar anslutningen. Till exempel:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')