1 – Préambule
Nous allons mettre en place une réplication entre deux bases de données mariadb, ce qui signifie que ce qui se passe sur une base sera automatiquement renvoyé sur l’autre base
Attention : il faut prévoir un maître et un ou des esclaves
Le maître sera celui qui envoie les données, le ou les esclaves seront ceux qui recevront les données
Un cas précis serait de mettre une base en écriture et une ou plusieurs bases en lecture
Cela permettrai de rediriger le trafic entre les utilisateurs qui vont écrire dans la base (faire des commandes, etc…) et les utilisateurs qui vont lire la base (voir leurs infos, voir leurs commandes, etc…)
Cela permet, à terme, une scalabilité horizontale d’une application
Dans notre exemple nous allons avoir le « Master » qui aura l’ip 192.168.1.169 et un seul « Slave » qui aura l’ip 192.168.1.91
Notre base de données sera nommée test et aura une seule table nommée test

2 – Préparation du master
Toutes les commandes seront à faire sur le serveur « Maître »
2.1 – Modifier la configuration de MariaDB
Éditer le fichier /etc/mysql/mariadb.conf.d/50-server.cnf
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Repérer la ligne bind-address, et mettre à la place
bind-address = 0.0.0.0
server-id = 1
log_bin = mariadb-bin
binlog_format = ROW

Enregistrer le fichier
Redémarrer MariaDB
sudo systemctl restart mariadb
2.2 – Création de l’utilisateur qui va servir pour la réplication
Se connecter à mariaBD
sudo mysql -u root
Créer l’utilisateur
CREATE USER 'nomutilisateurreplication'@'192.168.1.%' IDENTIFIED BY 'motdepasseutilisateur';
Changer le nomutilisateurreplication par le nom désiré et le motdepasseutilisateur par le mot de passe désiré
Donner les accès à l’utilisateur pour qu’il puisse répliquer
GRANT REPLICATION SLAVE ON *.* TO 'nomutilisateurreplication'@'192.168.1.%';
FLUSH PRIVILEGES;
2.3 – Verrouillage des tables et récupération des infos Binlog
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Noter les valeurs dans un coin
2.4 – Faire une sauvegarde de la base master pour pouvoir la réinjecter dans le slave
mysqldump -u root -p --all-databases --master-data=2 > dump.sql
Récupérer le fichier dump.sql sur le poste – voir tuto SCP si nécessaire
Déverrouiller le master
UNLOCK TABLES;
3 – Préparation du slave
Toutes les commandes seront à faire sur le serveur « Esclave »
3.1 – Éditer le fichier /etc/mysql/mariadb.conf.d/50-server.cnf
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Après bind-adress rajouter
server-id = 2
relay_log = relay-bin
Enregistrer le fichier
Redémarrer MariaDB
sudo systemctl restart mariadb
3.2 – Importer le fichier dump crée à l’étape 2.4
Voir le tuto sur SCP si nécessaire pour mettre le fichier sur le serveur esclave
mysql -u root -p < dump.sql
3.3 – Configurer la réplication
Se connecter sur mariaDB
mysql -u root -p
Passer la commande suivante en modifiant les valeurs que l’on a mises tout au long de ce tuto
CHANGE MASTER TO
MASTER_HOST='ipdumaster',
MASTER_USER='nomutilisateurreplication',
MASTER_PASSWORD='motdepasseutilisateur',
MASTER_LOG_FILE='nomfichieretape2.3',
MASTER_LOG_POS=positionetape2.3;
Démarrer l’esclave
START SLAVE;
3.4 – Vérification
SHOW SLAVE STATUS\G

Vérifier surtout
- Slave_IO_Running : Yes
- Slave_SQL_Running : Yes
- Seconds_Behind_Master : 0 (ou proche)
4 – Tester une insertion dans la base pour voir si ça réplique bien


Et sur le slave

5 – Bonus
Pour rajouter d’autres slave, on reprends au 2.3 pour retrouver le fichier et la position
Et dans l’étape 3.1 on mets un server-id à 3, ou 4, ou 5, etc…
























