我有一个由两个完全独立的服务器应用程序共享的数据库,这些应用程序根本无法相互通信。假设这两个应用程序称为A、和B。每当A更新表在共享DB中时,B应该很快就会知道存在某种更改(请记住*A和B不能相互通信)。此外,我希望避免使用setInterval类型的方法,在这种方法中,我每隔x秒查询一次。一开始,我以为会有一种方法来“观察”MySQL内部的变化,但似乎没有。实现这一目标的最佳方法是什么?我正在使用Node.js、MySQL Workbench和PHP。
TDLR:
当检测到更改时,我正试图找到一种“监视”任何表更改和触发操作(可能像http请求)的最佳方法。我正在使用MySQL工作台和Node.js。我真的想避免使用setInterval类型的方法。有什么建议吗?
发布于 2022-09-10 00:12:00
您需要的是更改数据捕获(CDC)功能。在MySQL中,特性是二进制日志。
一些工具(如德贝兹 )用于监视和过滤二进制日志,并将其转换为消息队列中的事件(例如Kafka)。
上面的一些注释建议使用触发器,但这是一个有问题的想法,因为触发器在数据更改期间触发,而该更改的事务尚未提交。如果在触发触发器时尝试调用http请求或任何其他应用程序操作,则即使随后回滚数据更改,也有执行该操作的风险。这会让人很困惑。
此外,也没有一种从触发器运行应用程序操作的好方法。它们用于进行从属数据更改,而不是事务范围以外的操作。
使用二进制日志作为更改的记录更安全,因为更改在提交之前不会写入二进制日志。此外,二进制日志包含对所有表的所有更改。
然而,使用触发器解决方案,您必须为每个表创建三个触发器(插入、更新和删除)。另外,MySQL不支持DDL语句的触发器(创建、更改、删除、截断等)。
https://stackoverflow.com/questions/73667483
复制相似问题