Mise en place d’une réplication de bases de données MariaDB (Master-Slave)
Sources :
https://mariadb.com/kb/en/setting-up-replication/
https://www.yoan-jouve.com/mise-en-place-dune-replication-de-bases-de-donnees-mariadb-master-slave/
https://www.howtoforge.com/how-to-setup-mariadb-master-master-replication-on-debian-11/
https://linuxize.com/post/how-to-configure-mysql-master-slave-replication-on-debian-10/
Objectif de la mise en place d’une réplication
Pour des raisons de sécurité et de tolérance aux pannes, la configuration de la réplication maître et esclave MySQL / MariaDB est une voie à suivre. Dans une configuration maître et esclave, un serveur de base de données est le serveur principal ou le maître et les autres comme esclaves dans cette topologie.
Les modifications apportées sur le serveur maître sont répliquées sur les serveurs esclaves. la réplication est asynchrone et automatique.
Cette configuration est nécessaire dans les situations où vous souhaitez évoluer, fournir des sauvegardes en direct pour la reprise après sinistre et la tolérance aux pannes.
Prérequis
Lors de ce tutoriel, nous allons mettre en place une réplication de bases de données MariaDB (Master-Slave).
Pour réaliser cette configuration, il nous allons utiliser 2 machines sous Debian 10 Buster. Si vous n’en avez pas, vous pouvez vous rendre sur le site d’osboxes.org : https://www.osboxes.org/debian/ et télécharger 2 machines virtuelles sous Debian 10 Buster.
Un accès SSH aux deux machines est nécessaire.
Le schéma réseau dans cet exemple:
- Serveur Maître : Nom « Server-WP-SQL-M » Adresse IP 192.168.4.104
- Serveur Esclave : Nom « Server-WP-SQL-S » Adresse IP 192.168.0.105
Note : La configuration IP pour vos machines est à adapter. Il faut que vos deux machines soient sur le même réseau, ou au minimum que la machine Esclave puisse se connecter sur la machine Maître à travers Internet sur le port TCP 3306.
I – Mise à jour des machines
Dans cette partie les manipulations sont à faire sur toutes les machines.
Premièrement, vous devez mettre à jour les paquets ainsi que les logiciels présents sur les machines :
$ sudo apt update && apt upgrade -y
II – Installation de MariaDB
Dans cette partie les manipulations sont à faire sur toutes les machines
Nous allons dans un premier temps installer les services nécessaires pour notre serveur :
$ sudo apt-get install mariadb-server mariadb-client sudo -y
$ sudo systemctl start mysql.service && sudo systemctl enable mysql.service
$ sudo mysql_secure_installation
Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
III – Configuration du serveur Maitre
Dans cette partie les manipulations sont à faire sur le serveur Maitre (192.168.4.104/24)
Dans un premier temps, nous configurons le serveur maitre et enregistrons le fichier de configuration :
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
log-bin
bind-address = 192.168.4.104
server_id = 1
log-basename = master1
bind-address = 192.168.4.104
Nous vérifions que les lignes ci-dessous soient bien décommentées :
log_bin = /var/log/mysql/mysql-bin.log
server_id = 1
Nous redémarrons les services MariaDB :
$ sudo systemctl restart mariadb.service
Une fois les services redémarrés, nous allons configurer les accès pour que le serveur Esclave puisse se connecter :
$ sudo mysql -u root -p
MariaDB [(none)]> CREATE USER 'replication_user'@'votre_ip_slave' IDENTIFIED BY 'nouveau_mot_de_passe';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'votre_ip_slave';
MariaDB [(none)]> SHOW MASTER STATUS;
Note : Prenez une capture d’écran de la réponse à cette commande, ou bien notez simplement la valeur de « Position ». Elle nous sera utile dans la suite de ce tutoriel.
Une fois les services redémarrés, nous allons configurer les accès pour que le serveur Esclave puisse se connecter :
IV – Configuration du serveur Esclave
Dans cette partie les manipulations sont à faire sur le serveur Esclave (192.168.4.105/24)
Dans un second temps, nous configurons le serveur esclave et enregistrer le fichier de configuration :
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
log-bin
bind-address = 192.168.4.105
server_id = 2
Note : Nous ajoutons les lignes ci-dessus :
log_bin = /var/log/mysql/mysql-bin.log
bind-address = 192.168.4.105
server_id = 2
Nous redémarrons les services MariaDB :
$ sudo systemctl restart mariadb.service
Une fois les services redémarrés, nous allons configurer le serveur Esclave avec le serveur Maitre :
MariaDB [(none)]>STOP SLAVE;
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='votre_ip_master',
MASTER_USER='replication_user',
MASTER_PASSWORD='votre_mot_de_passe',
MASTER_LOG_FILE='master1-bin.000001',
MASTER_LOG_POS=votre_position;
MariaDB [(none)]>START SLAVE;
MariaDB [(none)]>SHOW SLAVE STATUS \G
Si tout se passe bien, ces deux lignes devraient s’afficher.
V – Test de notre réplication
Note : Dans cette partie les manipulations sont à faire sur toutes les machines
Premièrement, sur le serveur Maitre, nous allons créer une base de donnée, table et insérer des données dedans :
MariaDB [(none)]> CREATE DATABASE exampledb;
MariaDB [(none)]> USE exampledb;
MariaDB [exampledb]> CREATE TABLE test_table (
ID INT NOT NULL AUTO_INCREMENT,
TEST VARCHAR(100) NOT NULL,
PRIMARY KEY (ID));
MariaDB [exampledb]> INSERT INTO test_table(TEST) VALUES ("Welcome");
SELECT ID,TEST FROM test_table;
Puis, nous nous rendons sur le serveur Esclave, pour vérifier le bon fonctionnement :
$ sudo mysql -u root -p
MariaDB [(none)]> SHOW DATABASES;
On voit que la base « exampledb » a bien été créée automatiquement:
MariaDB [(none]> USE exampledb;
MariaDB [exampledb]> SELECT ID,TEST FROM test_table;
Et on voit que le contenu de la table a bien été répliqué:
Nous pouvons conclure que notre réplication est bien fonctionnelle.
Si cela ne fonctionne pas, vous pouvez par exemple consulter cet article :