MySQL Trigger&存储过程复制

时间:2008-09-18 15:50:30

标签: mysql stored-procedures triggers

好的,我正在使用一个主设备和一些从设备运行设置。所有写入都通过主数据并被复制到从属设备,严格用于读取。

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

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

由于

2 个答案:

答案 0 :(得分:6)

在MySQL 5.0(以及带有基于语句的二进制日志记录的MySQL 5.1)中,只记录了调用查询,因此在您的情况下,将记录INSERT。

在从机上,将执行INSERT,然后在从机上重新运行触发器。因此触发器需要存在于从器件上,并假设它存在,然后它将以与主器件完全相同的方式执行。

在MySQL 5.1中,存在基于行的二进制日志记录,它将仅记录要更改的行,因此不会在从属服务器上重新触发该触发器,但仍会传播所有已更改的行。

答案 1 :(得分:0)

除了哈里森的出色答案:

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