> Manuales > Taller de MySQL

Cómo conectar con un servidor MySQL de manera remota, desde otro servidor o estación de trabajo para el acceso a las bases de datos.

Conectar con un servidor de base de datos MySQL remoto

Una duda típica para desarrolladores es cómo conectar con un servidor MySQL de manera remota, de modo que puedas realizar acciones de administración o acceso a una base de datos, desde otros ordenadores o servidores distintos a donde se encuentra alojada.

Lo vamos a tratar en este artículo de manera que puedas resolver los problemas típicos de las conexiones remotas con MySQL, o incluso con MariaDB, ya que básicamente el procedimiento será el mismo.

Casos de uso de las conexiones remotas a MySQL

Dependiendo de tu situación o necesidad, es posible que tengas que realizar las conexiones remotas con MySQL de distintos modos. Básicamente dividiría los distintos casos en estas situaciones:

Conexión remota a MySQL desde un servidor web, distinto al servidor de la base de datos

Si queremos disponer de una arquitectura aplicación distribuida en varios servidores, algo básico sería disponer de un servidor de bases de datos y un servidor web. De esta manera podemos tener dos máquinas para implementar la aplicación, lo que nos permite una sencilla distribución de la carga de trabajo.

Desde el servidor web nos conectaremos con la base de datos para obtener la información necesaria para poder realizar los procesos de la aplicación. Para ello necesitamos unas configuraciones bastante específicas en el servidor de bases de datos:

Se recomienda abrir las conexiones remotas solamente para determinadas IP. Esto es perfectamente posible ya que el servidor web desde donde nos necesitamos conectar tendrá una IP determinada. Así que podemos usar esa IP en la configuración para mimitas las conexiones a ella, y con ello evitar que se puedan conectar a MySQL desde IPs diferentes. Será el caso que veremos en este artículo.

Apertura del puerto 3306

Esta configuración la tienes que realizar en el firewall del servidor donde está instalado el gestor de bases de datos. Los pasos dependerán de qué firewall estés usando en tu servidor.

Un firewall típico para sistemas Linux sería UFW. Si tenemos este firewall en nuestro sistema podríamos abrir el puerto usando un comando como este:

sudo ufw allow from 0.0.0.0 to any port 3306

Lógicamente, tendrás que sustituir 0.0.0.0 por la IP del servidor web desde donde quieres conectar con el servidor MySQL.

También podrías seleccionar un grupo de IPs desde las que quieres conectar. Para ello podrías indicar el comando como este:

sudo ufw allow from 0.0.0.0/10 to any port 3306

Por último, si quieres dar permisos para conexión desde cualquier IP, lo que no sería necesario generalmente, también podrías hacerlo con el comando:

sudo ufw allow 3306

Insisto, estos son los comandos para la configuración del firewall UFW, pero si no usas este software, tendrás que documentarte con el firewall que corresponda.

Crear una base de datos y un usuario con permisos de acceso remoto

Ahora tenemos que crear la base de datos a la que queremos acceder remotamente y el usuario que usaremos para poder acceder a ella.

Esta serie de comandos la tenemos que realizar desde el cliente de MySQL, por lo que nos tendremos que conectar por SSH con el servidor donde está la base de datos y luego haciendo acceso a MySQL por línea de comandos.

Una vez logueado en MySQL, creamos la base de datos, si es que no la has creado ya:

create database bbdd;

Creamos un usuario al que permitimos conectar desde una IP determinada:

create user mi_usuario@0.0.0.0;

De nuevo, colocarás la IP del servidor web, en lugar de 0.0.0.0. Esto en el caso que solamente te conectes al servidor desde una única IP.

Ahora bien, si las conexiones las vas a realizar desde un rango de IPs puedes por ejemplo usar el carácter "%" como un comodín en la IP del usuario:

create user mi_usuario@0.0.0.%;

También puedes crear los usuarios con una máscara de red como alternativa, así como otras fórmulas que podrías encontrar en la documentación de MySQL.

Luego tendrás que aplicarle una clave a este usuario. Tienes que usar el comando siguiente. cambiando 0.0.0.0 por la fórmula de IP usada en el momento de crear el usuario:

alter user mi_usuario@0.0.0.0 identified by 'secret';

Por último le das permisos a este usuario para acceso a la base de datos que acabamos de crear.

grant all on bbdd.* to mi_usuario@x.x.x.x;

Ahora corremos los procesos para que estos privilegios sean tenidos en cuenta inmediatamente.

flush privileges;

Configurar MySQL para que puedas aceptar conexiones remotas

De manera predeterminada MySQL no acepta conexiones que sean desde otros servidores u ordenadores en general, como medida de seguridad. Por ello tienes que editar los archivos de configuración de MySQL para asegurarte que las conexiones se permiten.

El archivo de configuración de MySQL donde se limita el acceso está en la carpeta " /etc/mysql/mysql.conf.d" y dentro el archivo "mysqld.cnf". Debes editar ese archivo para poder hacer los cambios pertinentes.

Nota: El archivo de configuración de MySQL dependiendo de tu distribución puede estar en otro lugar. Incluso el archivo de configuración puede hacer "include" de varios archivos sueltos. Esto lo tendrás que verificar en tu máquina en concreto. La ruta que he señalado es la que corresponde a Ubuntu.

Encontrarás una línea como esta:

bind-address  = 127.0.0.1

Si simplemente comentas esta línea colocando "#" delante, estarás permitiendo accesos desde cualquier IP.

A partir de las versiones de MySQL 8 en adelante, si quieres puedes indicar una lista de IPs separadas por comas.

bind-address = 0.0.0.1,0.0.1.1,0.0.0.2
Si tu versión de MySQL no soporta hacer un bind-address a más de una IP no te queda otra opción que comentar esa línea, o borrarla, para que se permita conectar con cualquier IP. Entonces, la solución que tienes para evitar que se conecten a MySQL desde otras IP sería configurar el firewall para aceptar conexiones al puerto 3306 solamente desde las IPs que tú desees permitir. Es una excelente opción también y perfectamente segura.

Después de editar este archivo es necesario reiniciar el servidor de MySQL para que las configuraciones tengan efecto. Esto generalmente lo haces con el comando:

service mysql restart
Depende de tu versión de MySQL igual encuentras una línea mysqlx-bind-address. Esta línea equivale a bind-address en su funcionamiento e indica la dirección de red desde donde se puede escuchar comuncaciones con X Plugin de MySQL.

Completando estos pasos ya tendrás tu sistema dispuesto para recibir conexiones desde otros servidores, desde una o varias IP, según te convenga en tu caso.

Conexión remota a un servidor MySQL desde un ordenador personal

Todo lo visto hasta el momento en este artículo no es necesario realizarlo en el caso que quieras simplemente conectarte contra una base de datos remotamente para las acciones típicas de gestión de una base de datos, como ver las tablas, crear y borrar tablas, ver datos y editarlos, etc.

Para trabajar con una base de datos durante el desarrollo y mantenimiento de la aplicación, en vez de abrir las conexiones remotas en el servidor, lo normal es usar lo que se llama Túneles SSH. Obviamente, es mucho más interesante y seguro utilizar un túnel SSH en comparación con abrir las conexiones remotas en el servidor de MySQL.

La mayoría de los programas que permiten administrar MySQL mediante interfaz gráfica como HeidiSQL, MySQL Workbench o Sequel Pro tienen funciones para poder realizar la conexión por medio de SSH. Una vez conectados por SSH son capaces de acceder a MySQL sin necesidad de abrir ningún puerto adicional en el servidor remoto.

Este tipo de conexiones por túnel SSH se configuran de manera distinta dependiendo del software que vayamos a usar, pero todos atienden a unas reglas básicas:

A continuación puedes ver la ventana de conexión de un acceso remoto en Sequel Pro. En tu software se realizará de otra manera posiblemente, con otro formulario, aunque en definitiva los datos serían muy parecidos.

Conectar con un servidor de base de datos MySQL remoto

En este otro artículo puedes ver otras alternativas de conexión remota a MySQL seguras que podrían interesarte.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual