Incluso cuando algunas personas de TI escuchan la frase "Replicación de bases de datos “, a menudo lo 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, hay mucho más en la replicación de la base de datos que el concepto común de hacer una copia de seguridad de una base de datos y la disponibilidad de los datos.
Entre otros beneficios de la replicación de bases de datos en una configuración maestro-esclavo podemos mencionar:
- Las copias de seguridad se pueden hacer en el servidor esclavo sin afectar (y verse afectado por) las operaciones de escritura en el maestro.
- 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 v10.0 , que permite cambiar un esclavo para 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 MySQL replicación bajo 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 usando el siguiente artículo.
- Actualizar MariaDB 5.5 a MariaDB 10.1
En CentOS/RHEL
Cree un archivo llamado MariaDB.repo
dentro de /etc/yum.repos.d con los siguientes contenidos tanto en Master y Esclavo 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 de 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 :Reemplazar distribución nombre y nombre en clave en la línea resaltada arriba.
Instalar usando apt-get comando:
# apt-get update # apt-get install mariadb-server
Una vez que haya instalado MariaDB, ejecute mysql_secure_installation
procedimiento 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 los Employees
base de datos de https://github.com/datacharmer/test_db (que proporciona un conjunto de datos de 4 millones de registros repartidos en seis tablas) en dos sencillos 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 del servidor MySQL en maestro
Para configurar el maestro, siga estos pasos:
/etc/my.cnf
expediente. Bajo el [mysqld]
sección, 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
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 desde qué punto el esclavo debe comenzar a replicar:
exit;
) y use el siguiente comando para tomar una instantánea de la base de datos de empleados. Cuando pulsas Intro , se le pedirá que escriba 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 completar el volcado, vuelva a conectarse al servidor de la base de datos para desbloquear las tablas y luego salga:
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
# scp employees-dump.sql [email protected]:/root/
mysql_upgrade
procedimiento para actualizar las tablas del sistema (se le pedirá que ingrese la contraseña raíz de MariaDB):
# mysql_upgrade -u root -p
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
Ahora vamos a configurar el esclavo.
Configuración del servidor MySQL en esclavo
Para configurar el esclavo, siga estos pasos:
# mysql -u root –p
e ingrese la contraseña que configuró anteriormente.
MariaDB [(none)]> CREATE DATABASE employees; MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
# mysql -u root -p employees < employees-dump.sql
/etc/my.cnf
archivo para asignar un servidor ID al esclavo bajo el [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 la base de datos:
# systemctl restart mariadb
mysql_upgrade
procedimiento para actualizar las tablas del sistema (se le pedirá que ingrese la contraseña raíz de MariaDB):
# mysql_upgrade -u root -p
MASTER_LOG_FILE
y MASTER_LOG_POS
variables, que deben coincidir con los valores devueltos por MOSTRAR ESTADO DEL MAESTRO 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;
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G;
No es que necesites esto ahora, pero ten en cuenta que puedes detener al esclavo con:
MariaDB [(none)]> STOP SLAVE;
si SHOW SLAVE STATUS\G;
El comando devuelve cualquier error. Use esos errores para solucionar problemas y luego ejecute START SLAVE;
para probar de nuevo.
Probar la replicación de la base de datos MySQL/MariaDB
Agreguemos un registro a los empleados tabla 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 fue 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 hemos explicado cómo instalar la última versión de MariaDB en CentOS/RHEL 7 y Debian 8/9, y discutió 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 siguiente formulario si tiene preguntas o comentarios.