Habilitar conexiones remotas a MySQL o MariaDB

Published:

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):

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Permitir el acceso desde una dirección IP específica:

sudo iptables -A INPUT -s 172.16.0.9 -p tcp --destination-port 3306 -j ACCEPT

4.2- UFW

UFW el firewall predeterminado en Ubuntu. Para permitir el acceso desde cualquier dirección IP en Internet (no recomendado):

sudo ufw allow 3306/tcp

Permitir el acceso desde una dirección IP específica:

sudo ufw allow from 172.16.0.9 to any port 3306

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):

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload
- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles