有没有办法使用perl观察mysql数据库的变化?

时间:2010-12-11 19:45:13

标签: mysql database perl inotify

我正在寻找类似于观察文件更改的inotify方法的解决方案。我知道我可以看到mysql数据库的binlog文件并运行查询来挑选出新的结果,但这看起来非常低效且不优雅;就像在循环中大量查询等待新结果一样。

3 个答案:

答案 0 :(得分:6)

如果您将TRIGGER添加到您感兴趣的表格中,则可以使用它来提醒观看的应用程序。你可以通过多种方式实现这一目标:

  1. 在数据库中创建一个审计表,并让触发器在那里写入相关信息;并让您的观察应用程序轮询审计表以查找新条目。你仍在进行民意调查,但是以一种无法控制的方式进行投票。
  2. 通过UDF触发call an external app

答案 1 :(得分:1)

就MyISAM表而言,您可以观看information_schema.TABLES.UPDATE_TIME。这样可以避免轮询你感兴趣的所有表。对于InnoDB,看binlog是我能想到的最好的。

答案 2 :(得分:0)

另一种方法是执行推/信号而不是数据库轮询。让任何进程更新数据库,通过您选择的任何IPC通知您的Perl代码更新(哎呀,附加到正在更改的表名称的日志文件可能做得很好)。

如果更新相当稀少/低音量但对它们的反应时间必须很快,这尤其有效。

另一个好处是可移植性 - 适用于任何MySQL后端或任何其他数据库引擎。