Error fatal de PHP: excepción no detectada 'PDOException' con el mensaje 'SQLSTATE[HY000] [2002] Conexión rechazada

Error fatal de PHP: excepción no detectada 'PDOException' con el mensaje 'SQLSTATE[HY000] [2002] Conexión rechazada

Tengo un servidor diferente para mi base de datos.

Cuando me conecté a la base de datos con PDO, utilicé la dirección IP de la VM de la base de datos para el parámetro del host:

$dbh = new pdo("mysql:host=192.168.56.103;port=3306;dbname=data",'root','root')

Pero recibo una conexión rechazada (PDOException' con el mensaje 'SQLSTATE[HY000] [2002]'). Supongo que no pudo encontrar MySQL allí. Sin embargo, podría encontrar la VM con esa IP.

Respuesta1

Bueno, entonces comprueba si mysql realmente no se está ejecutando:

sudo aptitude install nmap

Y luego:

sudo nmap -sS <ipofdbserverhere>

También puedes instalar la herramienta en el servidor mysql, el comando sería:

sudo nmap -sS localhost

En ambos casos, su respuesta debería verse así.

[simmel]@[mars]$ sudo nmap -sS 172.16.1.41

Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-08 15:09 CEST

Nmap scan report for 172.16.1.41
Host is up (0.010s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 33.17 seconds

Si le muestra el puerto 3306, de hecho está abierto y listo para conexiones. Si ese es el caso, use mysql a través de la línea de comando desde su computadora.

mysql -u<USER> -p<PASSWORD> -h<ipofdbserverhere> <databasename>

¿Aparece el mismo mensaje? ¿Conexión denegada? Entonces su usuario probablemente tenga los derechos equivocados.

Otra razón para esto es cuando el servidor MySQL está vinculado a una dirección determinada, como 127.0.0.1.

Para averiguarlo, consulte el resultado de:

sudo netstat -tlpen

Si mysql no está escuchando 0.0.0.0:3306sino a 127.0.0.1:3306, solo puede conectarse desde localhost.

Para cambiar eso, vaya /etc/mysql/my.cnfy comente la siguiente línea:

bind-address            = 127.0.0.1

La forma de comentarlo es agregar un #personaje principal:

#bind-address            = 127.0.0.1

Guarde el archivo y reinicie el servicio mysql.

sudo service mysql restart

Ahora deberías poder conectarte.

Para cambiar el puerto, ingrese, por ejemplo:

port = 8888

en /etc/mysql/my.cnf.

Guarde el archivo y reinicie el servicio mysql:

sudo service mysql restart

Respuesta2

El error 2002 significa que MySQL no puede conectarse al servidor de base de datos local a través del archivo de socket (por ejemplo /tmp/mysql.sock).

Para saber dónde está su archivo socket, ejecute:

mysql_config --socket

luego verifique que su aplicación use el archivo de socket Unix correcto o conéctese a través del puerto TCP/IP.

Pruebe el enchufe:

mysql --socket=/var/mysql/mysql.sock

Si el socket Unix es incorrecto, puede vincularlo simbólicamente, por ejemplo:

ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

o corrija su archivo de configuración (por ejemplo php.ini).

para probar elDOPconexión directamente desde PHP, puede ejecutar:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

Verifique también la configuración entre Apache y CLI (interfaz de línea de comandos), ya que la configuración puede ser diferente.

Puede ser que el servidor se esté ejecutando, pero usted esté intentando conectarse utilizando un puerto TCP/IP, una canalización con nombre o un archivo de socket Unix diferente al que está escuchando el servidor. Para corregir esto, debe invocar un programa cliente (por ejemplo, especificando --portuna opción) para indicar el número de puerto adecuado, o el archivo de socket Unix o canalización con el nombre adecuado (por ejemplo, --socketopción).

Ver:Solución de problemas de conexión a MySQL


Otras utilidades/comandos que pueden ayudar a rastrear el problema:

  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • Utilice XDebug en xdebug.show_exception_trace=1suxdebug.ini
  • En OS X intente sudo dtruss -fn mysqld, en Linux depure constrace
  • Verifique los permisos en el socket Unix: stat $(mysql_config --socket)y si tiene suficiente espacio libre ( df -h).
  • Reinicie su MySQL.
  • Controlarnet.core.somaxconn.

información relacionada