Binlog 格式 - RDS 默认

Binlog 格式 - RDS 默认

默认情况下,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,任何不确定的行为都很难复制。UPDATEREPLACE

https://dev.mysql.com/doc/refman/5.6/en/replication-sbr-rbr.html#replication-sbr-rbr-sbr-disadvantages

即使您没有 RDS 副本,二进制日志仍可用于 RDS 时间点恢复。如果不要求至少进行MIXED日志记录,RDS 就无法将实例还原到某个时间点,并保证它实际上与同一时间点的原始实例相同。使用MIXEDROW可以实现这一点。

事实上,更令人困惑的问题是为什么官方发行版中的默认值没有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)

相关内容