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

MariaDB 数据库日志文件

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

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

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

访问 MariaDB 错误日志

MariaDB 错误日志会写入到 <host-name>.err 文件中。您可以通过使用 Amazon RDS 控制台或者通过使用 Amazon RDS、API、Amazon RDS CLI 或 AWS 软件开发工具包检索日志来查看此文件。<host-name>.err 文件每 5 分钟刷新一次,其内容附加到 mysql-error-running.log 中。mysql-error-running.log 文件每小时轮换一次,保留过去 24 小时内每小时生成的文件。每个日志文件的名称上都会附有生成时间的信息 (以 UTC 时间标记)。日志文件还会拥有时间戳,帮助您确定日志项的写入时间。

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

访问 MariaDB 慢速查询日志和一般日志

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

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

  • 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,则轮换日志表。

    轮换日志表时,会将当前日志表复制到备份日志表,随后删除当前日志表中的条目。如果备份日志表已存在,则先将其删除,然后将当前日志表复制到备份。如果需要,您可以查询备份日志表。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 事件中记录 TABLEFILE 日志轮换并向您发送通知。

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

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

日志文件大小

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

管理基于表的 MariaDB 日志

可通过创建数据库参数组并将 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 上的 MariaDB 支持基于行的混合的二进制日志格式,不支持基于声明的二进制日志格式。默认二进制日志记录的格式是混合的。有关不同的 MariaDB 二进制日志格式的详细信息,请参阅 MariaDB 文档中的二进制日志格式

重要

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

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

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

  2. 按照创建数据库参数组中的说明创建新的参数组。

  3. 选择新参数组,然后选择 Go to Details Page

  4. 选择 Edit Parameters 以修改数据库参数组中的参数。

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

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

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

访问 MariaDB 二进制日志

您可以使用 mysqlbinlog 实用工具从 MariaDB 数据库实例中以文本格式下载二进制日志。二进制日志将下载到本地计算机。有关使用 mysqlbinlog 实用工具的更多信息,请转到 MariaDB 文档中的使用 mysqlbinlog

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

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

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

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

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

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

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

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

有关 mysqlbinlog 选项的更多信息,请参阅 MariaDB 文档中的 mysqlbinlog 选项

以下是示例:

针对 Linux、OS X 或 Unix:

mysqlbinlog \ --read-from-remote-server \ --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com \ --port=3306 \ --user ReplUser \ --password <password> \ --result-file=/tmp/binlog.txt

对于 Windows:

mysqlbinlog ^ --read-from-remote-server ^ --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com ^ --port=3306 ^ --user ReplUser ^ --password <password> ^ --result-file=/tmp/binlog.txt

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

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

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

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

call mysql.rds_show_configuration;

二进制日志注释

在 MariaDB 数据库实例中,您可以使用 Annotate_rows 事件注释某个行事件,并在注释中包含导致行事件的 SQL 查询的副本。此方法提供了与对 MySQL 5.6 版或更高版本上的数据库实例启用 binlog_rows_query_log_events 参数类似的功能。

您可以通过创建自定义参数组并将 binlog_annotate_row_events 参数设置为 1 来全局启用二进制日志注释。您还可以通过调用 SET SESSION binlog_annotate_row_events = 1 在会话级别启用注释。使用 replicate_annotate_row_events 将二进制日志注释复制到从属实例 (如果已对其启用二进制日志记录)。使用这些设置需要特殊权限。

下面是 MariaDB 中的基于行的事务的示例。基于行的日志记录的使用通过将事务隔离级别设置为“已提交读”来触发。

CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT;

没有注释时,事务的二进制日志条目与下面的类似:

BEGIN /*!*/; # at 1163 # at 1209 #150922 7:55:57 server id 1855786460 end_log_pos 1209 Table_map: `test`.`square` mapped to number 76 #150922 7:55:57 server id 1855786460 end_log_pos 1247 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 1247 #150922 7:56:01 server id 1855786460 end_log_pos 1274 Xid = 62 COMMIT/*!*/;

以下语句为此相同事务启用会话级注释,然后在提交事务后禁用这些注释:

CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION binlog_annotate_row_events = 1; BEGIN; INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT; SET SESSION binlog_annotate_row_events = 0;

当有注释时,事务的二进制日志条目与下面的类似:

BEGIN /*!*/; # at 423 # at 483 # at 529 #150922 8:04:24 server id 1855786460 end_log_pos 483 Annotate_rows: #Q> INSERT INTO square(x, y) VALUES(5, 5 * 5) #150922 8:04:24 server id 1855786460 end_log_pos 529 Table_map: `test`.`square` mapped to number 76 #150922 8:04:24 server id 1855786460 end_log_pos 567 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 567 #150922 8:04:26 server id 1855786460 end_log_pos 594 Xid = 88 COMMIT/*!*/;