Cómo configurar la replicación MariaDB (maestro-esclavo) en CentOS / RHEL 7 y Debian 8/9


Incluso cuando algunas personas de TI escuchan la frase “replicación de la base de datos”, a menudo la asocian con la necesidad de tener varias copias de la misma información para evitar la pérdida de datos en caso de falla del hardware o corrupción de datos. Si bien eso es cierto hasta cierto punto, la replicación de la base de datos implica mucho más que el concepto común de hacer una copia de seguridad de una base de datos y la disponibilidad de datos.

Entre otros beneficios de la replicación de la base de datos en una configuración maestro-esclavo podemos mencionar:

  1. Backups can be done on the slave server without affecting (and being affected by) the write operations in the master.
  2. Resource-intensive operations (such as data analysis) can be performed on the slave without influencing the performance of the master.

En este artículo explicaremos cómo configurar la replicación maestro-esclavo en MariaDB 10.1. A diferencia de la replicación clásica, MariaDB introdujo el concepto de ID de transacción global (GTID) en v10.0, que permite cambiar un esclavo para conectarse y replicar desde un maestro diferente fácilmente. Además de eso, el estado del esclavo se registra de forma segura (las actualizaciones del estado se realizan en la misma transacción que las actualizaciones de los datos).

Si está buscando una replicación de MySQL en CentOS/RHEL 6, siga esta guía Configure la replicación de MySQL (maestro-esclavo) en CentOS/RHEL 6

Instalación de MariaDB 10.1 en CentOS / RHEL 7 y Debian 8/9

Nuestro entorno de prueba consta de las siguientes máquinas (ambas son CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Para instalar la última versión de MariaDB, necesitaremos agregar sus repositorios a nuestros servidores. Si está utilizando una versión anterior de MariaDB, digamos 5.5, considere actualizar a la última versión 10.1 utilizando el artículo a continuación.

  1. Upgrde MariaDB 5.5 to MariaDB 10.1

Cree un archivo llamado MariaDB.repo dentro de /etc/yum.repos.d con el siguiente contenido en los sistemas maestro y esclavo:

# MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Guarde el archivo e instale MariaDB en ambos servidores usando yum:

# yum update && yum install MariaDB-server MariaDB-client

Agregue la clave para autenticar paquetes y el repositorio MariaDB:

# apt-get install software-properties-common
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Nota: Reemplace el nombre de la distribución y el nombre en clave en la línea resaltada arriba.

Instalar usando el comando apt-get:

# apt-get update
# apt-get install mariadb-server

Una vez que haya instalado MariaDB, ejecute el procedimiento mysql_secure_installation tanto en el maestro como en el esclavo, configuremos una base de datos de prueba de muestra en la máquina maestra.

Configuración de una base de datos MySQL de muestra en Master

Ahora configuraremos en el servidor maestro la base de datos de Empleados de https://github.com/datacharmer/test_db (que proporciona un conjunto de datos de 4 millones de registros repartidos en seis tablas) en dos simples pasos:

Clone el repositorio y utilícelo para importar la base de datos de muestra a su instalación de MariaDB:

# git clone https://github.com/datacharmer/test_db
# cd test_db
# mysql < employees.sql

Configuración de MySQL Server en Master

Para configurar el maestro, siga estos pasos:

PASO 1: Edite el archivo /etc/my.cnf . En la sección [mysqld] , agregue las siguientes cuatro líneas:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

y reinicie MariaDB:

# systemctl restart mariadb

PASO 2: Inicie sesión en el servidor MariaDB como root, cree el usuario esclavo y asigne las concesiones necesarias:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

El último comando (SHOW MASTER STATUS) devuelve la posición actual en el registro binario (las coordenadas exactas que indican exactamente desde qué punto el esclavo debe comenzar a replicar:

PASO 3: Salga del indicador de MariaDB (con exit; ) y use el siguiente comando para tomar una instantánea de la base de datos de los empleados. Cuando presione Enter, se le pedirá que ingrese la contraseña de root que configuró anteriormente a través de mysql_secure_installation :

# mysqldump -u root -p employees > employees-dump.sql

Después de que se complete el volcado, conéctese al servidor de la base de datos nuevamente para desbloquear las tablas y luego salga:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

PASO 4: Copie el volcado al esclavo:

# scp employees-dump.sql [email protected]:/root/ 

PASO 5: Ejecute el procedimiento mysql_upgrade para actualizar las tablas del sistema (se le pedirá que ingrese la contraseña raíz de MariaDB):

# mysql_upgrade -u root -p

PASO 6: Permita que el servicio de la base de datos atraviese el firewall:

# firewall-cmd --add-service=mysql
# firewall-cmd --add-service=mysql --permanent
# firewall-cmd --reload

Ahora configuremos el esclavo.

Configuración del servidor MySQL en esclavo

Para configurar el esclavo, siga estos pasos:

PASO 1: Cree la cuenta para realizar las tareas de replicación. Conéctese al servidor MariaDB local con:

# mysql -u root –p

e ingrese la contraseña que configuró anteriormente.

PASO 2: Una vez conectado al servidor de la base de datos, cree el usuario y una base de datos vacía, y otorgue los permisos:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

PASO 3: Salga del indicador MariaDB y cargue el volcado creado en el servidor maestro:

# mysql -u root -p employees < employees-dump.sql

PASO 4: Edite el archivo /etc/my.cnf para asignar un ID de servidor al esclavo en la sección [mysqld] . Tenga en cuenta que debe ser un número entero diferente de 1, ya que usamos 1 en el maestro:

server_id=2
replicate-do-db=employees

Reinicie el servidor de la base de datos:

# systemctl restart mariadb

PASO 5: Ejecute el procedimiento mysql_upgrade para actualizar las tablas del sistema (se le pedirá que ingrese la contraseña raíz de MariaDB):

# mysql_upgrade -u root -p

PASO 6: Una vez que el volcado se ha importado al esclavo, solo quedan algunos pasos para comenzar a replicar. Inicie sesión en la base de datos y ejecute los siguientes comandos en el indicador MariaDB. Preste especial atención a las variables MASTER_LOG_FILE y MASTER_LOG_POS , que deben coincidir con los valores devueltos por SHOW MASTER STATUS en el PASO 2 de “Configuración del maestro” anterior.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

PASO 7: Inicie el esclavo y verifique su estado sin salir del indicador MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

No es que lo necesite ahora, pero tenga en cuenta que puede detener al esclavo con:

MariaDB [(none)]> STOP SLAVE;

si el comando SHOW SLAVE STATUS \ G; devuelve algún error. Utilice esos errores para solucionar problemas y luego ejecute START SLAVE; para probar nuevamente.

Pruebe la replicación de bases de datos MySQL / MariaDB

Agreguemos un registro a la tabla de empleados en el servidor principal:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Luego verifique que este cambio se haya replicado en el esclavo:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Como puede ver, la replicación funciona correctamente de maestro a esclavo.

Resumen

En este artículo, explicamos cómo instalar la última versión de MariaDB en CentOS/RHEL 7 y Debian 8/9, y discutimos cómo configurar la replicación maestro-esclavo con GTID. Para obtener más información, puede consultar la Guía de replicación de MariaDB y no dude en ponerse en contacto con nosotros mediante el formulario a continuación si tiene preguntas o comentarios.