web-dev-qa-db-fra.com

Existe-t-il un moyen d'arrêter la réplication MySQL sur le maître?

Je veux que le maître arrête de répliquer les données sur l'esclave. Je sais que je peux faire ça sur l'esclave avec STOP SLAVE;, mais je me demande s'il y a moyen de le faire dans le master.

Une solution possible pourrait être de modifier le server_id à 0, mais dans ce cas, je devrai redémarrer mysql dans le maître pour que les modifications prennent effet.

Ce que je recherche, c'est une déclaration comme STOP MASTER;.

7
HalaKuwatly

Il n'existe pas de commande STOP MASTER; Ni de mécanisme manuel du maître pour arrêter la réplication. Vous devez aller sur chaque esclave et exécuter les éléments suivants:

  • STOP SLAVE; (Tue le fil IO et le fil SQL)
  • STOP SLAVE IO_THREAD; (Tue le fil IO uniquement)

L'exécution de l'un de ces éléments vous permettra d'obtenir les éléments suivants:

  • Enregistrement propre des coordonnées de réplication dans master.info
    • Master_Log_File
    • Read_Master_Log_Pos
    • Relay_Master_Log_file
    • Exec_Master_Log_Pos

Le fil IO est ce qui communique avec le maître. Tuer le thread IO du côté maître à l'aide de la commande KILL annulerait le thread IO sur chaque esclave. Cela pourrait corrompre l'enregistrement propre des coordonnées de réplication.

8
RolandoMySQLDBA

La façon la plus simple de procéder en ligne serait de révoquer tout REPLICATION SLAVE privilèges sur le maître pour tous les utilisateurs qui le possèdent.

Cela offre l'avantage supplémentaire de vous permettre d'être sélectif sur les esclaves que vous supprimez.

Une fois cela fait, recherchez les sessions de réplication existantes avec SHOW PROCESSLIST et tuez-les avec la commande KILL (ceux-ci peuvent tomber d'eux-mêmes après avoir révoqué les privilèges, mais je soupçonne que ce n'est pas le cas).

Vous devez avoir à l'esprit que, en utilisant cette approche, la réplication ne s'arrêtera pas complètement sur l'esclave, ce qui se passera est que le SLAVE IO_THREAD ne pourra pas obtenir de nouvelles instructions (requêtes) du maître, mais si vous avez finalement des requêtes que vous recevez déjà du maître (celles-ci sont enregistrées dans votre journal de relais) mais ne sont pas encore exécutées (vous pouvez vérifier si vous avoir des secondes derrière master pour voir si c'est le cas), cela n'empêchera pas ces requêtes de ne pas s'exécuter.

2
Nathan Jolly