Réplication Mysql Master-Master – La bonne méthode

6 octobre 2014 Non Par Antony

 

http://stackoverflow.com/questions/2366018/how-to-re-sync-the-mysql-db-if-master-and-slave-have-different-database-incase-o

Il vous faudra au préalable avoir créé les users avec les droits de réplication

Sur le serveur A

Dans une console car il faudra maintenir la connexion pour tenir le verrou à l’écriture

$ mysql

mysql> RESET MASTER;
Query OK, 0 rows affected (0.37 sec)

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.10 sec)

mysql> SHOW MASTER STATUS;
+---------------------+----------+--------------+---------------------------------------------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB                                        |
+---------------------+----------+--------------+---------------------------------------------------------+
| A-mysql-bin.000001 |     5235 |              | mysql,performance_schema,information_schema,test         |
+---------------------+----------+--------------+---------------------------------------------------------+
1 row in set (0.00 sec)

puis dumper les bases souhaitées depuis un terminal par exemple
mysqldump -uroot -p --all-databases > /a/path/mysqldump.sql
puis enfin dans la console mysql
UNLOCK TABLES;

 

Sur le serveur B

STOP SLAVE;

importer le dump

mysql < mysqldump.sql
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST = 'serverA', MASTER_PORT = 3306, MASTER_USER = 'slaveuser',
MASTER_PASSWORD = 'xxxxx', MASTER_LOG_FILE = 'A-mysql-bin.000001', MASTER_LOG_POS = 5235;
SLAVE START;

On peut dors et déjà vérifier que la réplication se fait du serveur A vers le serveur B en ajoutant une db ‘bidon’ sur A elle apparaitra sur B. Pour la supprimer il faudra le faire depuis A (sur B ne doit se tenir aucune écriture)

 

Puis il suffit de vérouiller les table en READ sur serveur B et de faire la même chose dans l’autre sens

Sur B saisir dans mysql

mysql> RESET MASTER;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+---------------------+----------+--------------+---------------------------------------------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB                                        |
+---------------------+----------+--------------+---------------------------------------------------------+
| B-mysql-bin.000001 |      107 |              | mysql,performance_schema,information_schema,test         |
+---------------------+----------+--------------+---------------------------------------------------------+

Puis sur A
CHANGE MASTER TO MASTER_HOST = 'serverB', MASTER_PORT = 3306, MASTER_USER = 'slaveuser', MASTER_PASSWORD = 'xxxxxx', MASTER_LOG_FILE = 'B-mysql-bin.000001', MASTER_LOG_POS = 107;
SLAVE START;

A ce stade tout devrait être en ordre et la syncro devrait fonctionner dans les deux sens.

 

Sur B ne  pas oublier de lever le verrou

UNLOCK TABLES;