Détecter, préparer et rétablir une réplication Mysql basculée

De Ikoula Wiki
Jump to navigation Jump to search

fr:Détecter, préparer et rétablir une réplication Mysql basculée he:לזהות, להכין ולשחזר הטיה של Mysql שכפול ro:Detectarea, pregăti şi restaura o înclinare Mysql replication ru:Обнаружение, подготовка и восстановление наклона репликации Mysql pl:Wykrywanie, przygotować i przywrócić tilt replikacji Mysql ja:検出し、準備し、チルト Mysql レプリケーションを復元 ar:كشف، وإعداد واستعادة إمالة النسخ المتماثل الخلية zh:检测、 准备和还原倾斜 Mysql 复制 de:Erkennen, vorzubereiten und eine Neigung Mysql Replikation wiederherstellen nl:Detecteren, het voorbereiden en het herstel van een tilt Mysql replicatie it:Rilevare, preparare e ripristinare un tilt replica di Mysql pt:Detectar, preparar e restaurar uma inclinação replicação do Mysql es:Detectar, preparar y restaurar una inclinación replicación Mysql en:Detect, prepare and restore a tilt Mysql replication

Sous Debian8

Vous avez mis en place un système de réplication de votre base de données Mysql grâce à une configuration en master/slave. Quand un problème a lieu sur le serveur maître, c'est le serveur esclave (slave) qui prend le relai. Cependant il faut dans un premier temps constater que cette bascule a bien eu lieu.

Détection

  • Selon votre niveau de service, vous avez peut-être un monitoring du bon fonctionnement de la réplication, vous êtes prévenus par le support en cas de bascule.
  • En cas de bascule du serveur master au serveur slave, l'ip de ce dernier sera automatiquement changée afin de répondre a la place du serveur master
  • Le volume de la BDD slave sera plus important et contiendra les dernières informations enregistrées.
  • Par commande sur la BDD :

Connectez vous a la BDD:

   mysql -u votre_utilisateur -p votre_mot_de_passe

Puis vérifiez l'état du serveur master:

   show master status\G

Préparer

Avant d'effectuer les commandes qui vont suivre, planifiez l'opération ! Préférez une plage horaire ou la sollicitation des bases de données est a son minima. Faites en sorte que votre BDD ne soit pas du tout modifiée en mettant également votre site en maintenance

Il ne doit absolument pas y avoir d'écriture sur la BDD SLAVE le temps de l'intervention !

> En cas d'écriture pendant l'intervention, voici les conséquences :

  • Réplicat désynchronisé
  • Des données peuvent être perdues ou corrompues

Empêcher l'écriture

Pour empêcher l'écriture sur une BDD, il faut la mettre en lecture seule (read-only). Ce qui aura pour effet de bloquer les requêtes d'écriture sur la BDD.

Sur SLAVE

   FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;

Créer le dump

Une fois le slave en read-only, vous pourrez faire un DUMP de ses tables en toute sécurité: Sur SLAVE

   mysqldump --skip-add-locks --single-transaction -u votre_utilisateur -p votre_mot_de_passe --all-databases --ignore-table=mysql.user > /destination/de/depart/mon/backup.sql

Remplacez évidemment /destination/de/mon/backup.sql par votre destination habituelle de backup. Par convention on note la date sous format backupDDMMAAAA.sql pour pouvoir s'y retrouver :)

Envoi du dump

Dans la mesure ou les serveurs SLAVE et MASTER sont distants, vous devez transmettre le fichier DUMP de SLAVE à MASTER. Il existe de plusieurs façons de procéder a ce transfert de fichier, mais ici nous détaillerons l'utilisation de SCP qui permet de faire des copies en utilisant le service SSH.

  • login1 : login ssh machine SLAVE
  • login2 : login ssh machine MASTER
  • Serveur1 : IP ou Hostname machine SLAVE
  • Serveur2 : IP ou Hostname machine MASTER
  • Chemin/Fichier 1 : /destination/de/depart/de/mon/backup.sql
  • Chemin/Fichier 2 : /destination/darrivee/de/mon/backup.sql
   scp Login1@Serveur1:Chemin/Fichier1 Login2@Serveur2:Chemin/Fichier2

Importer le dump

Puis l'importer dans la BDD Master afin de synchroniser les 2 BDD. Sur MASTER

   mysql -u votre_utilisateur -p votre_mot_de_passe < /destination/de/mon/backup.sql

Rétablir la réplication

Sur le serveur MASTER: Vous avez besoin d'informations provenant du serveur master, exécutez donc la commande:

   echo "show master status\G" | mysql -u votre_utilisateur -p votre_mot_de_passe

Garder ces deux lignes de côté :

  • File: mysql-bin.1X1X1X
  • Position: 2X2X2X2X2

Sur SLAVE Actualisez les clauses MASTER_LOG_FILE et MASTER_LOG_POS par les informations de la commande précédente.

  • MASTER_LOG_FILE étant File:
  • MASTER_LOG_POS étant Position
   stop slave; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.1X1X1X', MASTER_LOG_POS=2X2X2X2X2;start slave;


Test et finalisation

Pour vérifier la mise en place de cette réplication utilisez sur le SLAVE:

   echo "show slave status\G" | mysql -u votre_utilisateur -p votre_mot_de_passe

Vérifiez ces lignes :

  • Slave_IO_Running sur Yes
  • Slave_SQL_Running sur Yes
  • Seconds_Behind_Master a 0

Si tout correspond la mise en place de la réplication s'est bien déroulée. Retirer la restriction lecture seule sur votre bdd SLAVE:

  SET GLOBAL read_only = OFF;UNLOCK TABLES;

Vous pouvez redémarrer tous vos services utilisant les Bdd.

Vérifiez leur bonne exécution grâce a la commande suivante en remplaçant "votreservice" par celui concerné. exemple: votre serveur web apache : "apache2" votre SGBD Mysql : "mysql"

  systemctl  status "votreservice".service

Cette documentation a été crée a partir de la documentation interne et de la documentation officielle Mysql


Vous n'êtes pas autorisé à publier de commentaire.