MySQL Configuration · 4 min read · Nov 20, 2025
Installation d'un cluster Web, Email et MySQL sur Debian 8.4 Jessie avec ISPConfig 3.1 - Page 2
5. Réplication MySQL Maître-Maître
5.1 Préparer le Serveur1
Connectez-vous à MySQL et créez un compte spécifiquement pour la réplication dans MySQL. J’utilise un utilisateur séparé pour la réplication afin de minimiser la possibilité de compromission d’autres comptes (nom d’utilisateur et mot de passe sont stockés en texte clair dans le fichier ou la table d’informations du maître) :
CREATE USER 'slaveuser2'@'server2.example.tld' IDENTIFIED BY 'slave_user_password';
CREATE USER 'slaveuser2'@'192.168.0.106' IDENTIFIED BY 'slave_user_password';
CREATE USER 'slaveuser2'@'2001:db8::2' IDENTIFIED BY 'slave_user_password';et accordez le privilège REPLICATION SLAVE :
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser2'@'server2.example.tld';
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser2'@'192.168.0.106';
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser2'@'2001:db8::2';
QUIT;Apportez quelques modifications pour la réplication à votre configuration MySQL :
vi /etc/mysql/my.cnfRecherchez la section qui commence par [mysqld], et mettez les options suivantes dedans (en commentant toutes les options conflictuelles existantes) :
[...]
[mysqld]
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_format = mixed
sync_binlog = 1
relay-log = slave-relay.log
relay-log-index = slave-relay-log.index
slave_skip_errors = 1007,1008,1050, 1396
bind-address = ::et redémarrez MySQL par la suite :
service mysql restartJe passe simplement certains erreurs esclave. J’ai expliqué cela sur mon blog :
- 1007 = Impossible de créer la base de données ‘%s’ ; la base de données existe
- 1008 = Impossible de supprimer la base de données ‘%s’ ; la base de données n’existe pas
- 1050 = La table ‘%s’ existe déjà
- 1396 = L’opération %s a échoué pour %s - Impossible de créer l’utilisateur
vous pouvez trouver la liste des codes d’erreur MySQL ici : Codes d’erreur et messages du serveur
5.2 Préparer le Serveur2
Apportez quelques modifications pour la réplication à votre configuration MySQL :
vi /etc/mysql/my.cnfRecherchez la section qui commence par [mysqld], et mettez les options suivantes dedans (en commentant toutes les options conflictuelles existantes) :
[...]
[mysqld]
server-id = 2
log_bin = mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_format = mixed
sync_binlog = 1
slave_skip_errors = 1007,1008,1050, 13965.3 Créer un instantané des bases de données existantes sur le serveur1
Dump les bases de données sur serveur1 et entrez le mot de passe root MySQL :
mysqldump -p --all-databases --allow-keywords --master-data --events --single-transaction > /root/mysqldump.sqlCopiez le dump sur serveur2 :
scp /root/mysqldump.sql [email protected]:/root5.4 Importer le dump sur serveur2
mysql -u root -p < /root/mysqldump.sqlArrêtez mysql sur serveur2 :
service mysql stopCopiez le fichier par défaut pour MySQL de serveur1 à serveur2. Passez à serveur1 et exécutez
scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnfDémarrez MySQL sur serveur2 :
service mysql startet connectez-vous à MySQL pour définir le serveur maître avec :
CHANGE MASTER TO MASTER_HOST="server1.example.tld", MASTER_USER="slaveuser2", MASTER_PASSWORD="slave_user_password";Démarrez l’esclave :
START SLAVE;et vérifiez l’état de l’esclave avec
SHOW SLAVE STATUS \G
Le résultat sera quelque chose comme
************************* 1. row ***********************
Slave_IO_State: En attente que le maître envoie un événement
Master_Host: server1.example.tld
Master_User: slaveuser2
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 109989
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 110276
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Oui
Slave_SQL_Running: Oui
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 109989
Relay_Log_Space: 110574
Until_Condition: Aucun
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Non
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: Non
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Non
Gtid_IO_Pos:Si “Seconds Behind Master” n’est pas 0, attendez que l’esclave ait lu toutes les données du maître (répétez simplement la commande pour obtenir la valeur actuelle). Assurez-vous que serveur2 utilise le bon journal maître et la bonne position de journal.
Sur serveur1, exécutez dans MySQL :
SHOW MASTER STATUS \G*********************** 1. row ************************* File: mysql-bin.000991 Position: 69185362 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)
Et comparez les coordonnées du journal binaire de réplication maître.
Nous exécutons une réplication MySQL Maître-Esclave où serveur1 est le maître et serveur2 l’esclave.
5.5 Réplication MySQL Maître-Maître
Créez l’utilisateur MySQL pour la réplication et accordez le privilège dans MySQL :
CREATE USER 'slaveuser1'@'server1.example.tld' IDENTIFIED BY 'slave_user_password';
CREATE USER 'slaveuser1'@'192.168.0.105' IDENTIFIED BY 'slave_user_password';
CREATE USER 'slaveuser1'@'2001:db8::1' IDENTIFIED BY 'slave_user_password';
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser1'@'server1.example.tld';
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser1'@'192.168.0.105';
GRANT REPLICATION SLAVE ON *.* TO 'slaveuser1'@'2001:db8::1';
QUIT;Apportez quelques modifications pour la réplication à votre configuration MySQL sur serveur2 :
vi /etc/mysql/my.cnfRecherchez la section qui commence par [mysqld], et mettez les options suivantes dedans (en commentant toutes les options conflictuelles existantes) :
[...]
[mysqld]
[...]
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
relay-log = slave-relay.log
relay-log-index = slave-relay-log.indeet redémarrez MySQL :
service mysql restartConnectez-vous à MySQL et obtenez les coordonnées du journal binaire maître :
SHOW MASTER STATUS \G************************* 1. row *************************
File: mysql-bin.000002
Position: 326
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)Connectez-vous à MySQL sur serveur1 et définissez le serveur maître avec
CHANGE MASTER TO MASTER_HOST="server2.example.tld", MASTER_USER="slaveuser1", MASTER_PASSWORD="slave_user_password", MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=326;Démarrez l’esclave :
START SLAVE;et vérifiez l’état de l’esclave avec
SHOW SLAVE STATUS \G
Vérifiez que l’esclave fonctionne :
Slave_IO_Running: Oui
Slave_SQL_Running: Oui
Si votre réplication cesse de fonctionner, vous pouvez trouver des informations supplémentaires ici :
- Comment ignorer certaines erreurs dans la réplication MySQL
- redémarrer la réplication maître-maître mysql
- mysql-réplication – Impossible d’analyser l’entrée du journal de relais
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.