7

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

4

3 回答 3

6

如果您将TRIGGER添加到您感兴趣的表中,您可以使用它来提醒正在观看的应用程序。您可以通过多种方式做到这一点:

  1. 在数据库中创建一个审计表,并让触发器在那里写入相关信息;并让您的监视应用程序轮询审计表以获取新条目。您仍在轮询,但以一种不会对服务器造成太大影响的受控方式进行。
  2. 让触发器通过 UDF调用外部应用程序。
于 2010-12-17T13:09:50.793 回答
1

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

于 2010-12-11T20:07:15.637 回答
0

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

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

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

于 2010-12-11T20:16:36.687 回答