MySQL触发器和存储过程复制
时间:2020-03-06 14:22:02 来源:igfitidea点击:
好的,我正在运行一个主机和一个从机的安装程序。所有写操作都通过主设备,并复制到严格用于读取的从设备中。
现在,我有一个存储过程(不是函数),该存储过程由插入上的触发器调用。根据MySQL文档,对于复制触发器,将触发器的调用记录在日志中,而存储过程实际上记录了存储过程的结果。
所以我的问题是,当我的触发器被触发时,它会同时复制触发器和触发器调用的过程的结果(导致该过程有效地运行两次)吗?还是只是复制触发器,让从属自行重新运行存储过程?
谢谢
解决方案
在MySQL 5.0(以及带有基于语句的二进制日志记录的MySQL 5.1)中,仅记录调用查询,因此,在情况下,将记录INSERT。
在从站上,将执行INSERT,然后在从站上重新运行触发器。因此,触发器需要存在于从属设备上,并且假设存在,那么它将以与主设备完全相同的方式执行。
在MySQL 5.1中,有一个基于行的二进制日志记录,它将仅记录更改的行,因此不会在从属服务器上重新触发该触发器,但所有更改的行仍将传播。
除了哈里森的出色答案:
- 假设数据库是同步的(模式,数据,相同版本),那么它应该可以正常工作
- 如果不是,则可能是我们在查询或者触发器中使用了不确定性。解决这个问题。
- 无论如何使用复制,都需要进行监视以检查从属服务器始终处于同步状态。如果没有任何监视,它们将变得(微妙)不同步,我们不会注意到。 MySQL没有自动内置的功能来检查或者修复它。