Триггер MySQL и репликация хранимых процедур - PullRequest
2 голосов
/ 18 сентября 2008

Хорошо, я запускаю установку с одним ведущим и несколькими ведомыми. Все записи проходят через мастер и копируются в подчиненные, которые используются исключительно для чтения.

Теперь у меня есть хранимая процедура (не функция), которая вызывается триггером на вставке. Согласно документации MySQL, для триггеров репликации регистрируйте вызов триггера, в то время как хранимые процедуры фактически регистрируют результат хранимой процедуры.

Итак, мой вопрос: когда мой триггер сработает, будет ли он реплицировать как триггер, так и результаты процедуры, которую вызывает триггер (в результате процедура будет эффективно запущена дважды)? Или он просто скопирует триггер, чтобы подчиненные устройства самостоятельно запускали хранимую процедуру?

Спасибо

Ответы [ 2 ]

6 голосов
/ 18 сентября 2008

В MySQL 5.0 (и MySQL 5.1 с бинарным ведением журнала на основе операторов) регистрируется только вызывающий запрос, поэтому в вашем случае будет добавлен INSERT.

На ведомом устройстве будет выполнена ВСТАВКА, а затем на ведомом устройстве будет повторно запущен триггер. Таким образом, триггер должен существовать на ведомом устройстве, и при условии, что он существует, он будет выполнен точно так же, как и ведущий.

В MySQL 5.1 есть двоичное ведение журнала на основе строк, которое будет регистрировать только измененные строки, поэтому триггер не будет повторно запущен на ведомом устройстве, но все измененные строки все равно будут распространены.

0 голосов
/ 18 сентября 2008

В дополнение к отличному ответу Харрисона:

  • Предполагая, что базы данных синхронизированы (схема, данные, та же версия) для начала, они должны просто работать
  • Если это не так, возможно, вы используете что-то недетерминированное в своих запросах или триггере. Исправьте это.
  • Независимо от того, как вы используете репликацию, вам необходим мониторинг, чтобы убедиться, что ведомые устройства всегда синхронизированы. Без какого-либо мониторинга они станут не синхронизированы (тонко), и вы не заметите. MySQL не имеет автоматической встроенной функции для проверки или исправления.
...