Introducció
Quan treballes amb bases de dades, pot ser útil tenir còpies de seguretat de les dades. Això proporciona redundància en cas que un dels servidors de bases de dades falli i millora la disponibilitat. La pràctica de sincronitzar les dades entre múltiples bases de dades separades s'anomena replicació.
MySQL és un sistema de gestió de bases de dades relacionals, i és la base de dades relacional de codi obert més popular del món actualment. Incorpora diverses característiques de replicació que permeten mantenir múltiples còpies de la informació.
Nota informativa:
Aquest tipus de replicació de bases de dades s'ha anomenat històricament replicació "Mestre-Esclau". Tot i que l'equip de MySQL va reconèixer l'origen negatiu d'aquesta terminologia, així com també dels termes llista negra i blanca.
Es va anunciar al blog oficial de MySQL, i es van actualitzar el programa de base de dades i la seva documentació per utilitzar un llenguatge més inclusiu. Tanmateix, aquesta terminologia encara pot aparèixer i continua sent utilitzable per compatibilitat.
Durant aquest article s'utilitzarà la terminologia "Origen-Rèplica" sempre que sigui possible.
Aquest article explicarà com configurar una instància de MySQL en un servidor com a base de dades d'origen/font i després configurar una instància en un altre servidor perquè funcioni com la seva rèplica.
Requisits
Aquest article utilitzarà dos servidors Ubuntu 22.04 LTS per a l'explicació, però es poden utilitzar totes les versions superiors a Ubuntu 16.04 LTS o qualsevol distribució Debian amb el gestor de dimonis systemd.
També es pot fer servir per a distribucions basades en RHEL, modificant la instal·lació de MySQL amb el gestor de paquets corresponent i que incorporin systemd. A l'article següent tens la llista de totes les distribucions Linux disponibles a Clouding: Imatges Linux.
Creació d'un escenari per al servidor Origen
Primer s'explicarà la creació d'un escenari d'un servidor Origen (Master) per a l'article; si ja tens instal·lat MySQL amb la base de dades que vols replicar ves a la secció Configuració del servidor font.
Primer executa el següent al servidor Font per a la instal·lació de MySQL:
# apt install mysql-server -yUn cop instal·lat, hauràs de crear les bases de dades. Executant el següent crearàs dues bases de dades; se'n crearan dues per explicar com ignorar una base de dades en la replicació:
# mysql -u root -e "CREATE DATABASE base_de_datos_replicacion; CREATE DATABASE base_de_datos_no_replica"
Posteriorment, crea una taula i afegeix-hi informació d'exemple:
# mysql -u root -e "USE base_de_datos_replicacion; CREATE TABLE tabla (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario VARCHAR(20) UNIQUE); INSERT INTO tabla (id, usuario) VALUES ('01', 'clouding')"
Per mostrar el contingut de la taula creada, pots executar un SELECT:
# mysql -u root -e "USE base_de_datos_replicacion; SELECT * FROM tabla"
Hauries d'obtenir el resultat següent a la consulta:
+----+----------+
| id | usuario |
+----+----------+
| 1 | clouding |
+----+----------+
1 row in set (0.00 sec)
Configuració del servidor Origen
Primer crea un usuari al servidor Origen per a la replicació, pots substituir % per l'adreça IP del servidor o el rang de servidors rèplica (recorda modificar la contrasenya d'exemple):
# mysql -u root -e "CREATE USER 'usuario_replicacion'@'%' IDENTIFIED WITH mysql_native_password BY 'contraseña'"Posteriorment, atorga privilegis de replicació a l'usuari creat al servidor Origen:
# mysql -u root -e "GRANT REPLICATION SLAVE ON *.* TO 'usuario_replicacion'@'%'"
Tens més informació sobre la creació d'usuaris a l'article següent Com administrar usuaris i permisos a MySQL.
Després edita el fitxer de configuració de MySQL del servidor Origen:
# nano /etc/mysql/mysql.conf.d/mysqld.cnfHauràs de editar i descomentar les línies següents de la configuració:
bind-address = 10.20.10.0
mysqlx-bind-address = 10.20.10.0
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = base_de_datos_replicacion # base de dades per a la replicació
binlog_ignore_db = base_de_datos_no_replica # base de dades que cal ignorar
S'ha indicat el rang de la xarxa interna per defecte del DHCP, però l'hauràs de canviar si utilitzes una altra xarxa per a la replicació i també introduir els noms de les bases de dades per a la replicació. Així com també les bases de dades que vulguis ignorar en la replicació i no proporcionar-les al servidor rèplica (Precaució: afegeix una base de dades per opció).
Un cop modificat el fitxer, reinicia MySQL per aplicar els canvis:
# systemctl restart mysqlAra hauràs de bloquejar les taules per fer una exportació de les bases de dades:
# mysql -u root -e "FLUSH TABLES WITH READ LOCK"També consulta la posició comprovant l'estat d'Origen (recorda anotar la posició):
# mysql -u root -e "SHOW MASTER STATUS"
Hauries d'obtenir un resultat similar al següent:
+------------------+----------+----------------------------+---------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+----------------------------+---------------------------+-------------------+
| mysql-bin.000001 | 157 | base_de_datos_replicacion | base_de_datos_no_replica | |
+------------------+----------+----------------------------+---------------------------+-------------------+
1 row in set (0.00 sec)
Un cop bloquejades les taules i anotada la posició, fes una exportació de les bases de dades al servidor Origen:
# mysqldump -u root base_de_datos_replicacion > dump.sqlI transfereix el dump al servidor Rèplica, executant el següent pots copiar-lo amb el protocol SSH des del servidor Origen:
# scp dump.sql root@IP_servidor_replica:/tmp/Un cop creat el dump, pots desbloquejar les taules al servidor Origen:
# mysql -u root -e "UNLOCK TABLES"Configuració del servidor Rèplica
Ara hauràs d'accedir al servidor Rèplica, hi has d'executar totes les ordres d'aquesta secció. Primer hauràs d'instal·lar MySQL al servidor Rèplica per configurar-lo posteriorment:
# apt install mysql-server -yTambé crea la base de dades per a la replicació, en aquest cas s'utilitza la creada a la secció Creació d'un escenari al servidor Font:
# mysql -u root -e "CREATE DATABASE base_de_datos_replicacion"Un cop creada la base de dades, hauràs d'importar les còpies del servidor Origen. Executant el següent al servidor Rèplica podràs importar la còpia a la base de dades:
# mysql base_de_datos_replicacion < /tmp/dump.sqlPosteriorment, edita la configuració de MySQL del servidor Rèplica:
# nano /etc/mysql/mysql.conf.d/mysqld.cnfHauràs de descomentar, modificar o introduir les línies següents (Precaució: afegeix una base de dades per opció):
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = base_de_datos_replicacion
relay-log = /var/log/mysql/mysql-relay-bin.log
Recorda modificar el número d'ID de servidor si és per a una tercera rèplica o superior.
Quan hagis desat els canvis al fitxer de configuració, reinicia MySQL de la Rèplica per aplicar els canvis:
# systemctl restart mysqlAra hauràs de configurar la replicació, executa l'ordre següent al servidor Rèplica i hauràs de modificar-la per indicar l'adreça IP del servidor Origen, l'usuari creat anteriorment per a la replicació, comprovar el fitxer d'origen i modificar la posició anotada durant la Configuració del servidor Rèplica:
# mysql -u root -e "CHANGE REPLICATION SOURCE TO SOURCE_HOST='master',SOURCE_USER='usuario_replicacion',SOURCE_PASSWORD='contraseña',SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=157"En versions de MySQL anteriors a la 8.0, canvia "CHANGE REPLICATION SOURCE TO" per l'ús de l'ordre "CHANGE MASTER TO".
Finalment, engega la replicació executant el següent de nou al servidor Rèplica ("SLAVE" en versions anteriors):
# mysql -u root -e "START REPLICA"Pots visualitzar o mostrar l'estat de la replicació executant el següent:
# mysql -u root -e "SHOW REPLICA STATUS\G" | grep StateHauries d'obtenir el resultat següent si té tota la informació del servidor Origen:
Replica_IO_State: Waiting for source to send event
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
Comprovació de la replicació
Per comprovar que la replicació funciona correctament, pots provar simplement d'inserir informació al servidor Origen. Executant el següent afegiries informació a la taula creada d'exemple en aquest article:
# mysql -u root -e "USE base_de_datos_replicacion; INSERT INTO tabla (id, usuario) VALUES ('02', 'usuario')"Amb l'ordre següent, executada al servidor Rèplica podràs consultar la taula replicada:
# mysql -u root -e "USE base_de_datos_replicacion; SELECT * FROM tabla"Amb l'escenari d'exemple, hauries d'obtenir el resultat següent al servidor Rèplica en executar el SELECT:
+----+----------+
| id | usuario |
+----+----------+
| 1 | clouding |
| 2 | usuario |
+----+----------+
1 row in set (0.00 sec)
Esperem que aquest tutorial t'hagi estat d'ajuda; si tens consultes sobre aquesta o una altra qüestió relacionada amb els teus servidors a Clouding, no dubtis a contactar amb soporte@clouding.io Som aquí per ajudar-te!