

# RDS for MySQL 数据库日志概览
<a name="USER_LogAccess.MySQL.LogFileSize"></a>

您可以监控以下类型的 RDS for MySQL 日志文件：
+ 错误日志
+ 慢速查询日志
+ 常规日志
+ 审核日志
+ 实例日志
+ IAM 数据库身份验证错误日志

默认情况下，系统会生成 RDS for MySQL 错误日志。您可以通过在数据库参数组中设置参数来生成慢速查询日志和一般日志。

**Topics**
+ [RDS for MySQL 错误日志](#USER_LogAccess.MySQL.Errorlog)
+ [RDS for MySQL 慢速查询日志和一般日志](#USER_LogAccess.MySQL.Generallog)
+ [MySQL 审计日志](#USER_LogAccess.MySQL.Auditlog)
+ [RDS for MySQL 的日志轮换和保留](#USER_LogAccess.MySQL.LogFileSize.retention)
+ [重做日志的大小限制](#USER_LogAccess.MySQL.LogFileSize.RedoLogs)

## RDS for MySQL 错误日志
<a name="USER_LogAccess.MySQL.Errorlog"></a>

RDS for MySQL 在 `mysql-error.log` 文件中写入错误。每个日志文件的名称上都会附有生成时间的信息 (以 UTC 时间标记)。日志文件还会拥有时间戳，帮助您确定日志项的写入时间。

RDS for MySQL 仅在启动、关闭和遇到错误时才向错误日志写入内容。数据库实例可以运行数小时或者数天，而不向错误日志中写入新项。如果看不到最近的条目，则原因是服务器未遇到导致生成日志条目的错误。

根据设计，将筛选错误日志，以便仅显示错误等意外事件。但是，错误日志还包含一些未显示的其他数据库信息，例如查询进度。因此，即使没有任何实际错误，由于持续进行的数据库活动，错误日志的大小也可能会增加。虽然您可能会在 AWS 管理控制台 中看到错误日志有一定大小（以字节或千字节为单位），但当您下载它们时，它们可能为 0 字节。

RDS for MySQL 每 5 分钟将 `mysql-error.log` 写入磁盘。它会将日志的内容附加到 `mysql-error-running.log` 中。

RDS for MySQL 每小时轮换一次 `mysql-error-running.log` 文件。它会保留过去两周生成的日志。

**注意**  
Amazon RDS 和 Aurora 之间的日志保留期不同。

## RDS for MySQL 慢速查询日志和一般日志
<a name="USER_LogAccess.MySQL.Generallog"></a>

可以将 RDS for MySQL 慢速查询日志和一般日志写入文件或数据库表中。为此，请设置数据库参数组中的参数。有关创建和修改数据库参数组的信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。您必须先设置这些参数，然后才能在 Amazon RDS 控制台中或使用 Amazon RDS API、Amazon RDS CLI 或AWS软件开发工具包查看慢速查询日志或一般日志。

可通过使用下面列表中的参数来控制 RDS for MySQL 日志记录：
+ `slow_query_log`：要创建慢速查询日志，请设置为 1。默认值为 0。
+ `general_log`：要创建一般日志，请设置为 1。默认值是 0。
+ `long_query_time`：要防止在慢速查询日志中记录快速运行的查询，请指定需要记录的最短查询运行时间值，以秒为单位。默认值为 10 秒；最小值为 0。如果 log\$1output = FILE，则可以指定精确到微秒的浮点值。如果 log\$1output = TABLE，则必须指定精确到秒的整数值。系统只记录运行时间超过 `long_query_time` 值的查询。例如，将 `long_query_time` 设置为 0.1 可防止记录任何运行时间少于 100 毫秒的查询。
+ `log_queries_not_using_indexes`：要将所有不使用索引的查询记录到慢速查询日志，请设置为 1。将记录不使用索引的查询，即使它们的运行时间小于 `long_query_time` 参数的值。默认值是 0。
+ `log_output option`：您可为 `log_output` 参数指定下列选项之一。
  + **TABLE** （默认）— 将一般查询写入 `mysql.general_log` 表，将慢速查询写入 `mysql.slow_log` 表。
  + **FILE**– 将一般查询日志和慢速查询日志写入文件系统。
  + **NONE**– 禁用日志记录。

要使慢速查询数据出现在 Amazon CloudWatch Logs 中，必须满足以下条件：
+ 必须将 CloudWatch Logs 配置为包含慢速查询日志。
+ 必须启用 `slow_query_log`。
+ `log_output`必须将 / 设置为 `FILE`。
+ 查询花费的时间必须比为 `long_query_time` 配置的时间长。

有关慢速查询日志和一般日志的更多信息，请参阅 MySQL 文档中的以下主题：
+ [慢速查询日志](https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html)
+ [一般查询日志](https://dev.mysql.com/doc/refman/8.0/en/query-log.html)

## MySQL 审计日志
<a name="USER_LogAccess.MySQL.Auditlog"></a>

若要访问审计日志，数据库实例必须使用具有 `MARIADB_AUDIT_PLUGIN` 选项的自定义选项组。有关更多信息，请参阅 [MySQL 的 MariaDB 审计插件支持](Appendix.MySQL.Options.AuditPlugin.md)。

## RDS for MySQL 的日志轮换和保留
<a name="USER_LogAccess.MySQL.LogFileSize.retention"></a>

启用了日志记录时，Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。RDS for MySQL 按如下方式处理轮换和删除：
+ MySQL 慢速查询日志、错误日志和一般日志文件的大小限制为不超过为数据库实例分配的存储空间的 2%。为了维护此阈值，日志每小时自动轮换一次。MySQL 会删除超过两周的日志文件。如果在删除旧日志文件后，日志文件的总体大小超出此阈值，则将删除最早的日志文件，直到日志文件大小不再超出此阈值。
+ 启用了 `FILE` 日志记录时，系统会每小时检查一次日志文件，并删除超过两周的日志文件。在一些情况下，删除之后的剩余日志文件的总体大小可能超过了数据库实例的分配空间的 2% 阈值。在这些情况下，将删除最旧的日志文件，直到日志文件大小不再超过此阈值。
+ 启用了 `TABLE` 日志记录时，在某些情况下，日志表每 24 小时轮换一次。如果表日志使用的空间大于所分配存储空间的 20%，则会执行此轮换。如果所有日志的总体大小超过 10GB，也会执行此轮换。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%，则减小日志轮换的阈值。如果表日志使用的空间大于分配存储空间的 10%，则轮换日志表。如果所有日志的总体大小超过 5GB，也会轮换这些日志表。您可以订阅 `low storage` 事件类别，在轮换日志表以释放空间时，会发送相关通知。有关更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。

  轮换日志表时，首先将当前日志表复制到备份日志表。然后，删除当前日志表中的条目。如果备份日志表已存在，则先将其删除，然后将当前日志表复制到备份。如果需要，您可以查询备份日志表。`mysql.general_log` 表的备份日志表名为 `mysql.general_log_backup`。`mysql.slow_log` 表的备份日志表名为 `mysql.slow_log_backup`。

  您可以通过调用 `mysql.general_log` 过程来轮换 `mysql.rds_rotate_general_log` 表。您可以通过调用 `mysql.slow_log` 过程来轮换 `mysql.rds_rotate_slow_log` 表。

  表日志在数据库版本升级期间会进行轮换。

要通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或 AWS 开发工具包使用日志，请将 `log_output` 参数设置为 FILE。就像 MySQL 错误日志一样，这些日志文件也每小时轮换一次。将保留过去两周内生成的日志文件。请注意，Amazon RDS 和 Aurora 之间的保留期不同。

## 重做日志的大小限制
<a name="USER_LogAccess.MySQL.LogFileSize.RedoLogs"></a>

对于 RDS for MySQL 版本 8.0.32 及更低版本，此参数的默认值为 256MB。该数量是通过将 `innodb_log_file_size` 参数的默认值（128MB）乘以 `innodb_log_files_in_group` 参数的默认值（2）得出的。有关更多信息，请参阅[为 Amazon RDS for MySQL 配置参数的最佳实践，第 1 部分：与性能相关的参数](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/)。

对于 RDS for MySQL 版本 8.0.33 及更高的次要版本，Amazon RDS 使用 `innodb_redo_log_capacity` 参数而不是 `innodb_log_file_size` 参数。`innodb_redo_log_capacity` 参数的 Amazon RDS 默认值为 2GB。有关更多信息，请参阅 MySQL 文档中的 [MySQL 8.0.30 中的更改](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-30.html)。

从 MySQL 8.4 开始，Amazon RDS 默认启用 `innodb_dedicated_server` 参数。使用 `innodb_dedicated_server` 参数，数据库引擎可计算 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 参数。有关更多信息，请参阅 [在 MySQL 8.4 中配置缓冲池大小和重做日志容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。