MariaDB 数据库日志文件 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

MariaDB 数据库日志文件

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

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

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

访问 MariaDB 错误日志

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

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

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

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

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

  • slow_query_loglog_slow_query:要创建慢速查询日志,请设置为 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%,则轮换日志表。如果所有日志的总体大小超过 5GB,也会轮换这些日志表。

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

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

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

将 MariaDB 日志发布到 Amazon CloudWatch Logs

您可以配置 MariaDB 数据库实例以将日志数据发布到 Amazon CloudWatch Logs 中的日志组。利用 CloudWatch Logs,可以对日志数据进行实时分析并使用 CloudWatch 创建警报和查看指标。您可以使用 CloudWatch Logs 在高持久性存储中存储日志记录。

Amazon RDS 将每个 MariaDB 数据库日志作为日志组中的单独数据库流进行发布。例如,假设您将导出功能配置为包括慢速查询日志。然后,慢速查询数据将存储在 /aws/rds/instance/my_instance/slowquery 日志组中的慢速查询日志流中。

默认情况下,启用错误日志。下表总结了其他 MariaDB 日志的要求。

日志 要求

审核日志

数据库实例必须使用具有 MARIADB_AUDIT_PLUGIN 选项的自定义选项组。

常规日志

数据库实例必须使用具有参数设置 general_log = 1 的自定义参数组才能启用常规日志。

慢速查询日志

数据库实例必须使用具有参数设置 slow_query_log = 1log_slow_query = 1 的自定义参数组才能启用慢速查询日志。

日志输出

数据库实例必须使用具有参数设置 log_output = FILE 的自定义参数组,才能将日志写入文件系统并将日志发布到 CloudWatch Logs。

从控制台将 MariaDB 日志发布到 CloudWatch Logs
  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要修改的数据库实例。

  3. 选择修改

  4. Log exports (日志导出) 部分中,选择要开始发布到 CloudWatch Logs 的日志。

  5. 选择继续,然后选择摘要页面上的修改数据库实例

您可以使用 Amazon CLI 来发布 MariaDB 日志。您可以调用带以下参数的 modify-db-instance 命令:

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

注意

--cloudwatch-logs-export-configuration 选项进行的更改始终立即应用于数据库实例。因此,--apply-immediately--no-apply-immediately 选项没有影响。

您还可以通过调用以下 Amazon CLI 命令来发布 MariaDB 日志:

通过以下选项运行上述 Amazon CLI 命令之一:

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

根据您运行的 Amazon CLI 命令,可能需要其他选项。

以下示例修改现有的 MariaDB 数据库实例以将日志文件发布到 CloudWatch Logs。--cloudwatch-logs-export-configuration 值是 JSON 对象。此对象的键是 EnableLogTypes,其值是具有 auditerrorgeneralslowquery 的任意组合的字符串的数组。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'

以下命令会创建一个 MariaDB 数据库实例并将日志文件发布到 CloudWatch Logs。--enable-cloudwatch-logs-exports 值是 JSON 字符串数组。这些字符串可以是 auditerrorgeneralslowquery 的任意组合。

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \ --db-instance-class db.m4.large \ --engine mariadb

对于 Windows:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^ --db-instance-class db.m4.large ^ --engine mariadb

您可以使用 RDS API 来发布 MariaDB 日志。您可以使用以下参数调用 ModifyDBInstance 操作:

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

注意

CloudwatchLogsExportConfiguration 参数进行的更改始终立即应用于数据库实例。因此,ApplyImmediately 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 MariaDB 日志:

使用以下参数运行这些 RDS API 操作之一:

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

根据您运行的 Amazon CLI 命令,可能需要其他参数。

日志文件大小

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

管理基于表的 MariaDB 日志

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

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

  • general_log

  • slow_query_loglog_slow_query

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

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

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

二进制日志记录格式

Amazon RDS 上的 MariaDB 支持基于行基于语句混合二进制日志记录格式。默认二进制日志记录的格式是混合的。有关不同的 MariaDB 二进制日志格式的详细信息,请参阅 MariaDB 文档中的二进制日志格式

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

重要

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

基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关更多信息,请参阅 MariaDB 文档中的基于语句的复制的不安全语句

设置 MariaDB 二进制日志记录格式
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

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

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

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

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

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

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

访问 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、macOS 或 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

mazon 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 查询的副本。此方法提供了与对 RDS for MySQL 数据库实例启用 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/*!*/;