Configurar MariaDB y MySQL para acceso remoto

Es práctica habitual en las empresas tener diferentes servidores de base de datos, donde se albergan la mayoría de base de datos corporativos, a los cuáles aplicaciones y otros servidores se conectan de manera remota. De eso irá el artículo de hoy, tal y como os dije en el artículo anterior.

Habilitar acceso remoto en MariaDB y MySQL

Por defecto estos motores de base de datos tienen deshabilitado el acceso remoto, como medida de seguridad. De esta manera sólo se puede acceder desde el propio host, apuntando a la dirección 127.0.0.1  Antiguamente otra práctica habitual, ahora en desuso, era deshabilitar la red TCP / IP, utilizando la directiva «skip networking», veamos con más detalle:

  • skyp-networking: De forma simple la directiva le indica al motor de base de datos que se ejecutiva obviando la red TCP/IP
  • bind-address, requiere un poco más de trabajo: Por normal general un servidor tiene como mínimo dos interfaces de red. Una de ellas suele ser un dispositivo de red «Loopback» y una tarjeta de red (NIC) ya sea física o virtual. Con esta última el servidor puede conectarse con el exterior. Pues bien, por defecto los motores de base de datos mencionados se conectan, por seguridad, a la interfaz de red «Loopback». De esta manera no nos podemos conectar a la base de datos desde el exterior.

Por normal general el fichero de configuración lo tendremos ubicado en /etc/my.cnf, con la configuración siguiente, de manera prederminada:

  1. [mysqld]
  2.     ...
  3.     skip-networking
  4.     ...
  5.     bind-address = 
  6.     ...

Para dar acceso desde el exterior las debemos comentar:

  1. [mysqld]
  2.     ...
  3.     #skip-networking
  4.     ...
  5.     #bind-address = 
  6.     ...

Por cada cambio debemos reiniciar el servicio:

  1. #En sistemas sin systemd
  2. service mariadb stop ; service mariadb start
  3. #o
  4. service mysql stop ; service mysql start
  5. #En sistemas con systemd
  6. systemctl stop mariadb.service ; systemctl start mariadb.service
  7. #o
  8. systemctl stop mysql.service ; systemctl start mysql.service

A continuación debemos crear un usuario en la base de datos, que tenga acceso de manera remota. En el ejemplo vamos a crear una base de datos llamada «test», a la que asignaremos un usuario remoto, llamado «usertest»

  1. mysql -u root -p
  2. CREATE DATABASE test;
  3. GRANT ALL PRIVILEGES ON test.* TO 'testuser'@'192.168.0.20' IDENTIFIED BY 'contrasea' WITH GRANT OPTION;

De esta manera ‘testuser’ se podrá conectar de manera remota, desde el host 192.168.0.20, a la base de datos ‘test’, ubicada en el servidor.

No se nos tiene que olvidar que la mayoría de servidores tienen el cortafuegos habilitado, en sistemas CentOS, habilitaremos el puerto 3306 (el puerto de mysql), para que sea accesible desde el exterior:

  1. firewall-cmd --add-port=3306/tcp 
  2. firewall-cmd --permanent --add-port=3306/tcp

Para muestra de su funcionamiento y como ejemplo de que todo de lo que hablo en la web, lo pruebo antes, voy a utilizar el comando mytop, para ver, en directo, las conexiones a la base de datos.

Lo primero será conectarnos desde el host 192.168.0.20 (tenemos el servidor de base de datos en la IP 192.168.0.21), lo haremos así:

  1. mysql -h 192.168.0.21 -u testuser -p

Una vez hemos conectamos, ya podemos ver el usuario conectado:

  1. MySQL on localhost (10.1.31-MariaDB)                    up 0+00:25:46 [19:28:55]
  2.  Queries: 15.0   qps:    0 Slow:     0.0         Se/In/Up/De(%):    20/00/00/00
  3.              qps now:    0 Slow qps: 0.0  Threads:    2 (   1/   0) 00/00/00/00
  4.  Key Efficiency: 100.0%  Bps in/out:   0.6/ 34.0   Now in/out:   9.7/ 3.0k
  5.  
  6.       Id      User         Host/IP         DB      Time    Cmd Query or State
  7.        --      ----         -------         --      ----    --- ----------
  8.         4      root       localhost       test         0  Query show full proces
  9.         3  testuser    192.168.0.20       test        27  Sleep

Espero que el artículo haya sido de vuestro interés. Cualquier duda la podéis dejar en los comentarios. Nos vamos leyendo ^.^

Para el artículo me he servido de la siguiente documentación:

Configuring MariaDB for Remote Client Access