Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

MySQL 数据库日志文件

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

您可直接通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或 AWS SDK 监视 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 文件每小时轮换一次,保留过去 24 小时内每小时生成的文件。每个日志文件的名称上都会附有生成时间的信息 (以 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 日志记录时,如果表日志使用的空间大于分配存储空间的 20% 或是所有日志的总体大小超过 10 GB,则日志表每 24 小时轮换一次。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%,则减小日志轮换的阈值。随后,如果表日志使用的空间大于分配存储空间的 10% 或是所有日志的总体大小超过 5 GB,则轮换日志表。您可以订阅 low_free_storage 事件,在轮换日志表以释放空间时,会发送相关通知。有关更多信息,请参阅 使用 Amazon RDS 事件通知

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

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

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

要通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或 AWS 软件开发工具包使用日志,请将 log_output 参数设置为 FILE。就像 MySQL 错误日志一样,这些日志文件也每小时轮换一次。将保留过去 24 小时内生成的日志文件。

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

日志文件大小

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

对于 MySQL 5.6.20 版和更高版本,写入到重做日志的 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 二进制日志的记录格式:

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在左侧窗格中单击 Parameter Groups

  3. 对于 default.mysql5.6default.mysql5.7 数据库参数组,请单击 Go to Details Page 图标。

  4. 单击 Edit Parameters 修改数据库参数组中的参数。

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

  6. 单击 Save Changes 按钮保存对数据库参数组的更新。

重要

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

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

访问 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;