Question

Ok, je suis en train de lancer une configuration avec un seul maître et plusieurs esclaves. Toutes les écritures passent par le maître et sont répliquées sur les esclaves utilisés strictement pour les lectures.

Maintenant, j'ai une procédure stockée (pas de fonction) qui est appelée par un déclencheur sur un insert. Selon la documentation MySQL, pour les déclencheurs de réplication, enregistrez l'appel au déclencheur, tandis que les procédures stockées enregistrent en réalité le résultat de la procédure stockée.

Donc, ma question est la suivante: lorsque mon déclencheur est activé, est-ce qu'il répliquera à la fois le déclencheur et les résultats de la procédure appelée par le déclencheur (la procédure étant alors exécutée deux fois)? Ou va-t-il simplement reproduire le déclencheur pour que les esclaves exécutent à nouveau la procédure stockée?

Merci

Était-ce utile?

La solution

Dans MySQL 5.0 (et MySQL 5.1 avec une journalisation binaire basée sur des instructions), seule la requête appelante est consignée. Ainsi, dans votre cas, l'INSERT serait consigné.

Sur l'esclave, l'INSERT sera exécuté, puis le déclencheur sera réexécuté sur l'esclave. Le déclencheur doit donc exister sur l’esclave et, à supposer que ce soit le cas, il sera exécuté exactement de la même manière que le maître.

Dans MySQL 5.1, la journalisation binaire basée sur les lignes ne consignait que les lignes en cours de modification. Ainsi, le déclencheur ne serait pas réactivé sur l'esclave, mais toutes les lignes modifiées seraient toujours propagées.

Autres conseils

En plus de l'excellente réponse de Harrison:

  • En supposant que les bases de données soient synchronisées (schéma, données, même version), cela ne devrait fonctionner que
  • Si ce n'est pas le cas, il se peut que vous utilisiez quelque chose de non déterministe dans vos requêtes ou déclencheurs. Corrige ça.
  • Quelle que soit la manière dont vous utilisez la réplication, vous devez disposer d'une surveillance pour vérifier que les esclaves sont toujours synchronisés. Sans surveillance, ils seront désynchronisés (subtilement) et vous ne le remarquerez pas. MySQL n’a pas de fonction intégrée automatique permettant de vérifier cela ou de le corriger.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top