Como por defecto los servicios de base de datos como Mysql o MariaDB vienen configurados para escuchar solo conexiones locales evitando conexiones remotas, veamos como podemos habilitar el acceso.
1- Vamos a editar el archivo de configuración por defecto del motor llamado mysqld.cnf
:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Vamos a movernos hasta la directiva bind-address
. Y veremos que por defecto, el valor es 127.0.0.1
. Lo que significa que el servidor permite solo conexiones locales.
Podemos hacerlo de varias formas usando comodines como *
, ::
, o 0.0.0.0
Y debemos comentar la línea: #mysqlx-bind-address
Y debemos comentar también, si existe, la línea: #skip-external-locking
En MySQL 8.0 y posteriores, es posible que el parámetro bind-address no esté presente. En este caso, hay que agregarlo a mano, en la sección [mysqld].
Una vez modificado, guardamos y reiniciamos el servicio de base de datos
sudo systemctl restart mysql
Con esto configuramos el servicio, ahora toca configurar un usuario para acceso remoto.
2- Crear usuario remoto
CREATE USER 'usuario_remoto'@'ip_servidor_remoto' IDENTIFIED BY 'password';
Un dato interesante es que si reemplazamos ip_servidor_remoto
por el signo de (porcentaje) %
, el equipo admitirá conexiones remotas desde cualquier IP.
Ahora le damos los permisos
GRANT ALL on *.* TO 'usuario_remoto'@'ip_servidor_remoto' WITH GRANT OPTION;
Y hacemos efectivos los cambios.
FLUSH PRIVILEGES;
3- Probar si conecta
Teniendo el paquete instalado mysql-client, podemos probar desde la terminal de linux.
mysql -h ip_servidor_remoto -u usuario_remoto -p
4- Firewall
Depende cual sea tu distribución asegurate de tener el puerto 3306 habilitado en el firewall.
4.1- iptables
Si está utilizando iptables como firewall, el siguiente comando permitirá el acceso desde cualquier dirección IP en Internet al puerto MySQL (no recomendado):
Permitir el acceso desde una dirección IP específica:
4.2- UFW
UFW el firewall predeterminado en Ubuntu. Para permitir el acceso desde cualquier dirección IP en Internet (no recomendado):
Permitir el acceso desde una dirección IP específica:
4.2- FirewallD
FirewallD es el firewall predeterminada en CentOS/RockyLinux/Almalinux. Para permitir el acceso desde cualquier dirección IP en Internet (no recomendado):