Réplication MariaDB/MySQL Master/Slave

db

Maintenant vous avez un vrai client sql, vous n’êtes donc plus fâché avec MariaDB ou MySQL.

Vous allez donc pouvoir réfléchir à un premier niveau de tolérance de panne avec MariaDB ou MySQL.

Considérons que nous avons deux serveurs MySQL : un futur maître en 172.17.0.1 et un futur esclave en 172.17.0.2.

Au niveau écriture, tout va être écrit sur le maître, qui va répliquer instantanément sur l’esclave.

Au niveau lecture, les deux serveurs peuvent être consultés, ils renverrons les mêmes informations.

En cas de panne du serveur maître, l’esclave devient maître, il devient capable d’écrire des données.

 

Configuration du maître

 

Sur le serveur maître, on va modifier le fichier de configuration de MariaDB/MySQL (/etc/mysql/my.cnf) pour ajouter ces lignes dans la section [mysqld] :

[mysqld]
log-bin=mysql-bin
server-id=1

Le server-id est l’identifiant du serveur dans une grappe, sachant que le nombre le plus faible deviendra maître.

 

Il faut redémarrer le serveur pour que la modification soit prise en compte :

service mysql restart

 

On se connnecte au serveur avec mycli, par exemple et un crée un utilisateur pour la réplication :

CREATE USER 'replicant'@'%' IDENTIFIED BY 'a-pass';
GRANT REPLICATION SLAVE ON *.* TO 'replicant'@'%';

 

Ensuite, on bloque temporairement l’écriture de données sur le maître et on vérifie qu’il est bien maître :

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Gardez en mémoire le nom du fichier et la position indiqués.

 

Enfin, exportez les bases de données en précisant que le premier serveur est le maître, puis déverrouillez les tables :

mysqldump --all-databases --master-data > /root/bases.sql
UNLOCK tables;

 

 

Configuration de l’esclave

 

Modifiez le fichier de configuration de l’esclave (/etc/mysql/my.cnf) pour ajouter cette ligne dans la section [mysqld] :

[mysqld]
# Il faut que l'ID soit supérieur à celui du maître
server-id=5

Il faut redémarrer le serveur pour que la modification soit prise en compte :

service mysql restart

 

Il faut indiquer à l’esclave les credentials de réplication :

mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='172.17.0.1',
mysql> MASTER_USER='replicant',
mysql> MASTER_PASSWORD='a-pass',
mysql> MASTER_LOG_FILE='<le_log_file_vu_avec_MASTER_STATUS>',
mysql> MASTER_LOG_POS=<la_position_vue_avec_MASTER_STATUS>;

 

Copiez sur l’esclave le Dump des bases MySQL créé tout à l’heure et restaurez-le.

scp root@172.17.0.1:~/root/bases.sql .
mysql -u root -p < bases.sql

 

Voilà, c’est fait, maintenant vous pouvez vérifier que quand vous écrivez sur master, les données sont répliquées sur slave.

 

 

Sur le même sujet :