Blog

Do it quick ! Remettre en place une replication MySQL

Écrit le 05 11 2013 par Kévin MET _

On va se faire un petit Do it quick ! pour remettre en place une bonne vieille réplication MySQL des familles. Il existe la bonne vieille solution à base de SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; mais dans certains cas cela ne fonctionne pas car la réplication est cassée depuis longtemps et il y a eu plein de changements sur le master produisant un tas d'erreur de réplication. Pour palier à cette situation on va utiliser un outil que j'affectionne particulièrement, il s'agit de pt-table-sync. Cet outil permet de synchroniser des tables ou des bases d'un serveur à un ou plusieurs autres.

Dans ce "tutoriel" j'assume que la configuration de la réplication master/slave est déjà faite sur les deux serveurs SQL.

On commence par s'occuper du master


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

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

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000036 |     3375 |              |                  | 
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

On lock les tables le temps de refaire la synchro sur le slave. Il faut également conserver la sortie de la commande SHOW MASTER STATUS car elle va nous servir pour relancer le slave au bon endroit.

On va ensuite utiliser pt-table-sync pour synchroniser les tables depuis le master vers le slave.

Ceci est à exécuter depuis le master :


pt-table-sync --execute -u root --verbose h=localhost --no-check-slave --databases base1,base2,base3,etc h=slave.exemple.fr -p'motdepasseroot'

Pour résumé, avec cette commande lancée depuis le master on synchronise les bases base1, base2, base3 et etc sur le serveur slave.exemple.fr en utilisant le compte root.

Si vous n'avez pas envie d'utiliser pt-table-sync vous pouvez toujours utiliser mysqldump avec l'option --all-databases mais l'avantage de pt-table-sync est qu'il est, à mon avis, plus simple car il évite la copie via un scp du dump entre les serveurs.(oui en fait c'est surtout un truc de feignasse...)

Une fois que la synchro est finie, on peut débloquer les tables de notre master


mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

Il ne reste plus qu'à lancer notre slave. Connecter vous sur le CLI MySQL de votre slave et entrez les commandes suivantes :


mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)

mysql> RESET SLAVE;
Query OK, 0 rows affected (0.81 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000036', MASTER_LOG_POS=3375;
Query OK, 0 rows affected (0.46 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

Pour vérifier que tout fonctionne on peut faire un :


mysql> SHOW SLAVE STATUS\G;
♥ Partage sur tes réseaux sociaux ♥
Kévin MET
Kévin MET

Auteur de ce blog et gérant de la société MNT-TECH, je publie sur ce blog lorsque le temps me le permet et lorsqu'un sujet qui me parait intéressant n'a pas encore été abordé en français. Toutes les informations techniques présentes sur cette page peuvent être réutilisées moyennant le fait de citer la source.