Cómo configurar la replicación maestro-esclavo de MySQL en Ubuntu 18.04


La replicación maestro-esclavo de MySQL es un procedimiento que permite replicar o copiar archivos de bases de datos en uno o más nodos de una red. Esta configuración proporciona redundancia y tolerancia a fallas, de modo que en caso de falla en el nodo maestro, las bases de datos aún se pueden recuperar en el nodo esclavo. Esto les da a los usuarios la tranquilidad de que no todo se perderá en ninguna eventualidad, ya que aún se puede recuperar una réplica de las bases de datos de un servidor diferente.

En esta guía, aprenderá cómo realizar una replicación maestro-esclavo de la base de datos MySQL en un sistema Ubuntu 18.04.

En la configuración, tendremos dos servidores que ejecutan Ubuntu 18.04 con las siguientes direcciones IP.

Master server: 10.128.0.28
Slave server: 10.128.0.29

Ahora profundicemos y veamos cómo podemos configurar la configuración de replicación maestro-esclavo en Ubuntu.

Paso 1: Instale MySQL en los nodos maestro y esclavo

Los repositorios de Ubuntu contienen la versión 5.7 de MySQL. Para aprovechar las nuevas funciones y evitar posibles problemas, debe instalar la última versión de MySQL. Pero primero, actualice los dos nodos usando el siguiente comando apt.

$ sudo apt update

Para instalar MySQL en ambos nodos, ejecute el comando.

$ sudo apt install mysql-server mysql-client

A continuación, abra el archivo de configuración de mysql.

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

En el nodo principal, desplácese y localice el atributo bind-address como se muestra a continuación.

bind-address 	 =127.0.0.1

Cambie la dirección de loopback para que coincida con la dirección IP del nodo maestro.

bind-address  	=10.128.0.28

A continuación, especifique un valor para el atributo server-id en la sección [mysqld] . El número que elija no debe coincidir con ningún otro número de identificación del servidor. Asignemos el valor 1 .

server-id	 =1

Al final del archivo de configuración, copie y pegue las líneas siguientes.

log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index

Salga del archivo de configuración y reinicie el servicio MySQL para que los cambios surtan efecto en el nodo principal.

$ sudo systemctl restart mysql

Para verificar que el servidor MySQL se está ejecutando como se esperaba, emita el comando.

$ sudo systemctl status mysql

¡Perfecto! ¡El servidor MySQL se está ejecutando como se esperaba!

Paso 2: crear un nuevo usuario para la replicación en el nodo maestro

En esta sección, vamos a crear un usuario de replicación en el nodo maestro. Para lograr esto, inicie sesión en el servidor MySQL como se muestra.

$ sudo mysql -u root -p

A continuación, proceda y ejecute las consultas siguientes para crear un usuario de réplica y otorgar acceso al esclavo de réplica. Recuerde utilizar su dirección IP.

mysql> CREATE USER 'replication_user'@'10.128.0.29' IDENTIFIED BY 'replica_password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user '@'10.128.0.29';

A continuación, ejecute el siguiente comando.

mysql> SHOW MASTER STATUS\G

La salida debería ser similar a la que puede ver a continuación.

Esté atento y observe el valor mysql-bin.000002 y el ID de posición 1643 . Estos valores serán cruciales al configurar el servidor esclavo.

Paso 3: configurar el servidor esclavo MySQL

Dirígete al servidor esclavo y, como hicimos con el servidor maestro, abre el archivo de configuración de MySQL.

$ sudo vim  /etc/mysql/mysql.conf.d/mysqld.cnf

Al igual que el servidor maestro, proceda a editar las siguientes líneas.

bind-address           = 10.128.0.29

Como antes, especifique un valor para el atributo server-id en la sección [mysqld] . Esta vez seleccione un valor diferente. Vayamos con 2 .

server-id		=2 

Nuevamente, pegue las líneas a continuación al final del archivo de configuración.

log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index

A continuación, reinicie el servidor MySQL en el nodo esclavo.

$ sudo systemctl restart mysql

Una vez hecho esto, guarde y salga del editor de texto.

A continuación, inicie sesión en el shell de MySQL como se muestra.

$ sudo mysql -u root -p

En este paso, deberá realizar alguna configuración que permita que el servidor esclavo se conecte al servidor maestro. Pero primero, detenga los subprocesos esclavos como se muestra.

mysql> STOP SLAVE; 

Para permitir que el servidor esclavo replique el servidor maestro, ejecute el comando.

mysql> CHANGE MASTER TO MASTER_HOST ='10.128.0.28', MASTER_USER ='replication_user', MASTER_PASSWORD ='[email protected]', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 1643;

Si está lo suficientemente interesado, observará que hemos utilizado el valor mysql-bin.00002 y el ID de posición 1643 que se mostró anteriormente después de crear el usuario de replicación esclavo.

Además, se han utilizado la dirección IP, el usuario de replicación y la contraseña del servidor maestro.

Más tarde, inicie el hilo que había detenido anteriormente.

mysql> START SLAVE;

Paso 4: Verifique la replicación maestro-esclavo de MySQL

Para verificar si la configuración realmente funciona como se esperaba, crearemos una nueva base de datos en el maestro y verificaremos si se ha replicado en el servidor esclavo MySQL.

Inicie sesión en MySQL en el servidor maestro.

$ sudo mysql -u root -p

Creemos una base de datos de prueba. En este caso, crearemos una base de datos llamada replication_db.

mysql> CREATE DATABASE replication_db;

Ahora, inicie sesión en su instancia de MySQL en el servidor esclavo.

$ sudo mysql -u root -p

Ahora enumere las bases de datos utilizando la consulta.

mysql> SHOW DATABASES;

Notará que la base de datos que creó en el maestro se ha replicado en el esclavo. Increíble ! ¡Su replicación maestro-esclavo de MySQL está funcionando como se esperaba! Ahora puede estar seguro de que, en caso de falla, las copias de los archivos de la base de datos se replicarán en el servidor esclavo.

En esta guía, aprendió cómo configurar una configuración de replicación maestro-esclavo de MySQL en Ubuntu 18.04.