Cómo solucionar el error: Your connection attempt failed for user ‘…’ to the MySQL server at …:3306: Can’t connect to MySQL server on ‘…’ (10061). Que se produce cuando intentamos conectar a un servidor de base de datos MySQL/MariaDB Server desde fuera del equipo servidor (desde un equipo de la red). Lo explicamos tanto para un servidor MySQL Server en Linux como en Windows.
- Error Your connection attempt failed for user ‘…’ to the MySQL server at …:3306: Can’t connect to MySQL server on ‘…’ (10061).
- Solución al error Can’t connect to MySQL server on ‘…’ (10061).
Error Your connection attempt failed for user ‘…’ to the MySQL server at …:3306: Can’t connect to MySQL server on ‘…’ (10061)
Cuando intentamos conectarnos a un servidor de base de datos MySQL Server (o MariaDB) desde un equipo externo al propio servidor, se produce este error:
Con el texto:
Cannot Connect to Database Server
Your connection attempt failed for user ‘root’ to the MySQL server at 192.168.1.12:3306:
Can’t connect to MySQL server on ‘192.168.1.12’ (10061)
Please:
1 Check that MySQL is running on address 192.168.1.12
2 Check that MySQL is reachable on port 3306 (note: 3306 is the default, but this can be changed)
3 Check the user root has rights to connect to 192.168.1.12 from your address (MySQL rights define what clients can connect to the server and from which machines)
4 Make sure you are both providing a password if needed and using the correct password for 192.168.1.12 connecting from the host address you’re connecting from
Y nos impide acceder al servidor de base de datos.
A continuación explicamos cómo resolver este error.
Solución al error Can’t connect to MySQL server on ‘…’ (10061)
Tanto si el servidor de base de datos MySQL/MariaDB reside en un equipo Windows como en uno Linux, la solución es similar, variando, como es lógico, la estructura de carpetas, ubicación de archivos de configuración de MySQL, apertura de puertos en cortafuegos, etc.
Para un servidor MySQL Server sobre Linux Ubuntu, realizaremos las siguientes acciones para configurar y permitir las conexiones externas al servidor.
En primer lugar abriremos el fichero de configuración de MySQL/MariaDB, my.cnf, que en el caso de Linux Ubuntu habitualmente se encuentra en /etc/mysql/, podremos editarlo con nano o vi:
1 |
sudo nano /etc/mysql/my.cnf |
En el caso de Windows, este fichero suele estar en:
C:\ProgramData\MySQL\MySQL Server xx\my.ini
Aunque puede encontrarse en otras ubicaciones e incluso con otro nombre. Si hemos desplegado un servidor LAMP en Windows, estará en la carpeta:
C:\xampp\mysql
Buscaremos la sección [mysqld] y, si no existe, añadiremos el parámetro bind-address con el valor 0.0.0.0. Introduciremos la línea:
1 2 |
[mysqld] bind-address=0.0.0.0 |
Para aplicar este cambio tendremos que reiniciar el servicio de MySQL Server, en Linux Ubuntu Server con el comando:
1 |
sudo systemctl restart mysql.service |
En Windows desde services.msc o si se trata de un LAMP, desde su panel de control:
Por otro lado, deberemos establecer la configuración apropiada en el usuario de MySQL o MariaDB que queramos usar para la conexión. Para ello, accederemos a la administración de la línea de comandos de MySQL con:
1 |
mysql -u root -p |
En el ejemplo anterior usamos el usuario root de MySQL, pero podría ser cualquier otro con permisos suficientes para modificar los usuarios.
Desde la línea de comandos de MySQL o MariaDB, como ejemplo, para permitir el acceso del usuario «root» desde equipos con IP 192.168.1.xxx y con la contraseña «contraseña» a todas las bases de datos MySQL/MariaDB y con todos los privilegios, introduciremos el siguiente comando:
1 |
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'contraseña' WITH GRANT OPTION; |
Y este otro para aplicar los cambios:
1 |
FLUSH PRIVILEGES; |
Lo anterior es un ejemplo, no es recomendable por seguridad dar privilegios de acceso externo al superusuario root de MySQL.
Otro ejemplo, para establecer sólo el privilegio SELECT (listar, seleccionar, mostrar registros) para todas las tablas de la base de datos «facturas», para el usuario «usuario_factura» y desde cualquier equipo (con cualquier direccionamiento IP):
1 |
GRANT SELECT ON facturas.* TO 'usuario_factura'@'%'; |
Para crear un usuario si no existe podemos usar:
1 |
CREATE USER 'usuario_factura'@'192.168.1.10' IDENTIFIED BY 'contraseña'; |
El comando anterior creará el usuario «usuario_factura», con acceso desde un equipo con la IP 192.168.1.22 y con contraseña «contraseña». Como podemos observar, cuando se crea un usuario en MySQL, se asocia a una IP o rango de IP o todas si introducimos un % (porcentaje). Cuando queramos hacer referencia al usuario, para revocar permisos, ampliar permisos, etc., lo haremos con su cadena completa, en el ejemplo anterior el usuario será: usuario_factura’@’192.168.1.10.
Para mostrar los permisos establecidos a un usuario:
1 |
SHOW GRANTS FOR 'usuario_factura'@'192.168.1.10'; |
Por último, para solucionar el error 10061 en la conexión remota a MySQL/MariaDB, revisaremos si tenemos el cortafuegos activado (sea Windows o Linux) y en caso de tenerlo activo, abriremos el puerto 3306 (el de defecto de MySQL/MariaDB si no lo hemos cambiado).
En el caso de un equipo con Linux Ubuntu Server, podremos abrir el puerto en el cortafuegos ejecutando el comando:
1 |
sudo ufw allow from any to any port 3306 proto tcp |
El comando anterior abrirá el puerto 3306 para cualquier equipo de la red. Para reducir la exposición, lo recomendable es limitar el acceso sólo a los equipos estrictamente necesarios. Para permitir el acceso a un equipo con IP 192.168.1.100 usaremos el comando:
1 |
sudo ufw allow from 192.168.1.100 to any port 3306 |
En el caso de equipos Windows, usaremos el comando (abriendo la ventana de MS-DOS cmd como usuario administrador):
1 |
netsh advfirewall firewall add rule name="MySQL" dir=in action=allow protocol=TCP localport=3306 |
Con estos tres pasos: parámetro bind-address en my.cnf, usuario de MySQL y apertura de puerto en cortafuegos, debería funcionar el acceso remoto/externo a un servidor MySQL Server o MariaDB, solucionando así el error 10061.