提问人:Maascamp 提问时间:9/18/2008 更新时间:9/19/2008 访问量:7253
MySQL触发器和存储过程复制
MySQL Trigger & Stored Procedure Replication
问:
好的,我正在运行一个具有单个主站和多个从站的设置。所有写入都经过主站,并复制到从站,这些从站严格用于读取。
现在我有一个存储过程(不是函数),它由插入时的触发器调用。根据MySQL文档,对于复制触发器,记录对触发器的调用,而存储过程实际上记录存储过程的结果。
所以我的问题是,当我的触发器被触发时,它是否会同时复制触发器和触发器调用的过程的结果(导致该过程有效地运行两次)?还是只是复制触发器,让从属服务器自行重新运行存储过程?
谢谢
答:
6赞
Harrison Fisk
9/19/2008
#1
在 MySQL 5.0(以及具有基于语句的二进制日志记录的 MySQL 5.1)中,仅记录调用查询,因此在您的情况下,将记录 INSERT。
在从站上,将执行 INSERT,然后在从站上重新运行触发器。因此,触发器需要存在于从站上,假设它存在,那么它将以与主站完全相同的方式执行。
在 MySQL 5.1 中,有基于行的二进制日志记录,它只会记录正在更改的行,因此触发器不会在从属服务器上重新触发,但所有更改的行仍将传播。
0赞
MarkR
9/19/2008
#2
除了哈里森的出色回答:
- 假设数据库一开始是同步的(架构、数据、相同版本),它应该可以正常工作
- 如果没有,则可能是您在查询或触发器中使用了不确定的内容。解决这个问题。
- 无论您如何使用复制,您都需要进行监视以检查从属设备是否始终保持同步。如果没有任何监控,它们将变得不同步(微妙),您不会注意到。MySQL没有自动内置功能来检查或修复它。
评论