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:3306
sino a 127.0.0.1:3306
, solo puede conectarse desde localhost.
Para cambiar eso, vaya /etc/mysql/my.cnf
y 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
--port
una 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,--socket
opció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=1
suxdebug.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.
- Controlar
net.core.somaxconn
.