La réplication maître-esclave MySQL permet de maintenir une copie synchrone des données sur plusieurs serveurs. Cette procédure détaille l'implémentation complète sur un environnement Windows avec deux instances distinctes fonctionnant sur des ports différents.
Prérequis et architecture
Cette configuration utilise MySQL 5.6.39 en version portable (archive ZIP). L'instance principale écoute sur le port 3307, tandis que l'instance secondaire utilise le port 3308. Chaque instance dispose de son propre répertoire d'installation et de données.
Déploiement de l'instance secondaire
Dupliquer le dossier MySQL original vers un nouvel emplacement, par exemple E:\MySQL\mysql-slave. Éditer le fichier my.ini de cette copie :
[mysqld]
basedir = E:\\MySQL\\mysql-slave
datadir = E:\\MySQL\\mysql-slave\\data
port = 3308
server_id = 2
Configuration des variables d'environnement
Pour gérer plusieurs instances, créer deux variables système distinctes :
MYSQL_MASTERpointant versE:\MySQL\mysql-masterMYSQL_SLAVEpointant versE:\MySQL\mysql-slave
Modifier la variable PATH pour inclure :
%MYSQL_MASTER%\bin;%MYSQL_SLAVE%\bin;
Enregistrement des services Windows
Ouvrir une console PowerShell en mode administrateur, puis exécuter pour chaque instance :
# Instance principale
mysqld install MySQL_Master --defaults-file="E:\MySQL\mysql-master\my.ini"
# Instance secondaire
mysqld install MySQL_Slave --defaults-file="E:\MySQL\mysql-slave\my.ini"
Démarrer les services via :
net start MySQL_Master
net start MySQL_Slave
Paramétrage de l'instence principale
Modifier my.ini de l'instance principale :
[mysqld]
server_id = 1
port = 3307
log_bin = master-bin
log_bin_index = master-bin.index
relay_log = relay-bin
# Filtrage des bases répliquées
binlog_do_db = production_db
binlog_ignore_db = mysql,information_schema,performance_schema
Redémarrer le service pour appliquer les modifications.
Création du compte de réplication
Se connecter à l'instance principale :
mysql -u root -p --protocol=tcp --host=127.0.0.1 --port=3307
Créer un utilisateur dédié :
CREATE USER 'replica'@'127.0.0.1' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'127.0.0.1';
FLUSH PRIVILEGES;
Synchronisation initiale des données
Si la base production_db contient déjà des données, verrouiller temporairement les tables :
FLUSH TABLES WITH READ LOCK;
Exporter les données (via mysqldump depuis une autre console), puis déverrouiller :
UNLOCK TABLES;
Importer le dump sur l'instance secondaire avant de configurer la réplication.
Récupération des coordonnées binaires
Sur l'instance principale, exécuter :
SHOW MASTER STATUS;
Noter les valeurs File et Position, par exemple :
+------------------+----------+
| File | Position |
+------------------+----------+
| master-bin.00001 | 154 |
+------------------+----------+
Configuration de l'instance secondaire
Compléter le my.ini de l'instance secondaire :
[mysqld]
server_id = 2
port = 3308
log_bin = slave-bin
read_only = 1
Redémarrer le service, puis se connecter :
mysql -u root -p --protocol=tcp --host=127.0.0.1 --port=3308
Configurer la connexion vers le maître :
CHANGE MASTER TO
MASTER_HOST = '127.0.0.1',
MASTER_PORT = 3307,
MASTER_USER = 'replica',
MASTER_PASSWORD = 'SecurePass123!',
MASTER_LOG_FILE = 'master-bin.00001',
MASTER_LOG_POS = 154;
Activation et vérification
Démarrer le processus de réplication :
START SLAVE;
Vérifier l'état :
SHOW SLAVE STATUS\G
Les indicateurs critiques suivants doivent afficher Yes :
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Une valeur Connecting pour Slave_IO_Running indique généralement un problème d'authentification ou de connectivité. Consulter Last_IO_Error pour le diagnostic.
Commandes de gestion
| Action | Commande |
|---|---|
| Arrêter la réplication | STOP SLAVE; |
| Réinitialiser la configuraton | RESET SLAVE ALL; |
| Sauter une erreur | SET GLOBAL sql_slave_skip_counter = 1; |
Dépannage courant
Conflit de server_id : chaque instance doit avoir un identifient unique.
UUID identique : supprimer le fichier auto.cnf dans le répertoire data pour régénérer l'UUID.
Erreur de position binaire : vérifier que MASTER_LOG_POS correspond exactement à la valeur affichée par SHOW MASTER STATUS.