Cómo configurar una base de datos remota en MySQL (acceso remoto)
¿Qué significa tener una base de datos remota en MySQL?
Imagina que tu sitio web vive en un servidor en Madrid, pero tu equipo de desarrollo trabaja desde México, Argentina o Colombia. Si cada vez que necesitas consultar una tabla tuvieras que entrar por SSH al servidor, perderías horas. La solución es el mysql acceso remoto, es decir, permitir que una base de datos MySQL sea consultada y administrada desde otra máquina, sin importar la distancia geográfica.
Configurar el acceso remoto no es complicado, pero requiere tocar tres piezas clave: el archivo de configuración de MySQL, los permisos de usuario y el firewall del servidor. Si omites cualquiera de estos pasos, verás errores como Can't connect to MySQL server (10060) o Access denied for user.
En esta guía te explico, paso a paso y sin tecnicismos innecesarios, cómo configurar mysql remoto de forma segura. Al final, tendrás un host remoto mysql funcionando y sabrás cómo conectarte desde tu ordenador, ya sea con Workbench, Navicat o la línea de comandos.
Requisitos previos antes de empezar
Antes de ensuciarte las manos, verifica que tienes lo siguiente:
- Acceso SSH (root o usuario con sudo) al servidor donde está MySQL.
- MySQL o MariaDB instalado (los pasos son prácticamente idénticos).
- Una base de datos creada y un usuario con contraseña.
- Conocimiento básico de comandos Linux (no necesitas ser un ninja, solo copiar y pegar).
Si tu hosting usa un panel tipo cPanel, Plesk o Syspanel (recuerda que el puerto de acceso a Syspanel es el 2106), es posible que ya exista una opción gráfica para activar el acceso remoto. Pero si tu servidor es "pelado" (VPS sin panel), esta guía es justo lo que necesitas.
Paso 1: Editar el archivo de configuración de MySQL
El primer obstáculo es que MySQL, por defecto, solo escucha conexiones locales (127.0.0.1). Para permitir el mysql acceso remoto, debes indicarle que escuche en todas las interfaces de red o en una IP específica.
1.1. Encuentra el archivo de configuración
Dependiendo del sistema operativo y de cómo instalaste MySQL, el archivo puede llamarse my.cnf o my.ini. Las rutas más comunes son:
/etc/mysql/my.cnf/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf(en Ubuntu con MySQL 8+)
Abre el archivo con tu editor favorito:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
1.2. Modifica la línea bind-address
Busca una línea que diga:
bind-address = 127.0.0.1
Cámbiala por:
bind-address = 0.0.0.0
Eso le dice a MySQL que acepte conexiones desde cualquier dirección IP. Si quieres ser más restrictivo, puedes poner la IP pública de tu servidor, pero para la mayoría de casos, 0.0.0.0 es suficiente.
[WARNING]
Si usas0.0.0.0, asegúrate de que el firewall esté bien configurado. De lo contrario, cualquier persona podría intentar conectarse a tu base de datos.
1.3. Guarda y reinicia MySQL
Guarda el archivo (Ctrl+O, luego Enter, y Ctrl+X para salir en nano) y reinicia el servicio:
sudo systemctl restart mysql
O si usas MariaDB:
sudo systemctl restart mariadb
[TIP]
Verifica que el servicio arrancó sin errores con:sudo systemctl status mysql
Paso 2: Crear un usuario con permisos de acceso remoto
Ahora que MySQL escucha en todas las interfaces, necesitas un usuario que tenga permitido conectarse desde una IP distinta a localhost. Por defecto, los usuarios creados con CREATE USER 'usuario'@'localhost' solo funcionan en el propio servidor.
2.1. Entra a MySQL como root
sudo mysql -u root -p
Te pedirá la contraseña de root (si la tienes configurada). Si usas MySQL 8 y la autenticación por socket, puede que solo necesites:
sudo mysql
2.2. Crea el usuario remoto
Ejecuta el siguiente comando, reemplazando tu_usuario, tu_password y tu_ip:
CREATE USER 'tu_usuario'@'tu_ip' IDENTIFIED BY 'tu_password';
Opciones para tu_ip:
- Si quieres permitir cualquier IP, usa
'%':CREATE USER 'tu_usuario'@'%' IDENTIFIED BY 'tu_password'; - Si quieres limitar a una IP concreta:
CREATE USER 'tu_usuario'@'203.0.113.5' IDENTIFIED BY 'tu_password'; - Si quieres permitir un rango:
CREATE USER 'tu_usuario'@'192.168.1.%' IDENTIFIED BY 'tu_password';
[INFO]
Usar'%'es cómodo, pero menos seguro. Si solo te vas a conectar desde casa o desde la oficina, pon tu IP fija. Si tu IP es dinámica (cambia cada cierto tiempo), tendrás que actualizar el usuario o usar'%'con una contraseña muy fuerte.
2.3. Otorga privilegios
Ahora dale permisos sobre la base de datos que quieras. Por ejemplo, para darle todos los privilegios sobre la base mi_web:
GRANT ALL PRIVILEGES ON mi_web.* TO 'tu_usuario'@'tu_ip';
Si quieres darle acceso a todas las bases de datos:
GRANT ALL PRIVILEGES ON *.* TO 'tu_usuario'@'tu_ip';
[WARNING]
No otorgues privilegios sobre*.*a menos que sea estrictamente necesario. Es como darle las llaves de toda la casa a un repartidor.
2.4. Aplica los cambios
FLUSH PRIVILEGES;
Luego sal de MySQL:
EXIT;
Paso 3: Configurar el firewall para permitir el puerto 3306
MySQL usa el puerto 3306 por defecto. Aunque hayas configurado el bind-address, el firewall del sistema operativo y el firewall del proveedor de hosting (como AWS Security Groups, DigitalOcean Firewalls, etc.) pueden bloquear el tráfico entrante.
3.1. Firewall de Ubuntu (UFW)
Si usas UFW, ejecuta:
sudo ufw allow from tu_ip to any port 3306
Si quieres permitir desde cualquier IP:
sudo ufw allow 3306/tcp
[TIP]
Es mucho más seguro permitir solo desde tu IP. Ejemplo:sudo ufw allow from 203.0.113.5 to any port 3306
3.2. Firewall de CentOS (firewalld)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --reload
3.3. Firewall del proveedor en la nube
Si tu servidor está en AWS, Google Cloud o Azure, también debes abrir el puerto 3306 en el "Security Group" o "Firewall Rules" desde el panel web del proveedor. Busca la sección de red o seguridad y añade una regla de entrada TCP con el puerto 3306.
[INFO]
En Syspanel (puerto 2106), si tu servidor lo gestiona este panel, también puedes revisar la sección de firewall desde la interfaz web. Algunos paneles bloquean el puerto 3306 por defecto.
Paso 4: Probar la conexión remota
Ahora viene la parte divertida: comprobar que todo funciona. Desde tu ordenador local (no desde el servidor), ejecuta:
mysql -h IP_DEL_SERVIDOR -P 3306 -u tu_usuario -p
Te pedirá la contraseña y, si todo está bien, verás el prompt de MySQL:
Welcome to the MySQL monitor. Commands end with ; or \g.
Si usas MySQL Workbench, crea una nueva conexión con:
- Hostname: IP pública del servidor
- Port: 3306
- Username: tu_usuario
- Password: tu_password
Paso 5: Errores comunes y cómo solucionarlos
Error 1: Can't connect to MySQL server (10060)
Este error indica que el servidor no está respondiendo. Revisa:
- Que el firewall permita el puerto 3306 (tanto el del sistema como el del proveedor).
- Que el
bind-addresssea0.0.0.0. - Que MySQL esté corriendo (
sudo systemctl status mysql).
Error 2: Access denied for user 'usuario'@'ip'
El usuario existe, pero no tiene permiso para conectarse desde esa IP. Revisa que creaste el usuario con el host correcto ('%' o tu IP exacta). También verifica que aplicaste FLUSH PRIVILEGES.
Error 3: Host 'tu_ip' is not allowed to connect to this MySQL server
Es el mismo problema que el error 2. La solución es la misma: recrear el usuario con el host correcto.
Error 4: Public Key Retrieval is not allowed (en MySQL Workbench)
Esto es común en MySQL 8. Ve a Edit → Preferences → SQL Editor y desmarca la opción "Allow Public Key Retrieval". O añade ?allowPublicKeyRetrieval=true a la cadena de conexión.
Paso 6: Buenas prácticas de seguridad para el acceso remoto
Configurar el host remoto mysql es útil, pero también es una puerta abierta a posibles ataques si no lo haces bien. Sigue estas recomendaciones:
- Usa contraseñas fuertes (mínimo 16 caracteres, mezcla de mayúsculas, minúsculas, números y símbolos).
- Limita las IPs que pueden conectarse. Si tu IP es fija, úsala. Si no, usa una VPN.
- Crea un usuario específico para el acceso remoto, separado del root.
- No uses root para conexiones remotas. Crea un usuario con solo los privilegios necesarios.
- Cambia el puerto de MySQL (por ejemplo, al 3307) si quieres dificultar los escaneos automáticos. Aunque esto no es imprescindible.
- Usa SSL/TLS para cifrar la conexión. MySQL 8 lo soporta de forma nativa. Puedes activarlo con
REQUIRE SSLal crear el usuario. - Monitorea los logs de MySQL (
/var/log/mysql/error.log) para detectar intentos de conexión sospechosos.
Preguntas frecuentes (FAQ)
¿Puedo conectar mysql remoto desde un hosting compartido?
Normalmente no, porque los hosts compartidos bloquean el acceso externo a MySQL por seguridad. Necesitas un VPS o un servidor dedicado.
¿Qué diferencia hay entre bind-address = 0.0.0.0 y poner la IP pública?
0.0.0.0 significa "escucha en todas las interfaces de red". Poner tu IP pública limita la escucha a esa interfaz, pero no restringe quién puede conectarse. Para restringir usuarios, se usa el host del usuario en CREATE USER.
¿Cómo sé si mi IP es fija o dinámica?
Puedes consultar tu IP pública en sitios como ifconfig.me o whatismyip.com. Si tu proveedor de internet no te garantiza una IP fija, es dinámica. En ese caso, considera usar un servicio DDNS (Dynamic DNS) o una VPN.
¿Es seguro abrir el puerto 3306 al público?
No es ideal. Si puedes, limita el acceso a tu IP o usa un túnel SSH. Abrir el puerto a todo internet es como dejar la puerta de tu casa sin llave.
¿Funciona igual en MariaDB?
Sí, los pasos son exactamente los mismos. MariaDB es un fork de MySQL y comparte la misma configuración y comandos.
¿Puedo usar Syspanel para configurar el acceso remoto?
Sí, si tu servidor usa Syspanel (puerto 2106), puedes gestionar usuarios de base de datos desde su interfaz web. Sin embargo, para cambiar el bind-address y abrir el firewall, necesitarás acceso SSH o usar el gestor de firewall del panel si lo incluye.
Conclusión
Configurar el mysql acceso remoto es un proceso de tres pasos: modificar el bind-address, crear un usuario con permisos desde una IP externa y abrir el puerto 3306 en el firewall. Una vez hecho, podrás conectar mysql remoto desde cualquier cliente, lo que facilita enormemente el trabajo de equipos distribuidos o el uso de herramientas de escritorio como MySQL Workbench.
Recuerda siempre priorizar la seguridad: usa contraseñas robustas, limita las IPs y evita exponer el puerto 3306 a todo internet si no es necesario. Si en algún momento tienes dudas, vuelve a esta guía o consulta la documentación oficial de MySQL.
Ahora, ve y prueba tu nueva conexión remota. ¡Tu base de datos ya no tiene fronteras!
