Cuando usa solo "localhost", la biblioteca del cliente MySQL intenta usar un socket de dominio Unix para la conexión en lugar de una conexión TCP/IP. El error te dice que el socket, llamado MySQL
, no se puede utilizar para realizar la conexión, probablemente porque no existe (error número 2).
De la Documentación de MySQL :
En Unix, los programas MySQL tratan el nombre de host localhost de manera especial, en la medida en que probablemente sea diferente de lo que espera en comparación con otros programas basados en la red. Para las conexiones a localhost, los programas MySQL intentan conectarse al servidor local usando un archivo de socket Unix. Esto ocurre incluso si se da una opción --port o -P para especificar un número de puerto. Para asegurarse de que el cliente establezca una conexión TCP/IP con el servidor local, use --host o -h para especificar un valor de nombre de host de 127.0.0.1, o la dirección IP o el nombre del servidor local. También puede especificar el protocolo de conexión de forma explícita, incluso para host local, mediante la opción --protocol=TCP.
Hay algunas formas de resolver este problema.
- Puede usar TCP/IP en lugar del socket Unix. Harías esto usando
127.0.0.1
en lugar delocalhost
cuando te conectas Sin embargo, el socket Unix podría ser más rápido y seguro de usar. - Puede cambiar el socket en
php.ini
:abra el archivo de configuración de MySQLmy.cnf
para encontrar dónde MySQL crea el socket y establecer elmysqli.default_socket
de PHP a ese camino. En mi sistema es/var/run/mysqld/mysqld.sock
. -
Configure el socket directamente en el script PHP al abrir la conexión. Por ejemplo:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')