Configurar acceso remoto a MySQL en DirectAdmin
¿Por qué necesitas acceso remoto a MySQL en DirectAdmin?
De forma predeterminada, MySQL en un servidor compartido (como el que usa DirectAdmin) solo acepta conexiones desde el mismo servidor. Esto significa que tu aplicación web y la base de datos están en la misma máquina. Sin embargo, hay varios escenarios donde necesitas conectarte a tu base de datos desde otro lugar:
- Desarrollo local: Quieres trabajar con una copia de tu base de datos desde tu computadora (usando programas como MySQL Workbench, DBeaver o HeidiSQL).
- Aplicaciones externas: Tienes una aplicación alojada en otro servidor (AWS, DigitalOcean, otro hosting) que necesita leer o escribir datos en tu base de datos.
- Migraciones o backups: Necesitas importar o exportar datos de forma remota.
- Equipos distribuidos: Varios desarrolladores necesitan acceder a la misma base de datos desde sus máquinas.
El problema: Si intentas conectarte directamente desde tu IP externa, recibirás un error como Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10061) o Connection refused. Esto es porque MySQL solo escucha en localhost (127.0.0.1).
La solución: Configurar el acceso remoto en DirectAdmin, lo que implica dos pasos principales: permitir que MySQL escuche en la IP pública y autorizar usuarios específicos para conexiones externas.
Paso 1: Verifica tu configuración actual de MySQL
Antes de hacer cambios, es importante saber cómo está configurado tu servidor MySQL. Accede a tu panel de DirectAdmin y luego a MySQL Management (o phpMyAdmin). También puedes conectarte por SSH si tienes acceso root, pero aquí asumimos que eres usuario de DirectAdmin.
1.1. Conéctate a MySQL desde la terminal (si tienes SSH)
Si tienes acceso SSH como usuario root, ejecuta:
mysql -u root -p
Luego, verifica la configuración actual:
SHOW VARIABLES LIKE 'bind_address';
Si el resultado es 127.0.0.1, significa que MySQL solo acepta conexiones locales.
1.2. Desde phpMyAdmin (para usuarios sin SSH)
En DirectAdmin, ve a phpMyAdmin y ejecuta esta consulta SQL:
SELECT user, host FROM mysql.user WHERE host <> 'localhost';
Si no ves ningún usuario con host % (que significa "cualquier host") o una IP específica, entonces no hay acceso remoto configurado.
Paso 2: Modifica la configuración de MySQL (bind-address)
El archivo de configuración principal de MySQL se encuentra en /etc/mysql/my.cnf o /etc/my.cnf (depende del sistema). En DirectAdmin, generalmente está en /etc/my.cnf.
2.1. Edita el archivo de configuración
Conéctate por SSH como root y abre el archivo con un editor (nano, vim):
nano /etc/my.cnf
Busca la línea que dice:
bind-address = 127.0.0.1
Cámbiala por:
bind-address = 0.0.0.0
Esto le dice a MySQL que escuche en todas las interfaces de red (IPs del servidor). Si solo quieres permitir una IP específica, pon esa IP en lugar de 0.0.0.0 (por ejemplo, bind-address = 192.168.1.100).
IMPORTANTE: Si tu servidor tiene un firewall (como iptables o CSF), también deberás abrir el puerto 3306 (MySQL) para la IP de destino. Más adelante veremos esto.
2.2. Reinicia MySQL
Guarda el archivo y reinicia el servicio MySQL:
systemctl restart mysql
O si usas service:
service mysql restart
Paso 3: Crea un usuario con acceso remoto
Ahora necesitas un usuario de MySQL que pueda conectarse desde una IP externa. No uses el usuario root por seguridad; crea uno nuevo.
3.1. Desde phpMyAdmin
- Ve a phpMyAdmin en DirectAdmin.
- Selecciona la pestaña Privilegios (o User accounts).
- Haz clic en Añadir usuario.
- Completa:
- Nombre de usuario:
tu_usuario_remoto - Host:
%(permite cualquier IP) o una IP específica (ej:192.168.1.50). - Contraseña: segura.
- Nombre de usuario:
- Marca los permisos que necesites (SELECT, INSERT, UPDATE, DELETE, etc.). Para desarrollo, suele bastar con todos los privilegios sobre la base de datos específica.
- Guarda.
3.2. Desde la línea de comandos (SSH)
Ejecuta:
CREATE USER 'tu_usuario_remoto'@'%' IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON tu_base_de_datos.* TO 'tu_usuario_remoto'@'%';
FLUSH PRIVILEGES;
Reemplaza % por la IP específica si quieres mayor seguridad.
Paso 4: Abre el puerto 3306 en el firewall
DirectAdmin suele usar CSF (ConfigServer Security & Firewall) o iptables. Debes permitir el tráfico entrante al puerto 3306 desde tu IP.
4.1. Si usas CSF (recomendado)
- Accede por SSH como root.
- Edita
/etc/csf/csf.conf:nano /etc/csf/csf.conf - Busca la línea
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,2096,2222,3306"
Asegúrate de que 3306 esté incluido. Si no, agrégalo. - Para limitar a tu IP, busca
TCP_IN = "..."y reemplaza el puerto 3306 por3306(tu_IP). Ejemplo:3306(192.168.1.50). - Guarda y reinicia CSF:
csf -r
4.2. Si usas iptables
Ejecuta:
iptables -A INPUT -p tcp --dport 3306 -s TU_IP --jump ACCEPT
service iptables save
Reemplaza TU_IP por tu dirección IP pública (puedes obtenerla en whatismyip.com).
Paso 5: Prueba la conexión remota
Desde tu computadora local (o desde otro servidor), usa un cliente MySQL para probar.
5.1. Desde la línea de comandos
mysql -h IP_DEL_SERVIDOR -u tu_usuario_remoto -p
Te pedirá la contraseña. Si todo está bien, entrarás al monitor de MySQL.
5.2. Desde MySQL Workbench
- Crea una nueva conexión.
- Hostname: IP del servidor.
- Port: 3306.
- Username:
tu_usuario_remoto. - Password: la que configuraste.
- Prueba la conexión.
Posibles errores comunes:
Can't connect to MySQL server on ... (10061): El firewall bloquea el puerto o MySQL no está escuchando en 0.0.0.0.Access denied for user ...: El usuario no tiene permisos para esa IP o la contraseña es incorrecta.Host '...' is not allowed to connect to this MySQL server: El host%no está configurado correctamente.
Consideraciones de seguridad importantes
Permitir acceso remoto a MySQL es un riesgo si no se hace con cuidado. Sigue estas mejores prácticas:
- Usa usuarios específicos: No uses
rootpara conexiones remotas. - Limita por IP: En lugar de
%, usa una IP fija. Por ejemplo, si trabajas desde casa, usa la IP de tu router (aunque cambie, puedes usar un servicio como No-IP). - Usa SSH Tunneling (recomendado): En lugar de abrir el puerto 3306, puedes crear un túnel SSH. Es más seguro. Ejemplo:
Luego te conectas assh -L 3307:localhost:3306 usuario@tu_servidorlocalhost:3307desde tu cliente MySQL. - Cambia el puerto por defecto: Si es posible, configura MySQL en un puerto no estándar (ej: 3307) y solo permite ese puerto en el firewall.
- Usa SSL/TLS: Si tu versión de MySQL lo soporta, habilita conexiones cifradas.
Preguntas frecuentes (FAQ)
¿Por qué no puedo conectarme aunque seguí todos los pasos?
Revisa:
- El firewall del servidor (CSF, iptables, etc.) está bloqueando el puerto 3306.
- MySQL no se ha reiniciado después de cambiar
bind-address. - El usuario tiene el host incorrecto (usa
%o la IP exacta). - Tu IP pública ha cambiado (si usaste una IP fija).
¿Es seguro tener MySQL expuesto a Internet?
No es recomendable. Si necesitas acceso remoto, usa SSH Tunneling o una VPN. Si es estrictamente necesario, limita el acceso a solo tu IP y usa contraseñas fuertes.
¿Qué hago si mi IP cambia constantemente?
Puedes usar un servicio DDNS (como No-IP) y en el firewall permitir el nombre de dominio en lugar de la IP. Otra opción es usar un túnel SSH desde tu máquina local.
¿Cómo revoco el acceso remoto para un usuario?
Ejecuta en MySQL:
DROP USER 'tu_usuario_remoto'@'%';
O modifica el host a localhost:
RENAME USER 'tu_usuario_remoto'@'%' TO 'tu_usuario_remoto'@'localhost';
¿DirectAdmin tiene alguna herramienta gráfica para esto?
Sí, en DirectAdmin ve a MySQL Management y luego a Remote MySQL. Allí puedes agregar hosts permitidos (IPs) sin necesidad de editar archivos manualmente. Sin embargo, esto solo funciona si ya has configurado bind-address = 0.0.0.0 y el firewall está abierto.
Conclusión
Configurar acceso remoto a MySQL en DirectAdmin es un proceso sencillo pero que requiere cuidado. Los pasos clave son: habilitar bind-address, crear un usuario con host adecuado y abrir el puerto en el firewall. Siempre prioriza la seguridad usando IPs específicas y SSH Tunneling si es posible.
Recuerda que, si en algún momento usas Syspanel (antes conocido como HestiaCP), el proceso es similar, pero el puerto de acceso al panel es el 2106. En ese caso, la configuración de MySQL se maneja desde la terminal o desde el propio panel.
¿Tienes dudas? Revisa la documentación de DirectAdmin o contacta a tu proveedor de hosting. ¡Buena suerte con tu configuración!
