La réplication maître-esclave permet de synchroniser les données d'une base de données principale (maître) vers une ou plusieurs bases de données secondaires (esclaves).
Principe de fonctionnement
- Les modificasions de données sur le serveur maître sont enregistrées dans un journal binaire (binary log).
- Les serveurs esclaves récupèrent ces journaux binaires et les stockent dans leurs propres journaux de relais (relay logs).
- Les esclaves lisent les événements des journaux de relais et les appliquent à leurs propres données, assurant ainsi la synchronisation.
Avantages et cas d'utilisation
- Sauvegarde à distance : Permet de disposer de copies de sécurité des données sur des sites géographiquement distincts.
- Haute disponibilité : En cas de défaillance du serveur maître, un serveur esclave peut prendre le relais.
- Répartition de charge : Les requêtes de lecture peuvent être distribuées entre le maître et les esclaves pour améliorer les performances.
Configuration et exemple
Configuration du serveur maître
Modifiez le fichier de configuraton my.cnf du serveur maître :
# Nom du fichier journal binaire
log-bin=master-server-bin
# Format du journal binaire (ROW, STATEMENT, ou MIXED)
binlog-format=ROW
# Identifiant unique du serveur (doit être différent sur chaque serveur)
server-id=1
# Spécifier la ou les bases de données à répliquer (optionnel)
# binlog-do-db=ma_base_de_donnees
Configuration du serveur esclave
Modifiez le fichier de configuration my.cnf du serveur esclave :
# Identifiant unique du serveur (doit être différent sur chaque serveur)
server-id=2
# Les autres paramètres comme log-bin et binlog-format doivent correspondre au maître si configurés
# log-bin=slave-server-bin
# binlog-format=ROW
Exemple de confiugration
Environnement :
- Système d'exploitation : CentOS 6.5
- Version MySQL : 5.6
- Serveur Maître : 192.168.1.10
- Serveur Esclave : 192.168.1.11
1. Installation de MySQL (si nécessaire)
Assurez-vous que MySQL n'est pas déjà installé ou désinstallez les versions existantes :
# Vérifier les paquets MySQL installés
yum list installed | grep mysql
# Désinstaller si nécessaire
yum -y remove mysql-libs.x86_64
# Ajouter le dépôt MySQL 5.6
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm
# Vérifier les dépôts disponibles
yum repolist all | grep mysql
# Installer MySQL Server
yum install mysql-community-server
# Démarrer le service MySQL
service mysqld start
# Connexion initiale (pas de mot de passe par défaut)
mysql -uroot -p
# Définir un mot de passe pour l'utilisateur root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD('votre_mot_de_passe') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;
2. Configuration du serveur maître
(a) Créer un utilisateur pour la réplication sur le serveur esclave :
mysql -uroot -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'192.168.1.11' IDENTIFIED BY 'mot_de_passe_replicator';
mysql> FLUSH PRIVILEGES;
(b) Modifier /etc/my.cnf sur le maître et ajouter/modifier les sections suivantes sous [mysqld] :
[mysqld]
log-bin=master-server-bin
binlog-format=ROW
server-id=1
# binlog-do-db=ma_base_de_donnees
3. Configuration du serveur esclave
Modifier /etc/my.cnf sur l'esclave et ajouter/modifier les sections suivantes sous [mysqld] :
[mysqld]
server-id=2
# binlog-format=ROW # Doit être identique au maître
4. Redémarrage et configuration de la réplication
(a) Redémarrer le service MySQL sur le maître :
service mysqld restart
(b) Obtenir le statut du journal binaire du maître :
mysql -uroot -p
mysql> SHOW MASTER STATUS;
-- Noter le nom du fichier (File) et la position (Position)
(c) Redémarrer le service MySQL sur l'esclave :
service mysqld restart
(d) Configurer la connexion au maître sur l'esclave :
mysql -uroot -p
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.10',
-> MASTER_USER='replicator',
-> MASTER_PASSWORD='mot_de_passe_replicator',
-> MASTER_LOG_FILE='master-server-bin.000001', -- Remplacer par la valeur de SHOW MASTER STATUS
-> MASTER_LOG_POS=123; -- Remplacer par la valeur de SHOW MASTER STATUS
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;
Vérifiez que Slave_IO_Running et Slave_SQL_Running sont tous deux à Yes.
Important : Assurez-vous que le pare-feu sur le serveur maître autorise les connexions entrantes depuis le serveur esclave sur le port MySQL (généralement 3306).
# Arrêter temporairement le pare-feu (à des fins de test)
service iptables stop
# Désactiver le pare-feu au démarrage (pour une désactivation permanente)
chkconfig iptables off
5. Vérification
Créez une base de données, une table, insérez des données sur le serveur maître et vérifiez qu'elles apparaissent sur le serveur esclave.