Qu'est-ce que la réplication
La réplication est un processus par lequel :
- les données d'une base de données MariaDB sont copiées (répliquées) d'un serveur MariaDB (appelé le serveur principal)
- vers un ou plusieurs serveurs MariaDB (appelés serveurs secondaires).
Cela peut être utilisé :
- pour des raisons de performance (répartir la charge de lecture entre plusieurs serveurs),
- pour des raisons de sécurité (avoir une copie des données en cas de panne du serveur principal)
- ou pour des raisons de disponibilité des données (avoir les données disponibles à plusieurs endroits).
Notions théoriques
-
Configuration du serveur principal : Le serveur principal doit être configuré pour enregistrer toutes les modifications apportées aux données dans un journal binaire. Cela est fait en modifiant le fichier de configuration de MariaDB (généralement situé à
/etc/mysql/mariadb.conf.d/50-server.cnf
) et en ajoutant les lignes suivantes :log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
server_id = 1Le
server_id
doit être unique pour chaque serveur impliqué dans la réplication. -
Configuration du serveur secondaire : Le serveur secondaire doit également être configuré pour enregistrer les modifications dans un journal de relais. Cela est fait en ajoutant les lignes suivantes au fichier de configuration de MariaDB :
relay_log = /var/log/mysql/mariadb-relay-bin
relay_log_index = /var/log/mysql/mariadb-relay-bin.index
server_id = 2Le
server_id
doit être différent de celui du serveur principal. -
Création d'un utilisateur de réplication : Sur le serveur principal, un utilisateur de réplication doit être créé. Cet utilisateur est utilisé par le serveur secondaire pour se connecter au serveur principal et copier les modifications. La commande pour créer un utilisateur de réplication est la suivante :
CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; -
Démarrage de la réplication : Sur le serveur secondaire, la réplication est démarrée en exécutant la commande suivante :
CHANGE MASTER TO MASTER_HOST='adresse_ip_du_serveur_principal', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=current_pos;
START SLAVE;
Exemple pratique
Supposons que nous ayons deux serveurs MariaDB, un serveur principal avec l'adresse IP 192.168.1.10
et un serveur secondaire avec l'adresse IP 192.168.1.20
.
-
Sur le serveur principal, modifiez le fichier de configuration de MariaDB :
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Ajoutez les lignes suivantes et sauvegardez le fichier :
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
server_id = 1Redémarrez le service MariaDB :
sudo service mariadb restart
Connectez-vous à MariaDB en tant qu'utilisateur root et créez un utilisateur de réplication :
CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; -
Sur le serveur secondaire, modifiez le fichier de configuration de MariaDB :
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Ajoutez les lignes suivantes et sauvegardez le fichier :
relay_log = /var/log/mysql/mariadb-relay-bin
relay_log_index = /var/log/mysql/mariadb-relay-bin.index
server_id = 2Redémarrez le service MariaDB :
sudo service mariadb restart
Connectez-vous à MariaDB en tant qu'utilisateur root et démarrez la réplication :
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=current_pos;
START SLAVE;