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

De Ikoula Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.