binlog_format =带有MySQL复制的STATEMENT和CURRENT_TIMESTAMP

时间:2010-05-18 22:07:52

标签: mysql replication

当binlog_format设置为STATEMENT时,MySQL从属实例可以为同一ID具有不同的行值,我们会插入类似的内容:

insert into foo values(CURRENT_TIMESTAMP)

据我所知,slave会读取SQL语句并执行它,因此,如果复制滞后,可能会导致同一行的差异。是对还是错?

我该如何避免这种情况?

谢谢。

1 个答案:

答案 0 :(得分:5)

您的方法在语句级复制中非常安全。 TIMESTAMP被写入二进制日志,因此即使从站落后,CURRENT_TIMESTAMP的值也将在主站和从站之间保持一致。出于同样的原因,您也可以安全地使用NOW()功能。

要避免的函数是SYSDATE(),它不会使用二进制日志中的TIMESTAMP,因此从属的值将表示语句在从属服务器上运行的时间,而不是在语句在主服务器上运行时。