Configuration de l’esclave MySQL
Objectif principal
Cet article explique pas à pas comment configurer un serveur MySQL secondaire (« esclave ») pour répliquer une base de données depuis un serveur principal (« master »). Il couvre la configuration de my.cnf, l’import d’un dump SQL, la commande CHANGE MASTER TO avec SSL et les vérifications post-démarrage.
Prérequis rapides
- Accès root ou équivalent sur le serveur esclave.
- Dump SQL cohérent (snapshot.sql) obtenu depuis le master.
- Compte utilisateur de réplication créé sur le master (par ex. slave_user).
- Si vous utilisez SSL : certificats CA/client/clé présents sur l’esclave.
1. Ouvrir la configuration de MySQL sur l’esclave
Éditez /etc/my.cnf et assurez-vous d’avoir les paramètres essentiels dans la section [mysqld] : server-id, master-connect-retry, replicate-do-db.
server2:
vi /etc/my.cnf
| [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 ssl server-id=2 master-connect-retry=60 replicate-do-db=exampledb [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
|
Important: la valeur de server-id doit être unique et différente de celle du master.
2. Redémarrer MySQL
Après modification, redémarrez le service MySQL :
/etc/init.d/mysqld restart
3. Créer la base vide sur l’esclave
Avant d’activer la réplication, créez une base de données vide pour recevoir le dump :
mysql -u root -p
Puis, dans le shell MySQL :
CREATE DATABASE exampledb;
quit;
4. Importer l’instantané SQL
Arrêtez le processus esclave, placez-vous dans /tmp et importez snapshot.sql :
/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave
cd /tmp
mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql
Reconnectez-vous ensuite au serveur MySQL :
mysql -u root -p
5. Configurer la connexion au master
Exécutez la commande CHANGE MASTER TO en remplaçant chaque valeur par celles obtenues sur le master via SHOW MASTER STATUS; :
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=3096416, MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/mysql/newcerts/client-key.pem';
Explication des paramètres principaux
- MASTER_HOST : IP ou nom d’hôte du master (ex. 192.168.0.100).
- MASTER_USER : utilisateur créé sur le master avec privilèges de réplication.
- MASTER_PASSWORD : mot de passe de MASTER_USER.
- MASTER_LOG_FILE et MASTER_LOG_POS : fournis par SHOW MASTER STATUS; sur le master.
- MASTERSSL et MASTER_SSL* : active et indique les chemins des certificats pour une connexion SSL.
6. Démarrer l’esclave et vérifier le statut
Démarrez la réplication sur l’esclave :
START SLAVE;
Puis vérifiez l’état :
SHOW SLAVE STATUS \G
Critères d’acceptation
- Slave_IO_Running : Yes
- Slave_SQL_Running : Yes
- Si SSL activé : Master_SSL_Allowed, Master_SSL_CA_File, Master_SSL_Cert et Master_SSL_Key doivent contenir des valeurs.
Exemple de sortie attendue (extrait) :
mysql> SHOW SLAVE STATUS \G
* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3096416
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: exampledb
…
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/newcerts/ca-cert.pem
Master_SSL_Cert: /etc/mysql/newcerts/client-cert.pem
Master_SSL_Key: /etc/mysql/newcerts/client-key.pem
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
Après vérification, quittez le shell MySQL :
quit;
C’est tout. Dorénavant, toute modification de exampledb sur le master sera répliquée vers exampledb sur l’esclave. Testez en insérant des données sur le master.
Boîte à outils rapide et heuristiques
- Toujours prendre un dump cohérent (instantané) du master avant de vous connecter l’esclave.
- Assurez-vous que server-id diffère entre master et esclave.
- Si les logs indiquent une erreur de position (Errno 1236 ou similaire), vérifiez MASTER_LOG_FILE et MASTER_LOG_POS.
- Pour dépanner, consultez /var/log/mysqld.log et /var/log/syslog.
Checklist par rôle
DBA
- Vérifier SHOW MASTER STATUS; sur le master et noter File/Position.
- Créer l’utilisateur de réplication avec REPLICATION SLAVE.
- Vérifier cohérence du dump et effectuer l’import.
Administrateur système
- Copier les certificats SSL au bon emplacement et sécuriser les permissions (chmod 600).
- Ouvrir le port 3306 entre master et esclave si besoin.
- Vérifier l’uptime et les logs du service MySQL après redémarrage.
Développeur
- Tester l’intégrité applicative après réplication (selects, inserts, transactions).
- Vérifier Seconds_Behind_Master pour observer le retard.
Dépannage courant et contre-exemples
Cas fréquent : Slave_IO_Running = No
- Cause : mauvaises informations MASTER_HOST/USER/PASSWORD ou réseau bloqué.
- Action : tester la connectivité (telnet/ss) et re-valider credentials.
Cas fréquent : Slave_SQL_Running = No
- Cause : erreur SQL appliquée (incohérence schéma, contraintes).
- Action : inspecter Last_Error dans SHOW SLAVE STATUS \G et corriger le problème, éventuellement utiliser SET GLOBAL sql_slave_skip_counter = 1; puis START SLAVE.
Quand la réplication ne convient pas : pour des scénarios multi-maître ou géo-distribués, envisagez des solutions plus modernes comme MySQL Group Replication ou Galera.
Diagramme décisionnel pour démarrer la réplication
flowchart TD
A[Disposer d'un dump cohérent ?] -->|Oui| B[Importer le dump sur l'esclave]
A -->|Non| C[Prendre snapshot cohérent sur le master]
B --> D[Configurer /etc/my.cnf et server-id]
D --> E[Redémarrer MySQL]
E --> F[Configurer CHANGE MASTER TO avec paramètres du master]
F --> G[START SLAVE]
G --> H{SHOW SLAVE STATUS}
H -->|Slave_IO_Running & Slave_SQL_Running = Yes| I[OK : réplication active]
H -->|Autre| J[Debugger logs et paramètres]
Fact box
- Port MySQL par défaut : 3306
- Fichiers courants : my.cnf, mysql-bin. (logs binaires), mysqld-relay-bin.
- Paramètres indispensables : server-id, replicate-do-db, MASTER_LOG_FILE, MASTER_LOG_POS
- Certificats SSL : CA, client-cert, client-key (si SSL=1)
Compatibilité et notes locale
- Les commandes fonctionnent sur MySQL 5.6–8.x, mais certains paramètres ou comportements peuvent varier selon la version.
- Sur CentOS/RHEL, le chemin du service et des logs peut différer ; adaptez /etc/init.d/mysqld et /var/log/mysqld.log selon votre distribution.
Résumé
- Éditez /etc/my.cnf, redémarrez MySQL et créez la base vide.
- Importez le dump SQL, configurez CHANGE MASTER TO (avec SSL si nécessaire), puis lancez START SLAVE.
- Vérifiez SHOW SLAVE STATUS \G et assurez-vous que Slave_IO_Running et Slave_SQL_Running sont Yes.
Liens utiles
- MySQL: http://www.mysql.com/
- CentOS: http://www.centos.org/