Introducción
La replicación de MySQL es un proceso de copiar datos de un servidor de base de datos (maestro) a uno o más servidores (esclavos).
MySQL admite varias topologías de replicación, siendo la topología maestro /esclavo una de las topologías más conocidas en las que un servidor de base de datos actúa como maestro, mientras que uno o más servidores actúan como esclavo. De forma predeterminada, la replicación es asincrónica donde el maestro envía eventos que describen los cambios a la base de datos en su registro binario y los esclavos solicitan eventos cuando están listos.
En esta guía, le mostraremos cómo configurar la replicación maestro /esclavo de MariaDB con un servidor maestro y un esclavo en Debian 10. MariaDB es la implementación predeterminada de MySQL en Debian. Lo mismo ocurre con Oracle MySQL.
Este tipo de topología de replicación es más adecuado para implementar réplicas de lectura para escalado de lectura, respaldo de base de datos en vivo para recuperación de desastres y trabajos de escaneo.
Prerrequisitos
Digamos que tiene dos servidores que ejecutan Debian 10, comunicándose entre sí a través de una red privada. Si su proveedor de alojamiento no admite direcciones IP privadas, puede usar direcciones IP públicas y configurar el firewall para permitir el tráfico en el puerto 3306 solo de fuentes confiables.
Los servidores utilizados en este ejemplo tienen las siguientes direcciones IP:
Master IP: 192.168.333.333
Slave IP: 192.168.444.444
Instalar MariaDB
El repositorio predeterminado de Debian 10 incluye MariaDB. Es mejor instalar la misma versión de MariaDB en ambos servidores para evitar problemas potenciales.
Instale MariaDB en el maestro emitiendo los siguientes comandos:
sudo apt-get update
sudo apt-get install mariadb-server
Instale MariaDB en el servidor esclavo (el servidor donde se encuentra la segunda base de datos) usando los mismos comandos:
sudo apt-get update
sudo apt-get install mariadb-server
Configurar el servidor principal
El primer paso es configurar el servidor principal. Realizaremos los siguientes cambios:
- Configure el servidor MariaDB para escuchar en la IP privada.
- Establezca una ID de servidor única.
- Habilite el registro binario.
Abra el archivo de configuración MariaDB y descomente o establezca las siguientes líneas:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 192.168.333.333
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
Una vez hecho esto, guarde el archivo y reinicie el servicio MySQL para que los cambios surtan efecto:
sudo systemctl restart mariadb
El siguiente paso es crear un nuevo usuario de replicación. Inicie sesión en el servidor MariaDB como root:
sudo mysql
O, si ha establecido una contraseña para el usuario root, use el siguiente comando para iniciar sesión en el servidor MySQL:
sudo mysql -u root -p
Ejecute las siguientes consultas SQL para crear un usuario llamado replica
y otorgue el REPLICATION SLAVE
al usuario:
CREATE USER 'replica'@'192.168.444.444' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.444.444';
Asegúrese de cambiar la IP a su dirección IP esclava. Puede nombrar al usuario como desee.
Mientras aún está dentro del indicador de MySQL, ejecute el siguiente comando que imprimirá el nombre y la ubicación del archivo binario.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 679
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)
Anote el nombre del archivo, 'mysql-bin.000001' y la ubicación ' 679 '. Estos valores son necesarios al configurar el servidor esclavo y probablemente difieran en su servidor.
Configurar el servidor esclavo
Realizaremos las mismas configuraciones realizadas en el servidor maestro, en el servidor esclavo:
- Configure el servidor MySQL para escuchar en la IP privada.
- Establezca una ID de servidor única.
- Habilite el registro binario.
Abra el archivo de configuración MariaDB y edite las siguientes líneas:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 192.168.444.444
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
Reinicie el servicio MariaDB:
sudo systemctl restart mariadb
El siguiente paso es configurar los parámetros que utilizará el servidor esclavo para conectarse al servidor maestro. Inicie sesión en el shell MariaDB:
sudo mysql
O, si ha establecido una contraseña para el usuario root, use el siguiente comando para iniciar sesión en el servidor MySQL:
sudo mysql -u root -p
Empiece por detener los hilos esclavos:
STOP SLAVE;
Ejecute la siguiente consulta para configurar la replicación maestro /esclavo:
CHANGE MASTER TO
MASTER_HOST='192.168.333.333',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=679;
Asegúrese de utilizar la dirección IP, el nombre de usuario y la contraseña correctos. El nombre y la ubicación del archivo de registro deben coincidir con los valores obtenidos del servidor principal.
Cuando termine, inicie los subprocesos esclavos.
START SLAVE;
Prueba la configuración
En este punto, debe tener una configuración de replicación maestro /esclavo que funcione.
Para verificar que todo esté configurado correctamente, cree una nueva base de datos en el servidor principal:
sudo mysql
CREATE DATABASE replicatest;
Inicie sesión en el shell MySQL esclavo:
sudo mysql
Ejecute el siguiente comando para enumerar todas las bases de datos:
SHOW DATABASES;
Notará que la base de datos que creó en el servidor principal se replica en el esclavo:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Conclusión
En este tutorial, le mostramos cómo crear una réplica maestro-esclavo de MariaDB en Debian 10.