2

好的,我正在运行一个具有单个主设备和多个从设备的设置。所有写入都通过主服务器并被复制到严格用于读取的从服务器。

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

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

谢谢

4

2 回答 2

6

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

在从机上,将执行 INSERT,然后触发器将在从机上重新运行。所以触发器需要存在于slave上,假设它存在,那么它将以与master完全相同的方式执行。

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

于 2008-09-18T16:13:24.970 回答
0

除了哈里森的出色回答:

  • 假设数据库是同步的(架构、数据、相同版本)开始,它应该可以工作
  • 如果不是,则可能是您在查询或触发器中使用了非确定性的东西。修复它。
  • 无论您如何使用复制,您都需要进行监控以检查从属设备是否始终同步。如果没有任何监控,它们会(微妙地)变得不同步,而您不会注意到。MySQL 没有用于检查或修复它的自动内置功能。
于 2008-09-18T19:00:48.560 回答