Cómo configurar el acceso remoto a MySQL

Dificultad: Fácil
<b>Tiempo de Lectura:</b> 2 minutos

Usualmente, no necesitamos que los servidores hagan uso de conexiones remotas a nivel de MySQL, ya que por lo general podemos trabajar en forma local, pero en algunas circunstancias es posible que necesitemos una conexión remota, por ejemplo si tenemos el sistema de base de datos montado en otro servidor para evitar sobrecargas, o si necesitamos trabajar desde alguna herramienta especializada o por alguna otra razón. Las razones por las cuales podemos necesitar una conexión remota de MySQL pueden ser varias, y a continuación les mostraremos cómo realizar esta configuración.

Como indica el título, trabajaremos en un servidor CentOS, en este caso versión 6.x. Como siempre, no olviden realizar previamente todos los respaldos que consideren que puedan ser necesarios.

Obviamente lo primero que debemos hacer es ingresar a nuestro server vía SSH y pasarnos a root. Cuando estemos dentro, nos conectaremos a la consola de MySQL (servicio que asumimos ya está instalado, configurado y funcionando en el server):

mysql -u root -p

A continuación vamos a correr estas dos sintaxis:

mysql> update db set Host='xxx.xx.xx.x' where db='base_de_datos';
mysql> update user set Host='xxx.xx.xx.x' where user='usuario';

La primera línea la usamos para indicar cuál es la IP que tendrá acceso a la base de datos. Por supuesto hay que reemplazar «xxx.xx.xx.x» por la IP en cuestión, así como «base_de_datos» por el nombre real de la base de datos.
La segunda línea es similar: configuramos nuevamente la IP y además el usuario, reemplazando «usuario» por el nombre real.

Otra forma de hacerlo, es directamente hacer un GRANT de los privilegios remotos a la nueva IP, ejemplo:

GRANT ALL PRIVILEGES ON base_de_datos.* TO 'usuario'@'xx.xx.xx.xx' IDENTIFIED BY 'contraseña';
flush privileges;

Donde tendremos que reemplazar base_de_datos, usuario, xx.xx.xx.xx y contraseña por los datos reales.

Esa configuración es para habilitar el acceso a una base de datos, pero en caso de requerir acceso a todas las bases de datos, tendremos que correr lo siguiente:

mysql> GRANT ALL PRIVILEGES ON *.* to 'usuario'@'xxx.xx.xx.x' IDENTIFIED BY 'contraseña';

Esta sintaxis indica que el ‘usuario’ del servidor «xxx.xx.xx.x» podrá conectarse a cualquier base de datos de MySQL en el server. No olviden reemplazar los datos: «contraseña» por la contraseña del usuario real que uses y «xxx.xx.xx.x» por la IP del server desde nos conectaremos.
Para que este cambio se refleje debemos correr lo siguiente:

mysql> FLUSH PRIVILEGES;

Este sencillo comando sirve para actualizar los permisos/privilegios de las bases de datos.
Finalmente salimos de la consola de MySQL:

mysql> exit;

Si tienes instalado algún firewall basado en iptables, necesitarás poner en whitelist a la otra IP para que pueda conectar. En el caso de iptables por ejemplo, bastará con correr lo siguiente desde root:

iptables -I INPUT -s xx.xx.xx.xx -j ACCEPT
service iptables save

Y si usas CSF o APF firewall, bastaría con correr estos comandos:

csf -a xx.xx.xx.xx
apf -a xx.xx.xx.xx

En los tres casos, debemos reemplazar xx.xx.xx.xx por la IP real a poner en whitelist. Conviene hacer lo mismo en ambos servidores así no hay ningún problema de comunicación de entrada o salida de datos.

Todo listo, ahora deberías poder realizar la conexión remota sin problemas.


¿Te resultó útil el artículo? Compártelo con tus colegas: