будут ли триггеры запускаться в подчиненном устройстве MySQL в одной репликации с несколькими подчиненными

#java #mysql #triggers #replication #slave

#java #mysql #триггеры #репликация #Подчинение

Вопрос:

Наш клиент использует один главный сервер с несколькими подчиненными устройствами (в кластере).

Теперь он хочет, чтобы мы написали несколько триггеров (только), которые запускаются на подчиненных устройствах, когда новые записи добавляются, обновляются или удаляются на подчиненных устройствах. Этот триггер должен запускать внешнюю Java-программу.

Возможно ли это? рекомендуется?

Как нам запустить Java-программу из триггера? Рекомендуется ли это / безопасно?

Какие-либо ошибки, о которых нужно позаботиться?

Комментарии:

1. MySQL не поддерживает Java как часть триггера или для запуска внутри сервера.

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

3. Вызов внешних программ изнутри сервера базы данных — это дыра в безопасности, а не отличная идея.

4. @Johan — Когда вы знаете, что делаете, вы являетесь владельцем сервера и единственным пользователем сервера, и если этого требует спецификация — это хорошая идея.

Ответ №1:

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

Вы можете выполнить внешнюю программу, используя sys_exec UDF, доступный в MySQL Forge (или по этой ссылке).

SELECT sys_exec('/path/to/program')

Просто остерегайтесь того, что делает программа, пока внешняя программа не вернет — запрос не завершится. Если это что-то, что выполняет дальнейшую обработку, я предлагаю создать какую-то систему очередей, прослушивающую порт, чтобы вы могли немедленно exit(0) позволить программе сделать свое дело и освободить поток mysql, чтобы запрос мог завершиться.