2008-09-18 34 views
2

好吧,我正在运行一个单一的主设备和一些奴隶的设置。所有写入都通过主设备,并复制到严格用于读取的从设备。MySQL触发器和存储过程复制

现在我有一个存储过程(不是函数),它是由插入上的触发器调用的。根据MySQL文档,对于复制触发器,将调用记录到触发器,而存储过程实际记录存储过程的结果。

所以我的问题是,当我的触发器被触发时,它是否会复制触发器和触发器调用的过程的结果(导致该过程有效地运行两次)?或者它会简单地复制触发器,让奴隶自己重新运行存储过程?

感谢

回答

6

在MySQL 5.0(和MySQL 5.1与基于二进制日志声明),只调用查询记录,所以在你的情况下,INSERT将被记录。

在从站上,INSERT将被执行,然后触发器将在从站上重新运行。因此,触发器需要存在于从属设备上,并假设它已经存在,那么它将以与主设备完全相同的方式执行。

在MySQL 5.1中,有基于行的二进制日志记录,它只记录被更改的行,因此触发器不会在从属系统上重新启动,但所有更改的行仍会传播。

0

除了哈里森的出色答卷:

  • 假设数据库是同步的(架构,数据,相同的版本),开始时,它应该只是工作
  • 如果没有,那么它可能是因为你在查询或触发器中使用了非确定性的东西。修复。
  • 无论您如何使用复制,都需要进行监视以检查从站是否始终处于同步状态。没有任何监控,他们会变得不同步(巧妙),你不会注意到。 MySQL没有自动内置功能来检查或修复它。