2008-09-18 8 views
2

Ok, je cours une configuration avec un seul maître et un certain nombre d'esclaves. Toutes les écritures passent par le maître et sont reproduites jusqu'aux esclaves qui sont utilisés strictement pour les lectures.Réplication MySQL Trigger & Procédure stockée

Maintenant, j'ai une procédure stockée (pas de fonction) qui est appelée par un déclencheur sur un insert. Selon les documents MySQL, pour les déclencheurs de réplication, consignez l'appel au déclencheur pendant que les procédures stockées enregistrent le résultat de la procédure stockée. Donc, ma question est, quand mon déclencheur est déclenché, va-t-il répliquer à la fois le déclencheur et les résultats de la procédure que le déclencheur appelle (entraînant l'exécution efficace de la procédure deux fois)? Ou va-t-il simplement répliquer le déclencheur, les esclaves ont-ils relancé la procédure stockée par eux-mêmes?

Merci

Répondre

6

MySQL 5.0 (et 5.1 MySQL avec le log binaire basé sur une instruction), seule la requête d'appel est consigné, donc dans votre cas, l'INSERT serait connecté.

Sur l'esclave, l'instruction INSERT sera exécutée, puis le trigger sera réexécuté sur l'esclave. Le déclencheur doit donc exister sur l'esclave, et en supposant qu'il le soit, il sera exécuté exactement de la même manière que le maître.

Dans MySQL 5.1, il y a une journalisation binaire basée sur les lignes, qui n'enregistrera que les lignes changées, ainsi le déclencheur ne sera pas re-déclenché sur l'esclave, mais toutes les lignes modifiées seront propagées.

0

En plus de Harrison excellente réponse:

  • En supposant que les bases de données sont synchronisées (schéma, les données, même version) pour commencer, il devrait simplement travailler
  • Si elle ne le fait pas, alors il peut-être que vous utilisez quelque chose de non déterministe dans vos requêtes ou déclencheur. Répare ça. Quelle que soit la manière dont vous utilisez la réplication, vous devez effectuer une surveillance pour vérifier que les esclaves sont toujours synchronisés. Sans surveillance, ils deviendront désynchronisés (subtilement) et vous ne les remarquerez pas. MySQL n'a pas de fonctionnalité intégrée automatique pour vérifier cela ou le réparer.
Questions connexes