Amazon Aurora
Aurora 用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

MySQL 数据库日志文件

您可监视 MySQL 错误日志、慢查询日志和常规日志。默认情况下生成 MySQL 错误日志;可以通过在数据库参数组中设置参数来生成慢速查询日志和常规日志。Amazon RDS 将轮换所有 MySQL 日志文件;下面是每种类型的间隔时间。

您可直接通过 Amazon RDS 控制台、Amazon RDS API、AWS CLI 或 AWS 开发工具包监控 MySQL 日志。您还可通过将 MySQL 日志引向主数据库中的数据库表并查询该表,访问这些日志。可使用 mysqlbinlog 实用程序下载二进制日志。

有关查看、下载和监视基于文件的数据库日志的更多信息,请参阅 Amazon RDS 数据库日志文件

访问 MySQL 错误日志

MySQL 错误日志将写入 mysql-error.log 文件。可通过使用 Amazon RDS 控制台或使用 Amazon RDS API、Amazon RDS CLI 或 AWS 开发工具包检索日志来查看 mysql-error.logmysql-error.log 每 5 分钟刷新一次,其内容附加到 mysql-error-running.logmysql-error-running.log 文件每小时轮换一次,保留过去 30 天内每小时生成的文件。请注意,Amazon RDS 和 Aurora 之间的保留期不同。

每个日志文件的名称上都会附有生成时间的信息 (以 UTC 时间标记)。日志文件还会拥有时间戳,帮助您确定日志项的写入时间。

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

访问 MySQL 慢查询和常规日志

通过设置数据库参数组中的参数,可以将 MySQL 慢查询日志和常规日志写入文件或者数据库表中。有关创建和修改数据库参数组的信息,请参阅 使用数据库参数组和数据库集群参数组。您必须先设置这些参数,然后才能在 Amazon RDS 控制台中或使用 Amazon RDS API、Amazon RDS CLI 或 AWS 软件开发工具包查看慢速查询日志或一般日志。

可通过使用下面列表中的参数来控制 MySQL 日志记录:

  • slow_query_log:要创建慢速查询日志,请设置为 1。默认值为 0。

  • general_log:要创建常规日志,请设置为 1。默认值为 0。

  • long_query_time:要防止在慢速查询日志中记录快速运行的查询,请指定需要记录的最短查询执行时间值,以秒为单位。默认值为 10 秒;最小值为 0。如果 log_output = FILE,则可以指定精确到微秒的浮点值。如果 log_output = TABLE,则必须指定精确到秒的整数值。系统只记录执行时间超过 long_query_time 值的查询。例如,将 long_query_time 设置为 0.1 可防止记录任何运行时间少于 100 毫秒的查询。

  • log_queries_not_using_indexes:要将所有不使用索引的查询记录到慢速查询日志,请设置为 1。默认值为 0。将记录不使用索引的查询,即使它们的执行时间小于 long_query_time 参数的值。

  • log_output option:您可为 log_output 参数指定下列选项之一。

    • TABLE(默认)– 将一般查询写入 mysql.general_log 表,将慢速查询写入 mysql.slow_log 表。

    • FILE– 将一般查询日志和慢速查询日志写入文件系统。日志文件每小时轮换一次。

    • NONE– 禁用日志记录。

启用了日志记录时,Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施,用于降低大型日志文件阻止数据库使用或影响性能的可能性。FILETABLE 日志记录按如下所示进行轮换和删除:

  • 启用了 FILE 日志记录时,会每小时检查日志文件并删除 24 小时之前的日志文件。在一些情况下,删除之后的剩余日志文件的总体大小可能超过了数据库实例的分配空间的 2% 阈值。在这些情况下,将删除最大的日志文件,直到日志文件大小不再超过此阈值。

  • 启用了 TABLE 日志记录时,在某些情况下,日志表每 24 小时轮换一次。如果表日志使用的空间大于分配存储空间的 20% 或所有日志的总体大小超过 10GB,则会执行此轮换。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%,则减小日志轮换的阈值。随后,如果表日志使用的空间大于分配存储空间的 10% 或是所有日志的总体大小超过 5 GB,则轮换日志表。您可以订阅 low_free_storage 事件,在轮换日志表以释放空间时,会发送相关通知。有关更多信息,请参阅 使用 Amazon RDS 事件通知

    轮换日志表时,会将当前日志表复制到备份日志表,随后删除当前日志表中的条目。如果备份日志表已存在,则先将其删除,然后将当前日志表复制到备份。如果需要,您可以查询备份日志表。mysql.general_log 表的备份日志表名为 mysql.general_log_backupmysql.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 错误日志一样,这些日志文件也每小时轮换一次。将保留过去 72 小时内生成的日志文件。请注意,Amazon RDS 和 Aurora 之间的保留期不同。

有关慢速查询日志和一般日志的更多信息,请参阅 MySQL 文档中的以下主题:

将 Aurora MySQL 日志发布到 Amazon CloudWatch Logs

您可以配置 Aurora MySQL 数据库集群以将日志数据发布到 Amazon CloudWatch Logs 中的日志组。利用 CloudWatch Logs,可以对日志数据进行实时分析并使用 CloudWatch 创建警报和查看指标。您可以使用 CloudWatch Logs 在高持久性存储中存储日志记录。有关更多信息,请参阅将 Amazon Aurora MySQL 日志发布到 Amazon CloudWatch Logs

日志文件大小

MySQL 慢速查询日志、错误日志和一般日志文件的大小限制为不超过为数据库实例分配的存储空间的 2%。为了维护此阈值,日志每小时自动轮换一次,并且将删除 24 小时之前生成的日志文件。如果在删除旧日志文件后,日志文件的总体大小超出此阈值,则将删除最大的日志文件,直到日志文件大小不再超出此阈值。

对于 MySQL,写入到重做日志的 BLOB 存在大小限制。要解决此限制,请确保您的 MySQL 数据库实例的 innodb_log_file_size 参数是在您的表中找到的最大 BLOB 数据大小与同一表中其他可变长度字段 (VARCHARVARBINARYTEXT) 的长度的和的 10 倍。有关如何设置参数值的信息,请参阅使用数据库参数组和数据库集群参数组。有关重做日志 BLOB 大小限制的信息,请转至 MySQL 5.6.20 中的更改

管理基于表的 MySQL 日志

可通过创建数据库参数组并将 log_output 服务器参数设置为 TABLE,将一般日志和慢速查询日志引向数据库实例上的表。系统随后会将一般查询记录到 mysql.general_log 表,并将慢速查询记录到 mysql.slow_log 表。可以查询表来访问日志信息。启用此日志记录功能会增加写入数据库的数据量,导致性能降低。

默认情况下,一般日志和慢速查询日志处于禁用状态。要启用将日志记录到表的功能,必须将 general_logslow_query_log 服务器参数设置为 1

日志表将不断增大,直至通过将相应的参数重置为 0 来关闭相应的日志记录活动。随着时间的推移,通常会累积大量的数据,这些数据会占用相当大比例的分配存储空间。Amazon RDS 不允许您截断日志表,但您可以移动其中的内容。表的交替会将表的内容保存到备份表,然后创建一个新的空日志表。可用以下命令行过程手动轮换日志表,其中 PROMPT> 表示命令提示符:

PROMPT> CALL mysql.rds_rotate_slow_log; PROMPT> CALL mysql.rds_rotate_general_log;

要完全移除旧数据并回收磁盘空间,请连续两次调用相应的程序。

二进制日志记录格式

Amazon RDS 上的 MySQL 对于 MySQL 版本 5.6 和更高版本支持基于行基于语句混合二进制日志记录格式。默认二进制日志记录的格式是混合的。对于运行 MySQL 5.1 和 5.5 版本的数据库实例,只支持混合二进制日志记录。有关不同的 MySQL 二进制日志格式的详细信息,请参阅 MySQL 文档中的二进制日志记录格式

如果您计划使用复制,则二进制日志记录格式很重要,因为它确定了在源中记录和发送到复制目标的数据更改记录。有关用于复制的不同二进制日志记录格式的优缺点的信息,请参阅 MySQL 文档中的基于语句和基于行的复制的优点和缺点

重要

将二进制日志记录格式设置为基于行会生成非常大的二进制日志文件。大型二进制日志文件会减少可用于数据库实例的存储空间量,还会增加执行数据库实例还原操作所需的时间。

基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关详细信息,请参阅 MySQL 文档中的确定二进制日志记录中的安全和不安全语句

设置 MySQL 二进制日志记录格式

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择参数组

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

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

    有关数据库参数组的更多信息,请参阅 使用数据库参数组和数据库集群参数组

  4. Parameter group actions (参数组操作) 中,选择 Edit (编辑)

  5. binlog_format 参数设置为您选择的二进制日志记录格式(ROWSTATEMENTMIXED)。

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

重要

更改 default.mysql5.6default.mysql5.7default.mysql8.0 数据库参数组将影响使用该参数组的所有 MySQL 版本的数据库实例。如果要为 AWS 区域中的不同 MySQL 5.6、5.7 或 8.0 数据库实例指定不同的二进制日志记录格式,您需要创建自己的数据库参数组。该参数组标识不同的日志记录格式并将该数据库参数组分配给目标数据库实例。

访问 MySQL 二进制日志

可使用 mysqlbinlog 实用程序从运行 MySQL 5.6 或更高版本的 Amazon RDS 实例下载或流式传输二进制日志。二进制日志下载到本地计算机,可以执行一些操作,例如使用 mysql 实用程序执行重放日志。有关使用 mysqlbinlog 实用程序的更多信息,请转到使用 mysqlbinlog 备份二进制日志文件

要针对 Amazon RDS 实例运行 mysqlbinlog 实用程序,请使用下列选项:

  • 指定 --read-from-remote-server 选项。

  • --host:指定该实例所在的终端节点中的 DNS 名称。

  • --port:指定该实例使用的端口。

  • --user:指定已授予了复制从属实例权限的 MySQL 用户。

  • --password:指定用户的密码,或忽略密码值以让实用程序提示您输入密码。

  • 要按二进制格式下载文件,请指定 --raw 选项。

  • --result-file:指定用于接收原始输出的本地文件。

  • 指定一个或多个二进制日志文件的名称。要获取可用日志的列表,请使用 SQL 命令 SHOW BINARY LOGS。

  • 要流式传输二进制日志文件,请指定 --stop-never 选项。

有关 mysqlbinlog 选项的更多信息,请转到 mysqlbinlog - 处理二进制日志文件的实用程序

例如,请参阅以下内容。

针对 Linux、OS X 或 Unix:

mysqlbinlog \ --read-from-remote-server \ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com \ --port=3306 \ --user ReplUser \ --password \ --raw \ --result-file=/tmp/ \ binlog.00098

对于 Windows:

mysqlbinlog ^ --read-from-remote-server ^ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com ^ --port=3306 ^ --user ReplUser ^ --password ^ --raw ^ --result-file=/tmp/ ^ binlog.00098

Amazon RDS 通常会尽快清除二进制日志,但二进制日志必须仍在实例上提供,供 mysqlbinlog 访问。若要指定 RDS 保留二进制日志的小时数,请使用 mysql.rds_set_configuration 存储过程并指定一个包含的时间足以让您下载这些日志的时间段。设置保留期后,监视数据库实例的存储用量以确认保留的二进制日志不会占用太多存储空间。

注意

mysql.rds_set_configuration 存储过程只能用于 MySQL 5.6 或更高版本。

以下示例将保留期设置为 1 天。

call mysql.rds_set_configuration('binlog retention hours', 24);

要显示当前设置,请使用 mysql.rds_show_configuration 存储过程。

call mysql.rds_show_configuration;