Configurar base de datos remota en MySQL
¿Qué es una conexión remota a MySQL?
Una conexión remota a MySQL permite que aplicaciones o herramientas se conecten a tu base de datos desde otro servidor o máquina, no solo desde el servidor local donde está instalado MySQL. Esto es útil para aplicaciones distribuidas, herramientas de gestión o backups remotos.
Requisitos previos
- Acceso root o administrador al servidor MySQL
- Conocer la IP del servidor que se conectará remotamente
- Firewall configurado para permitir conexiones al puerto 3306 (puerto por defecto de MySQL)
Pasos para configurar conexión remota
1. Verificar configuración de MySQL
Primero, verificá si MySQL está configurado para aceptar conexiones remotas. Editá el archivo de configuración:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
O en algunas distribuciones:
sudo nano /etc/my.cnf
Buscá la línea bind-address y cambiála de:
bind-address = 127.0.0.1
A:
bind-address = 0.0.0.0
Esto permite que MySQL escuche en todas las interfaces de red.
2. Crear usuario con permisos remotos
Es recomendable crear un usuario específico para conexiones remotas en lugar de usar root:
mysql -u root -p
CREATE USER 'usuario_remoto'@'IP_DEL_CLIENTE' IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'usuario_remoto'@'IP_DEL_CLIENTE';
FLUSH PRIVILEGES;
EXIT;
Para permitir conexiones desde cualquier IP (menos seguro, pero más flexible):
CREATE USER 'usuario_remoto'@'%' IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'usuario_remoto'@'%';
FLUSH PRIVILEGES;
3. Configurar firewall
Si usás UFW en Ubuntu/Debian:
sudo ufw allow 3306/tcp
sudo ufw reload
Si usás firewalld en CentOS/RHEL:
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
Si usás iptables directamente:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables-save
4. Reiniciar MySQL
Después de cambiar la configuración, reiniciá MySQL:
sudo systemctl restart mysql
O en algunas distribuciones:
sudo systemctl restart mysqld
5. Verificar que MySQL escucha en todas las interfaces
Verificá que MySQL esté escuchando en el puerto 3306:
sudo netstat -tlnp | grep 3306
O con ss:
sudo ss -tlnp | grep 3306
Deberías ver algo como: 0.0.0.0:3306 o ::3306
6. Probar conexión remota
Desde el servidor cliente, probá la conexión:
mysql -h IP_DEL_SERVIDOR -u usuario_remoto -p
Si la conexión es exitosa, verás el prompt de MySQL.
Configuración de seguridad recomendada
- Usa IPs específicas: En lugar de
'%', especificá las IPs exactas que necesitan acceso. - Usa usuarios dedicados: No uses root para conexiones remotas.
- Limita permisos: Otorgá solo los permisos necesarios, no
ALL PRIVILEGES. - Usa contraseñas seguras: Contraseñas largas y complejas.
- Considera SSL: Para conexiones remotas, es recomendable usar SSL.
Configurar SSL para conexiones remotas (opcional pero recomendado)
Para mayor seguridad, podés configurar SSL:
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'usuario_remoto'@'IP' REQUIRE SSL;
FLUSH PRIVILEGES;
Luego, al conectarte desde el cliente, usá:
mysql -h IP_SERVIDOR -u usuario -p --ssl-mode=REQUIRED
Problemas comunes
Error: "Can't connect to MySQL server"
- Verificá que el firewall permita el puerto 3306.
- Confirmá que
bind-addressesté configurado como0.0.0.0. - Verificá que MySQL esté corriendo:
sudo systemctl status mysql
Error: "Access denied"
- Verificá que el usuario tenga permisos para conectarse desde esa IP.
- Confirmá que la contraseña sea correcta.
- Revisá los permisos del usuario:
SHOW GRANTS FOR 'usuario'@'IP';
Conexión lenta
- Verificá la latencia de red entre servidores.
- Considerá usar una conexión VPN para mayor seguridad y rendimiento.
Deshabilitar conexiones remotas
Si necesitás deshabilitar las conexiones remotas por seguridad:
- Cambiá
bind-addressde vuelta a127.0.0.1 - Eliminá o restringí los usuarios remotos
- Reiniciá MySQL
- Cerá el puerto 3306 en el firewall
¿Necesitás ayuda?
Si tenés problemas configurando conexiones remotas a MySQL, abrí un ticket desde el panel de billing.baires.host o contactanos por soporte.
También podés escribirnos por nuestras redes:
- Instagram: @baires_host
- Discord (soporte activo): https://discord.gg/dzjauatAFN
- Linktree: https://linktr.ee/baires.host