Búsqueda de sitios web

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 bases de datos", a menudo la asocian con la necesidad de tener múltiples 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 esto es cierto hasta cierto punto, la replicación de bases de datos implica mucho más que el concepto común de realizar una copia de seguridad de una base de datos y su disponibilidad.

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

  1. Las copias de seguridad se pueden realizar en el servidor esclavo sin afectar (ni verse afectadas por) las operaciones de escritura en el maestro.
  2. Las operaciones que consumen muchos recursos (como el análisis de datos) se pueden realizar en el esclavo sin influir en el rendimiento del maestro.

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 transacciones globales (GTID) en la v10.0, que permite cambiar un esclavo a conectarse y replicarse 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: Configuración de 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 pruebas 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 siguiente.

  1. Actualización de MariaDB 5.5 a MariaDB 10.1

En CentOS/RHEL

Cree un archivo llamado MariaDB.repo dentro de /etc/yum.repos.d con el siguiente contenido tanto en Master como en Slave sistemas:

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

En Debian/Ubuntu

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 distribución y el codename en la línea resaltada arriba.

Instale 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.

Configurar una base de datos MySQL de muestra en Master

Ahora configuraremos en el servidor maestro la base de datos Employees de https://github.com/datacharmer/test_db (que proporciona un conjunto de datos de 4

Clona el repositorio y úsalo para importar la base de datos de muestra a tu instalación de MariaDB:

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

Configurar el servidor MySQL 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 reinicia MariaDB:

systemctl restart mariadb

PASO 2: Inicie sesión en el servidor MariaDB como root, cree el usuario esclavo y asigne las subvenciones 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 (MOSTRAR ESTADO DEL MAESTRO) devuelve la posición actual en el registro binario (las coordenadas exactas que indican exactamente en qué punto el esclavo debe comenzar a replicarse:

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 presiones Enter, se te pedirá que escribas la contraseña de root que configuraste anteriormente a través de mysql_secure_installation:

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

Una vez completado el volcado, conéctese nuevamente al servidor de la base de datos 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 :/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 base de datos atraviese el firewall:

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

Ahora configuremos el esclavo.

Configurar el 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 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 de 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 bajo [mysqld] sección. Tenga en cuenta que debe ser un número entero diferente a 1, ya que usamos 1 en el maestro:

server_id=2
replicate-do-db=employees

Reinicie el servidor de 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 nos faltan unos pocos pasos para comenzar a replicar. Inicie sesión en la base de datos y ejecute los siguientes comandos en el indicador de 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”. arriba.

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 necesites esto ahora, pero ten en cuenta que puedes detener el 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 realizar la prueba nuevamente.

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

Agreguemos un registro a la tabla empleados en el servidor maestro:

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 analizamos 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 contactarnos mediante el formulario a continuación si tiene preguntas o comentarios.