Configuration d’un réplica MYSQL avec MariaDB

Bonjour à tous,

À la suite de l’incendie d’OVH de Mars 2021, j’ai dû réinstaller mon serveur de secours, c’est l’occasion de vous présenter ici la mise en place d’un nœud MARIADB dans un cluster GTID. L’idée est d’avoir une base disponible en permanence, les backups étant fait sur le nœud passif.

Ici mes données MYSQL sont :
les bases dans : /var/lib/mysql/databases/
les logs binaires dans : /var/lib/mysql/logbin/

Anciennement j’utilisais un simple snapshot LVM pour faire la réinstallation d’un nœud mais l’utilisation d’INODB ne fonctionne pas simplement avec ce type de backup à chaud. C’est pourquoi après des recherches je suis tombé sur l’outil de BACKUP : mariabackup.

1. Création du backup sur le nœud actif, ici crx-bdd01 :

Ici je commence par créer le dossier cible qui va contenir les fichiers du backup,
puis je lance celui-ci :

mkdir /var/lib/mysql/backup/

mariabackup --defaults-file=/etc/mysql/my.cnf --target-dir=/var/lib/mysql/backup --user=root --password="mypassword" --backup --parallel=4

2. Restauration/ajout du nœud passif ici crx-bdd02 :

Ici je commence par récupérer les fichiers par SCP, puis je prépare le backup :

mkdir /backup/backup_full_crx-bdd01/

scp -rp root@crx-bdd01:/var/lib/mysql/backup /backup/backup_full_crx-bdd01

mariabackup --prepare --target-dir=/backup/backup_full_crx-bdd01/

Maintenant, je vais effacer les anciennes données MYSQL, puis déplacer les données du backup dans le dossier de bases mysql  ( mon service mysql étant coupé ), contrôler que vous êtes bien sur votre nœud passif avant toute chose et que le service mysql est coupé :

service mysql stop 

rm -fr /var/lib/mysql/logbin/*
rm -fr /var/lib/mysql/databases/*

mv /backup/backup_full_crx-bdd01/* /var/lib/mysql/databases/

chown mysql:mysql -R /var/lib/mysql/databases/

Ensuite je récupère les informations de réplication GTID contenues dans le backup :

cat /var/lib/mysql/databases/xtrabackup_info | grep -i GTID

binlog_pos = filename 'mysql-bin.000041', position '151038936', GTID of the last change '1-1-94949100'

Je peux maintenant démarrer le service mysql, puis activer la réplication GTID :

service mysql start

mysql > 

stop slave; reset slave; reset slave all; reset master;

SET GLOBAL gtid_slave_pos = '1-1-94949100';

CHANGE MASTER TO master_use_gtid=slave_pos;

CHANGE MASTER TO master_host="IP-DU-PRIMAIRE", master_port=3306, master_user="replication_user", master_password="********", master_use_gtid=slave_pos;

start slave;

show slave status \G;

Enfin je peux contrôler que la réplication se fait bien, ici je vais regarder le décalage horaire entre le slave et le master qui doit être le plus proche possible de 0, après plusieurs minutes, j’arrive à zéro, cela signifie que la réplication est maintenant faite en temps réel :


mysql 

show slave status \G;

Seconds_Behind_Master: 0

Et voilà j’ai maintenant un cluster actif passif MARIADB !

 

Source : https://mariadb.com/kb/en/setting-up-a-replication-slave-with-mariabackup/