【问题标题】:Is there a way to watch a mysql database for changes using perl?有没有办法使用 perl 观察 mysql 数据库的更改?
【发布时间】:2011-05-24 01:07:38
【问题描述】:

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

【问题讨论】:

标签: mysql database perl inotify


【解决方案1】:

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

  1. 在数据库中创建一个审计表,并让触发器在那里写入相关信息;并让您的监视应用程序轮询审计表以获取新条目。您仍在轮询,但以一种不会对服务器造成太大影响的受控方式进行。
  2. 通过 UDF 触发 call an external app

【讨论】:

  • 这就是I commented already 6 days ago 已经存在的答案。享受你的赏金吧。
  • FWIW,我在注意到您的评论之前添加了这个答案(我确实赞成);我建议的第一个解决方案与您的不同。我真的没有抄袭。
  • @daxim:如果你想要赏金 - 你应该发表你的评论作为答案! ;-)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    如果更新相当少见/数量很少,但对它们的反应时间必须很快,这将特别有效。

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

    【讨论】:

    • 很遗憾,这不是一个选项,因为数据库是由我正在使用的其他一些 3rd 方程序更新的,而我正在编写的 perl 脚本不会更新数据库。
    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2016-03-10
    • 2019-10-26
    相关资源
    最近更新 更多