

# 配置 MariaDB 二进制日志记录
<a name="USER_LogAccess.MariaDB.BinaryFormat"></a>

*二进制日志*是一组日志文件，其中包含有关对 MariaDB 服务器实例所做的数据修改的信息。二进制日志包含以下信息：
+ 描述数据库更改的事件，例如表创建或行修改
+ 有关更新数据的各语句的持续时间的信息
+ 本应更新但未更新数据的语句的事件

复制过程中发送的二进制日志记录语句。一些恢复操作也需要用到这些语句。有关更多信息，请参阅 MariaDB 文档中的 [Binary Log](https://mariadb.com/kb/en/binary-log/)。

自动备份功能会判断是否为 MariaDB 开启或关闭二进制日志记录。您有以下选项：

打开二进制日志记录  
将备份保留期设置为非零正值。

关闭二进制日志记录  
将备份保留期设置为 0。

有关更多信息，请参阅 [启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MariaDB 支持*基于行*、*基于语句*和*混合*二进制日志记录格式。默认二进制日志记录的格式是*混合的*。有关不同的 MariaDB 二进制日志格式的详细信息，请参阅 MariaDB 文档中的[二进制日志格式](http://mariadb.com/kb/en/mariadb/binary-log-formats/)。

如果您计划使用复制，则二进制日志记录格式很重要。这是因为它确定在源中记录和发送到复制目标的数据更改的记录。有关用于复制的不同二进制日志记录格式的优缺点的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/5.7/en/replication-sbr-rbr.html)。

**重要**  
将二进制日志记录格式设置为基于行会生成非常大的二进制日志文件。大型二进制日志文件会减少可用于数据库实例的存储空间量。它们还会增加执行数据库实例还原操作所需的时间。  
基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关更多信息，请参阅 MariaDB 文档中的[基于语句的复制的不安全语句](https://mariadb.com/kb/en/library/unsafe-statements-for-statement-based-replication/)。  
启用二进制日志记录会增加数据库实例的写入磁盘 I/O 操作数。您可以使用 `WriteIOPS` CloudWatch 指标监控 IOPS 使用情况。

**设置 MariaDB 二进制日志记录格式**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择您要修改的数据库实例所使用的参数组。

   您无法修改默认参数组。如果数据库实例使用默认参数组，则创建新的参数组并将其与数据库实例关联。

   有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 对于 **Parameter group actions (参数组操作)**，选择 **Edit (编辑)**。

1. 将 `binlog_format` 参数设置为您选择的二进制日志记录格式（**ROW**、**STATEMENT** 或 **MIXED**）。

   您可以通过将数据库实例的备份保留期设置为零来关闭二进制日志记录，但这会禁用每日自动备份。禁用自动备份会关闭或禁用 `log_bin` 会话变量。这样将禁用 RDS for MariaDB 数据库实例上的二进制日志记录，这反过来又会将数据库中的 `binlog_format` 会话变量重置为默认值 `ROW`。我们建议您不要禁用备份。有关设置**备份保留期**的更多信息，请参阅[数据库实例的设置](USER_ModifyInstance.Settings.md)。

1. 选择**保存更改**以保存对数据库参数组的更新。

由于 `binlog_format` 参数在 RDS for MariaDB 中是动态的，因此您无需重启数据库实例即可应用更改。

**重要**  
更改数据库参数组会影响使用该参数组的所有数据库实例。如果要为 AWS 区域中的不同 MariaDB 数据库实例指定不同的二进制日志记录格式，数据库实例必须使用不同的数据库参数组。这些参数组标识不同的日志记录格式。为每个数据库实例分配相应的数据库参数组。