Репликация триггеров и хранимых процедур MySQL

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

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

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

Спасибо

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
6 611
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

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