Есть ли способ следить за изменениями в базе данных mysql с помощью perl? - PullRequest
7 голосов
/ 11 декабря 2010

Я ищу решение, похожее на метод inotify для отслеживания изменений.Мне известно, что я могу посмотреть файл binlog базы данных mysql и выполнить запросы, чтобы выбрать новые результаты, но это кажется очень неэффективным и не элегантным;как и просто выполнение множества запросов в цикле в ожидании новых результатов.

Ответы [ 3 ]

6 голосов
/ 17 декабря 2010

Если вы добавите TRIGGER к интересующим вас таблицам, вы можете использовать это для оповещения приложения для просмотра. Вы можете сделать это несколькими способами:

  1. Создайте таблицу аудита в базе данных и сделайте так, чтобы триггер записал в нее соответствующую информацию; и ваше приложение для просмотра опрашивает таблицу аудита на предмет новых записей. Вы все еще опрашиваете, но контролируемым образом, который не будет слишком сильно бить по серверу.
  2. Пусть триггер вызывает внешнее приложение через UDF.
1 голос
/ 11 декабря 2010

Что касается таблиц MyISAM, вы можете посмотреть information_schema.TABLES.UPDATE_TIME. Это избавит вас от опроса всех таблиц, которые вас интересуют. Для InnoDB лучше всего смотреть бинлог.

0 голосов
/ 11 декабря 2010

Другой подход заключается в том, чтобы сделать опрос / сигнал вместо опроса БД.Если какой-либо процесс обновляет базу данных, уведомите свой код Perl о том, что обновление было выполнено через любой выбранный вами IPC (черт возьми, файл журнала, к которому добавляется имя изменяемой таблицы, вполне может помочь).

Это особенно эффективно, если обновления довольно редки / малы по объему, но время реакции на них должно быть быстрым.

Дополнительным преимуществом является переносимость - работает для любого бэкэнда MySQL или для любого другого механизма БД.

...