5 de septiembre de 2017

RESUELTO: Cannot Connect to Database ServerYour connection

Un típico error que puede dar el servicio MySQL: Cannot Connect to Database ServerYour connection attempt failed for user 'root' from your host to server at localhost:3306, en este artículo veremos cuales serán los pasos a seguir para resolverlo.
El mensaje de error completo de MySQL, cuando intentamos conectarnos, suele ser Your connection attempt failed for user 'root' from your host to server at 127.0.0.1:3306:Can't connect to mysql server on '127.0.0.1'.
Para resolver el problema, necesitamos recurrir a la consola de Linux, y lo primero que debemos hacer es comprobar que esté disponible el servicio MySQL.

Comprobar el Servicio MySQL

MySQL en el servidor se ejecuta como un servicio más, al igual que Apache, entonces para comprobar que el servicio MySQL se encuentra disponible, escribiremos el comando:
service mysql status
Se puede usar una alternativa al comando anterior, este es: /etc/init.d/mysql status.
Si la respuesta, es que el servicio no se encuentra en ejecución, necesitaremos iniciarlo. Para tal efecto, ahora se requerirá tener permiso de administrador si deseamos ejecutar esta tarea. El comando a correr desde consola será:
sudo service mysql restart
Una alternativa al comando anterior es: /etc/init.d/mysql restart.

Comprobar que puerto escucha MySQL

Se puede comprobar facilmente usando el comando netstat de linux, empleando la instrucción:
sudo netstat -tplun
O siendo más específico, con la ayuda de grep, con el comando:
sudo netstat -tplun | grep mysql
Si necesitamos cambiar el puerto de escucha del servicio MySQL, que generalmente o por defecto es el 3306, será requisito alterar su archivo de configuración ubicado en /etc/mysql/my.cnf. Cambiar el puerto de servicio de MySQL, se traduce en alterar la línea:
[mysqld] 
port = 3306
Así si cambiaramos el puerto donde escucha MySQL a 3307 y entonces la conexión al servicio MySQL incluso la podríamos hacer especificando el puerto: mysql -u root -p -P 3307.

Comprobar si MySQL acepta conexiones remotas

En general, por seguridad se configura para que MySQL no acepté conexiones remotas, que es una buena recomendación de seguridad. Se puede comprobar esta situación observando el archivo de configuración de MySQL con:
cat /etc/mysql/my.cnf | more
Las líneas que señalan esta comportamiento del servidor MySQL serán: skip-external-locking y bind-address = 127.0.0.1.

Conclusión

Se puede dar el caso, que se haya perdido u olvidado la contraseña de la cuenta de acceso a MySQL. En ese caso, debe hacer el siguiente proceso:
  1. Detener el servicio MySQL: sudo service mysql stop Esperar un momento hasta recibir el mensaje de detención del servicio.
  2. Luego ejecutar el comando para correr el servicio o demonio MySQL sin autenticación:
    sudo mysqld _safe --skip-grant-tables --skip-networking &
  3. Conectese a MySQL como superusuario:
    mysql -u root
  4. Y dentro de la consola de MySQL, cambie la contraseña:
    SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password'); FLUSH PRIVILEGES;
Es bastante simple hacer las comprobaciones del servicio MySQL en Linux, sobre todo si nos ayudamos con las facilidad de tuberías y el comando grep , así no tendremos que buscar en muchas líneas de texto donde se localiza lo que buscamos.
Recuerde que el formato del comando de conexión a MySQL es:
mysql -u nombre_usuario -p -h nombre_servidor -D nombre_de_la_db 
Por último, tenga presente que si necesita acceder desde fuera del servidor al servicio MySQL, debe considerar que el Firewall, por seguridad, puede impedir el acceso a algunos puertos.