Configuration de la réplication maître-esclave MySQL sur une seule machine Windows

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_MASTER pointant vers E:\MySQL\mysql-master
  • MYSQL_SLAVE pointant vers E:\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.

Étiquettes: MySQL réplication Windows Master-Slave database administration

Publié le 25 août à 00h26