【问题标题】:MySQL Trigger & Stored Procedure ReplicationMySQL 触发器和存储过程复制
【发布时间】:2008-09-18 15:50:30
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: mysql stored-procedures triggers


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      除了哈里森的出色回答:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-30
        • 2021-10-12
        • 2013-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多