默认情况下,MySQL 5.6默认的二进制日志logging格式是“STATEMENT”。 ( https://dev.mysql.com/doc/refman/5.6/en/replication-formats.html )
在RDS上运行的MySQL 5.6的默认格式设置为“MIXED”( http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html )。 好像STATEMENT甚至不可用。
这种差异背后的背景是什么?
没有差异。 作为托pipe服务的RDS不会为每个configuration参数启用每个可能的可configuration值。
RDS的架构师select不将STATEMENT作为BINLOG_FORMAT一个选项,大概是因为他们认识到它在复制环境中有很多限制。
并非所有修改数据的语句(如
INSERT,DELETE,UPDATE和REPLACE语句)都可以使用基于语句的复制来正确地复制。 在使用基于语句的复制时,任何非确定性行为都很难复制。
即使您没有RDS副本,二进制日志仍然用于RDS时间点恢复。 在不需要至lessMIXED日志logging的情况下,RDS将无法将实例恢复到某个时间点,并确保在相同的时间点实际上与原始实例相同。 使用MIXED或ROW使这成为可能。
事实上,更令人困惑的问题是为什么官方发行版中的默认值在MySQL 5.1或5.5中没有改变为MIXED 。 使用STATEMENT模式几乎总是错误的select。