【发布时间】:2015-09-24 14:17:01
【问题描述】:
我正在尝试使用MySQL Replication Listener Library 在 HostA 和 HostB 之间进行数据复制。
复制基于行以外的语句。我知道 MySQL 本身有这样的内置功能,但我想自己做 --- 从 HostA 的 bin 日志中读取所有行更改并将所有这些更改应用到 HostB。
我遇到的问题是,我暂时无法禁用触发器,这会导致数据不同步。
举个例子,假设要同步的数据库是TestSyncDB,里面有两个表,分别是Data和DataOp。 Data 表有一个触发器,一旦将一条记录插入到该表中,触发器就会为 DataOp 生成一条新记录。
现在在HostA.TestSyncDB.Data中插入了一条新记录,因为有触发器,所以实际上会有两条记录添加到数据库中,复制侦听器库会向我返回两个查询,类似于:
- 插入 HostA.TestSyncDB.Data 值 (...)
- 插入 HostA.TestSyncDB.DataOp 值 (...) // 通过触发器
问题是,如果我将这两个查询重播到 HostB,HostA.TestSyncDB 中的表中会添加 三个 新记录,因为触发器。那么数据永远不会是正确的。
那么如何解决呢?是否可以暂时禁用触发器?如果没有,如何像 MySQL Replication 一样正确地做到这一点?
【问题讨论】:
标签: mysql database synchronization replication