Вопрос

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

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

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

Спасибо

Это было полезно?

Решение

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

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

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

Другие советы

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

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