1 - PRÉAMBULE

Lors d'une réunion, on m'a demandé comment mettre en place sur Mysql une réplication Maître/Maître entre 2 serveurs.

Je vous livre ici la version ligne de commande.

Pour la version phpmyadmin, c'est ici : Réplication Master/Master Phpmyadmin

J'ai besoin pour cela de 2 serveurs Mysql hébergés sur des machines virtuelles Centos 6.4.

Soit l'installation se fait en double en suivant cet article : Virtualisation 05 - Installation Centos 6.4

Soit vous avez comme moi une VM de référence et vous la clonée suivant cet article : Clonage de VM Centos

Sur les 2 VMs vous installez phpmyadmin comme ici : Installation phpmyadmin sur Centos

2 - ETAT DES LIEUX

2.1 - SERVEUR 1

  • nom = Centos_Mysql_Master1Slave2
  • ip = 192.168.0.151

2.2 - SERVEUR 2

  • nom = Centos_Mysql_Master2Slave1
  • ip = 192.168.0.152

3 - Création réplication Master1-Slave1

3.1 - Travail sur le Maître1

Se connecter au serveur :

mysql -u root -p

et saisir le mot de passe.

Connexion au serveur mysql

Créer un base avec la commande suivante :

CREATE DATABASE testreplication;

Lister les bases avec la commande : SHOW DATABASES;

Listes ddes bases

Le fichier /etc/my.cnf contient :

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nous allons rajouté ces lignes :

log-bin
binlog-do-db=testreplication  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

server-id=1

Pour obtenir au final

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema

log-bin
binlog-do-db=testreplication  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

server-id=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nous devons ajouter un utilisateur pour la réplication.

grant replication slave on *.* to Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. identified by 'slave';

Relancer le serveur mysql par la commande : service mysqld restart.

Se connecter au serveur mysql et taper les commandes suivantes :

  • FLUSH TABLES WITH READ LOCK;
  • SHOW MASTER STATUS;

Commandes sur serveur Maître 1

Les informations importantes sont :

  • File
  • Position

Puis libérer les tables par UNLOCK TABLES;

Faire une sauvegarde de la base par la commande : 

mysqldump -u root -p --create-options --master-data -B testreplication> /tmp/testreplication.SQL

Transférer le fichier sur le serveur Slave 1.

3.2 - Travail sur l'esclave (Slave1)

Dans un premier temps, se connecter au serveur Mysql et stopper le serveur Slave:

STOP SLAVE;

Se déconnecter et insérer la sauvegarde du serveur Maître 1:

mysql -u  root -p  < /tmp/testreplication.SQL

Se connecter sur le serveur Mysql et lister les databases:

SHOW DATABASES sur slave 1

 

Il faut modifier le fichier /etc/my.cnf qui contient :

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

nous rajoutons les lignes :

server-id=2

Pour obtenir ceci :

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema

server-id=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Relancer le serveur mysql par la commande : service mysqld restart.

 Se connecter au serveur Mysql et arrêter les threads esclaves par la commande :

STOP SLAVE;

Taper la commande :

CHANGE MASTER TO MASTER_HOST='192.168.0.151', MASTER_USER='replication', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysqld-bin.000004', MASTER_LOG_POS=107;

Les valeurs MASTER_LOG_FILE et MASTER_LOG_POS correspondent aux valeurs relevées sur le serveur maître avec la commande SHOW MASTER STATUS;

Relancer la réplication par :

START SLAVE;

4 - Test de la réplication

Sur le serveur Mysql Maître 1, taper :

USE testreplication;

puis :

CREATE TABLE contacts (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,data VARCHAR(100));

Vous pouvez voir que la table est bien crée en tapant :

texte

Voici ce que cela donne:

Liste des tables coté Maître

Se connecter sur le serveur Mysql Slave 1 et lister les tables:

Liste des tables coté Slave 1

 

La réplication fonctionne bien.

5 - Réplication Master 2/Slave 2

Pour mettre en place la réplication retour, il faut procéder a peu près de la même manière.

Sur le serveur Mysql du Master 2, nous devons ajouter :

log-bin
binlog-do-db=testreplication  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

au fichier /etc/my.cnf, afin d'obtenir:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=2
log-bin
binlog-do-db=testreplication  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Nous devons ajouter un utilisateur pour la réplication.

grant replication slave on *.* to Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. identified by 'slave';

Relancer le serveur mysql Maître 2 par la commande : service mysqld restart.

Sur le serveur Mysql du serveur Slave2, taper la commande :

CHANGE MASTER TO MASTER_HOST='192.168.0.152', MASTER_USER='replication', MASTER_PASSWORD='slave';

Relancer le serveur mysql Esclave 2 par la commande : service mysqld restart.

6 - Conclusion

Vous avez maintenant une réplication Master/Master opérationnelle.

Aucun commentaire