默认情况下,MySQL 5.6 中的默认二进制日志格式是“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 甚至不可用。
这种差异背后的背景是什么?
答案1
没有差异。RDS 作为一种托管服务,不会为每个配置参数启用所有可能的可配置值。
RDS 的架构师选择不将STATEMENT
其作为选项提供BINLOG_FORMAT
,大概是因为他们认识到它在复制环境中存在许多局限性。
并非所有修改数据的语句(例如
INSERT
、、和语句)都可以使用基于语句的复制来[正确]复制。使用基于语句的复制时DELETE
,任何不确定的行为都很难复制。UPDATE
REPLACE
即使您没有 RDS 副本,二进制日志仍可用于 RDS 时间点恢复。如果不要求至少进行MIXED
日志记录,RDS 就无法将实例还原到某个时间点,并保证它实际上与同一时间点的原始实例相同。使用MIXED
或ROW
可以实现这一点。
事实上,更令人困惑的问题是为什么官方发行版中的默认值没有MIXED
在 MySQL 5.1 或 5.5 中改回。使用STATEMENT
模式几乎总是错误的选择。
答案2
ROW, STATEMENT, MIXED, OFF
自 2018年起,AWS RDS 允许对 binlog_format 进行以下设置:
AWS RDS 官方文档
全新 Aurora 实例的默认设置是STATEMENT
。
mysql> show global variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0,08 sec)