Ste*_*eve 12 mysql database replication synchronization
我正在尝试使用MySQL Replication Listener Library在HostA和HostB之间进行数据复制.
复制基于基于行的其他语句.我知道MySQL本身有这样的内置功能,但我想自己做 - 从HostA的bin日志中读取所有行更改并将所有这些更改应用到HostB.
我遇到的问题是,我无法暂时禁用触发器,这将导致数据不同步.
举个例子,假设要同步的数据库是TestSyncDB,其中有两个表是Data和DataOp.Data表有一个触发器,一旦将记录插入该表,触发器将为DataOp生成一条新记录.
现在新的记录被插入到HostA.TestSyncDB.Data中,因为有一个触发器,所以实际上会有两个记录添加到数据库中,复制侦听器库将返回给我两个查询,如:
问题是,如果我重播这两个查询到主机B,将会有3个添加到表新记录HostA.TestSyncDB,因为触发器.然后数据永远不会是正确的.
那么如何解决这个问题?有可能暂时禁用触发器吗?如果没有,如何像MySQL Replication那样正确地做到这一点?
在mysql复制中,当您在master上创建触发器时,它将在slave上创建。因此,如果您想要在从属设备上使用不同的触发器,您可以编辑该触发器,如果不需要,也可以删除该触发器。对于复制格式,如果您的主站的 binlog binlog_format = ROW,它将复制为主站完成的内容,如果从站想要不同的触发操作,那么它不适合触发器,然后根据您的情况主站。在这种情况下binlog需要基于语句binlog_format = STATEMENT。那么mysql中是否可以根据需要黑白切换这两者。
所以这里的关键点是你需要binlog_format = MIXED。它足够聪明,可以决定何时使用STATEMENTbased 以及何时使用ROWbased。它将针对STATEMENT BASED这种情况进行处理。否则它将作为ROW BASED.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |