Warning: This information may be outdated. Please note the date of the post.

Objetivo

Conectar un cliente remoto a la base de datos insertada en el servidor MySQL

Requisitos previos

  • Una máquina virtual con Debian Buster (paquetería actualizada). En mi caso usaré una máquina alzada con vagrant y virtualbox
  • Un servidor MySQL instalado. Instalaremos MariaDB.
  • Otra máquina virtual que actuará como cliente remoto con una red compartida con el servidor.

Hemos ejecutado los siguientes comandos para hacer todo lo mencionado

# Actualizamos la máquina
$ sudo apt update && apt upgrade
# Instalamos mariadb desde los repositorios de debian
$ sudo apt install mariadb-server
# Ejecutamos el script de seguridad de mariadb (opcional)
$ sudo mysql_secure_installation

Creación de la base de datos y usuario de prueba

En anteriores posts se ha explicado como llevar a cabo la instalación y creación de bases de datos y usuarios en mysql así que no voy a explicarlo como tal. Sólo indicaré los comandos a ejecutar.

# Nos conectamos a mysql como root
mysql -u root -p
# Crearemos la nueva base de datos
CREATE DATABASE academia;
# Creamos el usuario que se va conectar a la base de datos
CREATE USER 'celia'@'%' IDENTIFIED BY 'celia';
# Le damos los privilegios oportunos al usuario para usar la base de datos nueva
GRANT ALL PRIVILEGES ON academia.* TO 'celia'@'%';
# Actualizamos los permisos
FLUSH PRIVILEGES;
# Salimos
exit;

Comprobamos que podemos conectarnos con el usuario celia a la base de datos academia

vagrant@servermysql:~/.ssh$ mysql -u celia -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 58
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use academia;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Ahora vamos a poblar la base de datos con datos de prueba, podrás encontrarlo en el siguiente repositorio.

Comprobamos que están las tablas creadas:

MariaDB [academia]> show tables;
+--------------------+
| Tables_in_academia |
+--------------------+
| aulas              |
| ausencias          |
| complementos       |
| detalle_recibos    |
| ejemplares         |
| horarios           |
| materiales         |
| ninos              |
| personal           |
| recibos            |
| relaciones         |
| responsables       |
+--------------------+
12 rows in set (0.000 sec)

Habilitar el acceso remoto

Comprobaremos el direccionamiento de ambas máquinas (servidor y cliente), ambas comparten una red y es por donde el cliente se va a conectar remotamente a la base de datos del servidor. Cabe decir que lógicamente hay que instalar el cliente mysql en la máquina cliente.

Para habilitar el acceso remoto tendremos que editar el siguiente fichero

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Buscaremos la siguiente línea y la dejaremos de la siguiente forma

bind-address            = 0.0.0.0

Reiniciamos el servicio y comprobamos que está en funcionamiento

sudo systemctl restart mariadb
sudo systemctl status mariadb
vagrant@servermysql:~$ sudo systemctl restart mariadb
vagrant@servermysql:~$ sudo systemctl status mariadb.service 
● mariadb.service - MariaDB 10.3.27 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2021-03-23 08:10:28 GMT; 5s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 21364 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, s
  Process: 21365 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, 
  Process: 21368 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/
  Process: 21446 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited,
  Process: 21448 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
 Main PID: 21415 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 31 (limit: 544)
   Memory: 69.9M
   CGroup: /system.slice/mariadb.service
           └─21415 /usr/sbin/mysqld

Mar 23 08:10:28 servermysql systemd[1]: Starting MariaDB 10.3.27 database server...
Mar 23 08:10:28 servermysql mysqld[21415]: 2021-03-23  8:10:28 0 [Note] /usr/sbin/mysqld (mysqld 10.3.27-
Mar 23 08:10:28 servermysql mysqld[21415]: 2021-03-23  8:10:28 0 [Warning] Could not increase number of m
Mar 23 08:10:28 servermysql systemd[1]: Started MariaDB 10.3.27 database server.
Mar 23 08:10:28 servermysql /etc/mysql/debian-start[21450]: Upgrading MySQL tables if necessary.
Mar 23 08:10:28 servermysql /etc/mysql/debian-start[21453]: /usr/bin/mysql_upgrade: the '--basedir' optio
Mar 23 08:10:28 servermysql /etc/mysql/debian-start[21453]: Looking for 'mysql' as: /usr/bin/mysql
Mar 23 08:10:28 servermysql /etc/mysql/debian-start[21453]: Looking for 'mysqlcheck' as: /usr/bin/mysqlch
lines 1-25

Es importante saber que el puerto por el que está escuchando mysql por defecto es el 3306, lo podemos comprobar con el siguiente comando

netstat -tlpn

Comprobamos así que está escuchando en el puerto indicado.

root@servermysql:/home/vagrant# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      381/sshd            
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      21415/mysqld        
tcp6       0      0 :::22                   :::*                    LISTEN      381/sshd  

Conexión remota desde el cliente

Como hemos dicho anteriormente tendremos ya instalado mariadb-client en la máquina cliente. Ahora podemos probar la conexión remota de la siguiente forma.

mysql -u celia -p -h ip 

Comprobamos que podemos ver las tablas de la base de datos en cuestión

vagrant@clientmysql:~$ mysql -u celia -p -h 10.0.1.2
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.27-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use academia;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [academia]> show tables;
+--------------------+
| Tables_in_academia |
+--------------------+
| aulas              |
| ausencias          |
| complementos       |
| detalle_recibos    |
| ejemplares         |
| horarios           |
| materiales         |
| ninos              |
| personal           |
| recibos            |
| relaciones         |
| responsables       |
+--------------------+
12 rows in set (0.002 sec)

Como podemos ver podemos ver los registros sin problemas.