

# 监控 Amazon RDS 日志文件
<a name="USER_LogAccess"></a>

每个 RDS 数据库引擎都会生成日志，您可以访问这些日志以进行审计和故障排除。日志的类型取决于数据库引擎。

可以使用 AWS 管理控制台、AWS Command Line Interface（AWS CLI）或 Amazon RDS API 访问数据库实例的数据库日志。您无法查看、监控或下载事务日志。

**Topics**
+ [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)
+ [下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)
+ [监视数据库日志文件](USER_LogAccess.Procedural.Watching.md)
+ [将数据库日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Procedural.UploadtoCloudWatch.md)
+ [使用 REST 读取日志文件内容](DownloadCompleteDBLogFile.md)
+ [Amazon RDS for Db2 数据库日志文件](USER_LogAccess.Concepts.Db2.md)
+ [MariaDB 数据库日志文件](USER_LogAccess.Concepts.MariaDB.md)
+ [Amazon RDS for Microsoft SQL Server 数据库日志文件](USER_LogAccess.Concepts.SQLServer.md)
+ [MySQL 数据库日志文件](USER_LogAccess.Concepts.MySQL.md)
+ [Amazon RDS for Oracle 数据库日志文件](USER_LogAccess.Concepts.Oracle.md)
+ [RDS for PostgreSQL 数据库日志文件](USER_LogAccess.Concepts.PostgreSQL.md)

# 查看和列出数据库日志文件
<a name="USER_LogAccess.Procedural.Viewing"></a>

您可以使用 AWS 管理控制台 查看 Amazon RDS 数据库引擎的数据库日志文件。您可使用 AWS CLI 或 Amazon RDS API 列出可下载或监控的日志文件。

**注意**  
如果无法查看现有 RDS for Oracle 数据库实例的日志文件的列表，请重启该实例以查看列表。

## 控制台
<a name="USER_LogAccess.CON"></a>

**要查看数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。

1. 向下滚动到**日志**部分。

1. （可选）输入搜索词以筛选结果。

1. 选择要查看的日志，然后选择 **View**（查看）。

## AWS CLI
<a name="USER_LogAccess.CLI"></a>

要列出数据库实例的可用数据库日志文件，请使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-log-files.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-log-files.html) 命令。

以下示例将返回名为 `my-db-instance` 的数据库实例的日志文件列表。

**Example**  

```
1. aws rds describe-db-log-files --db-instance-identifier my-db-instance
```

## RDS API
<a name="USER_LogAccess.API"></a>

要列出数据库实例的可用数据库日志文件，请使用 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) 操作。

# 下载数据库日志文件
<a name="USER_LogAccess.Procedural.Downloading"></a>

您可使用 AWS 管理控制台、AWS CLI 或 API 下载数据库日志文件。

## 控制台
<a name="USER_LogAccess.Procedural.Downloading.CON"></a>

**要下载数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。

1. 向下滚动到**日志**部分。

1. 在 **Logs (日志)** 部分中，选择要下载的日志旁边的按钮，然后选择 **Download (下载)**。

1. 打开提供的链接的上下文 (右键单击) 菜单，然后选择**将链接另存为**。输入您希望保存日志文件的位置，然后选择**保存**。  
![\[查看日志文件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/log_download2.png)

## AWS CLI
<a name="USER_LogAccess.Procedural.Downloading.CLI"></a>

要下载数据库日志文件，请使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/download-db-log-file-portion.html](https://docs.aws.amazon.com/cli/latest/reference/rds/download-db-log-file-portion.html)。默认情况下，该命令仅下载日志文件的最新部分。但是，您可以通过指定参数 `--starting-token 0` 下载整个文件。

以下示例演示如何下载一个名为 *log/ERROR.4* 的日志文件的全部内容并将其存储在一个名为 *errorlog.txt* 的本地文件中。

**Example**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds download-db-log-file-portion \
2.     --db-instance-identifier myexampledb \
3.     --starting-token 0 --output text \
4.     --log-file-name log/ERROR.4 > errorlog.txt
```
对于 Windows：  

```
1. aws rds download-db-log-file-portion ^
2.     --db-instance-identifier myexampledb ^
3.     --starting-token 0 --output text ^
4.     --log-file-name log/ERROR.4 > errorlog.txt
```

## RDS API
<a name="USER_LogAccess.Procedural.Downloading.API"></a>

要下载数据库日志文件，请使用 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html) 操作。

# 监视数据库日志文件
<a name="USER_LogAccess.Procedural.Watching"></a>

监视数据库日志文件等同于在 UNIX 或 Linux 系统上跟踪该文件。您可使用 AWS 管理控制台监控日志文件。RDS 每 5 秒刷新一次日志的跟踪。

**要监视数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。  
![\[选择 Logs & events（日志和事件）选项卡\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Monitoring_logsEvents.png)

1. 在 **Logs (日志)** 部分中，选择一个日志文件，然后选择 **Watch (监视)**。  
![\[选择日志\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Monitoring_LogsEvents_watch.png)

   RDS 显示日志的跟踪，如以下 MySQL 示例所示。  
![\[日志文件的跟踪\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/Monitoring_LogsEvents_watch_content.png)

# 将数据库日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Procedural.UploadtoCloudWatch"></a>

在本地数据库中，数据库日志驻留在文件系统上。Amazon RDS 不向主机提供对数据库实例的文件系统上的数据库日志的访问权限。出于此原因，Amazon RDS 可让您将数据库日志导出到 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。利用 CloudWatch Logs，您可以对日志数据执行实时分析。您还可以将数据存储在高持久性存储中，并使用 CloudWatch Logs 代理管理数据。

**Topics**
+ [RDS 与 CloudWatch Logs 集成概述](#rds-integration-cw-logs)
+ [决定将哪些日志发布到 CloudWatch Logs](#engine-specific-logs)
+ [指定要发布到 CloudWatch Logs 的日志](#integrating_cloudwatchlogs.configure)
+ [在 CloudWatch Logs 中搜索和筛选您的日志](#accessing-logs-in-cloudwatch)

## RDS 与 CloudWatch Logs 集成概述
<a name="rds-integration-cw-logs"></a>

在 CloudWatch Logs 中，*日志流* 是共享同一个源的一系列日志事件。CloudWatch Logs 中每个独立的日志源构成一个独立的日志流。*日志组*是一组具有相同保留期、监控和访问控制设置的日志流。

Amazon RDS 将您的数据库实例日志记录持续流式传输到日志组。例如，对于您发布的每种类型的日志，您具有日志组 `/aws/rds/instance/instance_name/log_type`。此日志组与生成日志的数据库实例位于同一 AWS 区域中。

AWS 无限期地保留已发布到 CloudWatch Logs 的日志数据，除非您指定了保留期。有关更多信息，请参阅[更改 CloudWatch Logs 中的日志数据保留](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)。

## 决定将哪些日志发布到 CloudWatch Logs
<a name="engine-specific-logs"></a>

每个 RDS 数据库引擎都支持自己的一组日志。要了解数据库引擎的选项，请查看以下主题：
+ [将 Db2 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.Db2.md#USER_LogAccess.Db2.PublishtoCloudWatchLogs)
+ [将 MariaDB 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.md)
+ [将 MySQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs.md)
+ [将 Oracle 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)
+ [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.PostgreSQL.md#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)
+ [将 SQL Server 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.SQLServer.md#USER_LogAccess.SQLServer.PublishtoCloudWatchLogs)

## 指定要发布到 CloudWatch Logs 的日志
<a name="integrating_cloudwatchlogs.configure"></a>

您可以在控制台中指定要发布哪些日志。确保您在 AWS Identity and Access Management（IAM）中具有服务相关角色。有关服务相关角色的更多信息，请参阅[将服务相关角色用于 Amazon RDS](UsingWithRDS.IAM.ServiceLinkedRoles.md)。

**指定要发布的日志**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 请执行以下任一操作：
   + 选择**创建数据库**。
   + 从列表中选择数据库，然后选择 **Modify**（修改）。

1. 在 **Logs exports**（日志导出）中，选择要发布哪些日志。

   以下示例指定 RDS for MySQL 数据库实例的审计日志、错误日志、常规日志，以及慢速查询日志。  
![\[选择要发布到 CloudWatch Logs 的日志\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/AddCWLogs.png)

## 在 CloudWatch Logs 中搜索和筛选您的日志
<a name="accessing-logs-in-cloudwatch"></a>

您可以使用 CloudWatch Logs 控制台搜索满足指定条件的日志条目。您可以通过 RDS 控制台访问日志，这会引导您进入 CloudWatch Logs 控制台，也可以直接从 CloudWatch Logs 控制台访问日志。

**使用 RDS 控制台搜索 RDS 日志**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择数据库实例。

1. 选择**配置**。

1. 在 **Published logs**（已发布日志）下，选择要查看的数据库日志。

**使用 CloudWatch Logs 控制台搜索 RDS 日志**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Log groups（日志组）**。

1. 在筛选框中，输入 **/aws/rds**。

1. 对于 **Log Groups**，选择包含要搜索的日志流的日志组的名称。

1. 对于 **Log Streams**，选择要搜索的日志流的名称。

1. 在 **Log events（日志事件）**下，输入要使用的筛选条件语法。

有关更多信息，请参阅《Amazon CloudWatch Logs 用户指南》中的*搜索和筛选日志数据*。有关介绍如何监控 RDS 日志的博客教程，请参阅[使用 Amazon CloudWatch Logs、AWS Lambda 和 Amazon SNS 为 Amazon RDS 构建主动式数据库监控](https://aws.amazon.com/blogs/database/build-proactive-database-monitoring-for-amazon-rds-with-amazon-cloudwatch-logs-aws-lambda-and-amazon-sns/)。

# 使用 REST 读取日志文件内容
<a name="DownloadCompleteDBLogFile"></a>

Amazon RDS 提供允许访问数据库实例日志文件的 REST 终端节点。如果您需要编写应用程序来流式传输 Amazon RDS 日志文件内容，则这很有用。

语法如下：

```
GET /v13/downloadCompleteLogFile/DBInstanceIdentifier/LogFileName HTTP/1.1
Content-type: application/json
host: rds.region.amazonaws.com
```

以下参数为必需参数：
+ `DBInstanceIdentifier` — 包含要下载的日志文件的数据库实例的名称。
+ `LogFileName` — 要下载的日志文件的名称。

响应将包含流形式的请求日志文件的内容。

以下示例为 *us-west-2* 区域中名为 *sample-sql* 的数据库实例下载名为 *log/ERROR.6* 的日志文件。

```
GET /v13/downloadCompleteLogFile/sample-sql/log/ERROR.6 HTTP/1.1
host: rds.us-west-2.amazonaws.com
X-Amz-Security-Token: AQoDYXdzEIH//////////wEa0AIXLhngC5zp9CyB1R6abwKrXHVR5efnAVN3XvR7IwqKYalFSn6UyJuEFTft9nObglx4QJ+GXV9cpACkETq=
X-Amz-Date: 20140903T233749Z
X-Amz-Algorithm: AWS4-HMAC-SHA256
X-Amz-Credential: AKIADQKE4SARGYLE/20140903/us-west-2/rds/aws4_request
X-Amz-SignedHeaders: host
X-Amz-Content-SHA256: e3b0c44298fc1c229afbf4c8996fb92427ae41e4649b934de495991b7852b855
X-Amz-Expires: 86400
X-Amz-Signature: 353a4f14b3f250142d9afc34f9f9948154d46ce7d4ec091d0cdabbcf8b40c558
```

如果您指定的数据库实例不存在，则响应将包含以下错误：
+ `DBInstanceNotFound` — `DBInstanceIdentifier` 不引用现有数据库实例。(HTTP 状态代码: 404)

# Amazon RDS for Db2 数据库日志文件
<a name="USER_LogAccess.Concepts.Db2"></a>

您可以使用 Amazon RDS 控制台、AWS CLI 或 RDS API 访问 RDS for Db2 诊断日志和通知日志。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [保留计划](#USER_LogAccess.Concepts.Db2.Retention)
+ [将 Db2 日志发布到 Amazon CloudWatch Logs](#USER_LogAccess.Db2.PublishtoCloudWatchLogs)

## 保留计划
<a name="USER_LogAccess.Concepts.Db2.Retention"></a>

日志文件每天都会轮换，并且会在重新启动数据库实例时轮换。以下是 Amazon RDS 上的 RDS for Db2 日志的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  诊断日志  |  Db2 会删除实例级配置中保留设置之外的日志。Amazon RDS 将 `diagsize` 参数设置为 1000。  | 
|  通知日志  |  Db2 会删除实例级配置中保留设置之外的日志。Amazon RDS 将 `diagsize` 参数设置为 1000。  | 

## 将 Db2 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs"></a>

使用 RDS for Db2，您可以将诊断和通知日志事件直接发布到 Amazon CloudWatch Logs。使用 CloudWatch Logs 分析日志数据，然后使用 CloudWatch 创建警报和查看指标。

利用 CloudWatch Logs，您可以：
+ 将日志存储在具有您定义的保留期间的高持久性存储空间中。
+ 搜索并筛选日志数据。
+ 在账户间共享日志数据。
+ 将日志导出到 Amazon S3。
+ 将数据流式传输到 Amazon Opensearch 服务。
+ 使用 Amazon Kinesis Data Streams 实时处理日志数据。有关更多信息，请参阅《面向 SQL 的适用于 Apache Flink 的亚马逊托管服务的应用程序开发人员指南》**中的[使用 Amazon CloudWatch Logs](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/cloudwatch-logs.html)。

 Amazon RDS 将每个 RDS for Db2 数据库日志作为日志组中的单独数据库流进行发布。例如，如果您发布诊断日志和通知日志，则诊断数据存储在 `/aws/rds/instance/my_instance/diagnostic` 日志组的诊断日志流中，通知日志数据存储在 `/aws/rds/instance/my_instance/notify` 日志组中。

**注意**  
默认情况下，没有启用将 RDS for Db2 日志发布到 CloudWatch Logs 的功能。不支持发布自我调整内存管理器（STMM）和优化器统计数据日志。所有区域都支持将 RDS for Db2 日志发布到 CloudWatch Logs，亚太地区（香港）除外。

### 控制台
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs.console"></a>

**从 AWS 管理控制台将 RDS for Db2 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

   您可以选择 **diag.log** 和/或 **notify.log**。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### AWS CLI
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs.CLI"></a>

要发布 RDS for Db2 日志，您可以使用具有以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 RDS for Db2 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 RDS for Db2 数据库实例。`--enable-cloudwatch-logs-exports` 值是一个可以包括 `diag.log` 和/或 `notify.log` 的 JSON 字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-cloudwatch-logs-exports '["diag.log","notify.log"]' \
    --db-instance-class db.m4.large \
    --engine db2-se
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --enable-cloudwatch-logs-exports "[\"diag.log\",\"notify.log\"]" ^
    --db-instance-class db.m4.large ^
    --engine db2-se
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 RDS for Db2 数据库实例，以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是可以包括 `diag.log` 和/或 `notify.log` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["diag.log","notify.log"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"EnableLogTypes\":[\"diag.log\",\"notify.log\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 RDS for Db2 数据库实例，以禁用将诊断日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是可以包括 `diag.log` 和/或 `notify.log` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["diag.log"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"DisableLogTypes\":[\"diag.log\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

# MariaDB 数据库日志文件
<a name="USER_LogAccess.Concepts.MariaDB"></a>

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

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

有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [访问 MariaDB 错误日志](USER_LogAccess.MariaDB.Errorlog.md)
+ [访问 MariaDB 慢速查询日志和一般日志](USER_LogAccess.MariaDB.Generallog.md)
+ [将 MariaDB 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.md)
+ [MariaDB 的日志轮换和保留](USER_LogAccess.MariaDB.LogFileSize.md)
+ [管理基于表的 MariaDB 日志](Appendix.MariaDB.CommonDBATasks.Logs.md)
+ [配置 MariaDB 二进制日志记录](USER_LogAccess.MariaDB.BinaryFormat.md)
+ [访问 MariaDB 二进制日志](USER_LogAccess.MariaDB.Binarylog.md)
+ [启用 MariaDB 二进制日志注释](USER_LogAccess.MariaDB.BinarylogAnnotation.md)

# 访问 MariaDB 错误日志
<a name="USER_LogAccess.MariaDB.Errorlog"></a>

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

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

# 访问 MariaDB 慢速查询日志和一般日志
<a name="USER_LogAccess.MariaDB.Generallog"></a>

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

可通过使用下面列表中的参数来控制 MariaDB 日志记录：
+ `slow_query_log` 或 `log_slow_query`：要创建慢速查询日志，请设置为 1。默认值是 0。
+ `general_log`：要创建一般日志，请设置为 1。默认值是 0。
+ `long_query_time` 或 `log_slow_query_time`：要防止在慢速查询日志中记录快速运行的查询，请指定需要记录的最短查询运行时间值，以秒为单位。默认值为 10 秒；最小值为 0。如果 log\$1output = FILE，则可以指定精确到微秒的浮点值。如果 log\$1output = TABLE，则必须指定精确到秒的整数值。系统只记录运行时间超过 `long_query_time` 或 `log_slow_query_time` 值的查询。例如，将 `long_query_time` 或 `log_slow_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 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。`FILE` 和 `TABLE` 日志记录按如下所示进行轮换和删除：
+ 启用了 `FILE` 日志记录时，会每小时检查日志文件并删除 24 小时之前的日志文件。在一些情况下，删除之后的剩余日志文件的总体大小可能超过了数据库实例的分配空间的 2% 阈值。在这些情况下，将删除最大的日志文件，直到日志文件大小不再超过此阈值。
+ 启用了 `TABLE` 日志记录时，在某些情况下，日志表每 24 小时轮换一次。如果表日志使用的空间大于所分配存储空间的 20%，则会执行此轮换。如果所有日志的总体大小超过 10GB，也会执行此轮换。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%，则减小日志轮换的阈值。如果表日志使用的空间大于分配存储空间的 10%，则轮换日志表。如果所有日志的总体大小超过 5GB，也会轮换这些日志表。

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

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

有关慢速查询日志和一般日志的更多信息，请参阅 MariaDB 文档中的以下主题：
+ [慢速查询日志](http://mariadb.com/kb/en/mariadb/slow-query-log/)
+ [一般查询日志](http://mariadb.com/kb/en/mariadb/general-query-log/)

# 将 MariaDB 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs"></a>

您可以配置 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 = 1` 或 `log_slow_query = 1` 的自定义参数组才能启用慢速查询日志。  | 
|  IAM 数据库身份验证错误日志  |  您必须通过创建或修改数据库实例来启用数据库实例的日志类型 `iam-db-auth-error`。  | 
|  日志输出  |  数据库实例必须使用具有参数设置 `log_output = FILE` 的自定义参数组，才能将日志写入文件系统并将日志发布到 CloudWatch Logs。  | 

## 控制台
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.CON"></a>

**从控制台将 MariaDB 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

## AWS CLI
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.CLI"></a>

您可以使用 AWS CLI 来发布 MariaDB 日志。您可以调用带以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 AWS CLI 命令来发布 MariaDB 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 AWS CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example**  
以下示例修改现有的 MariaDB 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `audit`、`error`、`general` 和 `slowquery` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```
对于：Windows  

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

**Example**  
以下命令会创建一个 MariaDB 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `audit`、`error`、`general` 和 `slowquery` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \
4.     --db-instance-class db.m4.large \
5.     --engine mariadb
```
对于：Windows  

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

## RDS API
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 MariaDB 日志。您可以使用以下参数调用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 MariaDB 日志：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

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

# MariaDB 的日志轮换和保留
<a name="USER_LogAccess.MariaDB.LogFileSize"></a>

启用了日志记录时，Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。

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

Amazon RDS 会轮换大于 10 MB 的 IAM 数据库身份验证错误日志文件。Amazon RDS 会移除存在时间超过五天或大于 100 MB 的 IAM 数据库身份验证错误日志文件。

# 管理基于表的 MariaDB 日志
<a name="Appendix.MariaDB.CommonDBATasks.Logs"></a>

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

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

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

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

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

# 配置 MariaDB 二进制日志记录
<a name="USER_LogAccess.MariaDB.BinaryFormat"></a>

*二进制日志*是一组日志文件，其中包含有关对 MariaDB 服务器实例所做的数据修改的信息。二进制日志包含以下信息：
+ 描述数据库更改的事件，例如表创建或行修改
+ 有关更新数据的各语句的持续时间的信息
+ 本应更新但未更新数据的语句的事件

复制过程中发送的二进制日志记录语句。一些恢复操作也需要用到这些语句。有关更多信息，请参阅 MariaDB 文档中的 [Binary Log](https://mariadb.com/kb/en/binary-log/)。

自动备份功能会判断是否为 MariaDB 开启或关闭二进制日志记录。您有以下选项：

打开二进制日志记录  
将备份保留期设置为非零正值。

关闭二进制日志记录  
将备份保留期设置为 0。

有关更多信息，请参阅 [启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MariaDB 支持*基于行*、*基于语句*和*混合*二进制日志记录格式。默认二进制日志记录的格式是*混合的*。有关不同的 MariaDB 二进制日志格式的详细信息，请参阅 MariaDB 文档中的[二进制日志格式](http://mariadb.com/kb/en/mariadb/binary-log-formats/)。

如果您计划使用复制，则二进制日志记录格式很重要。这是因为它确定在源中记录和发送到复制目标的数据更改的记录。有关用于复制的不同二进制日志记录格式的优缺点的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/5.7/en/replication-sbr-rbr.html)。

**重要**  
将二进制日志记录格式设置为基于行会生成非常大的二进制日志文件。大型二进制日志文件会减少可用于数据库实例的存储空间量。它们还会增加执行数据库实例还原操作所需的时间。  
基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关更多信息，请参阅 MariaDB 文档中的[基于语句的复制的不安全语句](https://mariadb.com/kb/en/library/unsafe-statements-for-statement-based-replication/)。  
启用二进制日志记录会增加数据库实例的写入磁盘 I/O 操作数。您可以使用 `WriteIOPS` CloudWatch 指标监控 IOPS 使用情况。

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

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

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

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

   有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 对于 **Parameter group actions (参数组操作)**，选择 **Edit (编辑)**。

1. 将 `binlog_format` 参数设置为您选择的二进制日志记录格式（**ROW**、**STATEMENT** 或 **MIXED**）。

   您可以通过将数据库实例的备份保留期设置为零来关闭二进制日志记录，但这会禁用每日自动备份。禁用自动备份会关闭或禁用 `log_bin` 会话变量。这样将禁用 RDS for MariaDB 数据库实例上的二进制日志记录，这反过来又会将数据库中的 `binlog_format` 会话变量重置为默认值 `ROW`。我们建议您不要禁用备份。有关设置**备份保留期**的更多信息，请参阅[数据库实例的设置](USER_ModifyInstance.Settings.md)。

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

由于 `binlog_format` 参数在 RDS for MariaDB 中是动态的，因此您无需重启数据库实例即可应用更改。

**重要**  
更改数据库参数组会影响使用该参数组的所有数据库实例。如果要为 AWS 区域中的不同 MariaDB 数据库实例指定不同的二进制日志记录格式，数据库实例必须使用不同的数据库参数组。这些参数组标识不同的日志记录格式。为每个数据库实例分配相应的数据库参数组。

# 访问 MariaDB 二进制日志
<a name="USER_LogAccess.MariaDB.Binarylog"></a>

您可以使用 mysqlbinlog 实用工具从 MariaDB 数据库实例中以文本格式下载二进制日志。二进制日志将下载到本地计算机。有关使用 mysqlbinlog 实用工具的更多信息，请转到 MariaDB 文档中的[使用 mysqlbinlog](http://mariadb.com/kb/en/mariadb/using-mysqlbinlog/)。

 要针对 Amazon RDS 实例运行 mysqlbinlog 实用工具，请使用下列选项：
+  指定 `--read-from-remote-server` 选项。
+  `--host`：指定该实例所在的端点中的 DNS 名称。
+  `--port`：指定该实例使用的端口。
+  `--user`：指定已授予了复制从属权限的 MariaDB 用户。
+  `--password`：指定用户的密码，或忽略密码值以让实用工具将提示您输入密码。
+  `--result-file`：指定接收输出的本地文件。
+ 指定一个或多个二进制日志文件的名称。要获取可用日志的列表，请使用 SQL 命令 SHOW BINARY LOGS。

有关 mysqlbinlog 选项的更多信息，请参阅 MariaDB 文档中的 [mysqlbinlog 选项](http://mariadb.com/kb/en/mariadb/mysqlbinlog-options/)。

 以下是 示例：

对于 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 二进制日志注释
<a name="USER_LogAccess.MariaDB.BinarylogAnnotation"></a>

在 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/*!*/;
```

# Amazon RDS for Microsoft SQL Server 数据库日志文件
<a name="USER_LogAccess.Concepts.SQLServer"></a>

您可以使用 Amazon RDS 控制台、AWS CLI 或 RDS API 访问 Microsoft SQL Server 错误日志、代理日志、跟踪文件和转储文件。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

## 保留计划
<a name="USER_LogAccess.Concepts.SQLServer.Retention"></a>

日志文件每天都会轮换，并且会在重新启动数据库实例时轮换。以下是 Amazon RDS 上的 Microsoft SQL Server 日志的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  错误日志  |  最多可保留 30 个错误日志。Amazon RDS 可能会删除超过 7 天的错误日志。  | 
|  Agent 日志  |  最多可保留 10 个代理日志。Amazon RDS 可能会删除超过 7 天的代理日志。  | 
|  跟踪文件  |  根据数据库实例的跟踪文件保留期保留跟踪文件。默认的跟踪文件保留期为 7 天。要修改数据库实例的跟踪文件保留期，请参阅[设置跟踪文件和转储文件的保留期](Appendix.SQLServer.CommonDBATasks.TraceFiles.md#Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles)。  | 
|  转储文件  |  根据数据库实例的转储文件保留期保留转储文件。默认的转储文件保留期为 7 天。要修改数据库实例的转储文件保留期，请参阅[设置跟踪文件和转储文件的保留期](Appendix.SQLServer.CommonDBATasks.TraceFiles.md#Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles)。  | 

## 使用 rds\$1read\$1error\$1log 过程查看 SQL Server 错误日志
<a name="USER_LogAccess.Concepts.SQLServer.Proc"></a>

您可以使用 Amazon RDS 存储过程 `rds_read_error_log` 查看错误日志和代理日志。有关更多信息，请参阅“[查看错误和代理日志](Appendix.SQLServer.CommonDBATasks.Logs.md#Appendix.SQLServer.CommonDBATasks.Logs.SP)”。

## 将 SQL Server 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs"></a>

使用 Amazon RDS for SQL Server，您可以将错误和代理日志事件直接发布到 Amazon CloudWatch Logs。使用 CloudWatch Logs 分析日志数据，然后使用 CloudWatch 创建警报和查看指标。

利用 CloudWatch Logs，您可以：
+ 将日志存储在具有您定义的保留期间的高持久性存储空间中。
+ 搜索并筛选日志数据。
+ 在账户间共享日志数据。
+ 将日志导出到 Amazon S3。
+ 将数据流式传输到 Amazon Opensearch 服务。
+ 使用 Amazon Kinesis Data Streams 实时处理日志数据。有关更多信息，请参阅《面向 SQL 的适用于 Apache Flink 的亚马逊托管服务的应用程序开发人员指南》**中的[使用 Amazon CloudWatch Logs](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/cloudwatch-logs.html)。

 Amazon RDS 将每个 SQL Server 数据库日志作为日志组中的单独数据库流进行发布。例如，如果您发布代理日志和错误日志，则错误数据将存储在 `/aws/rds/instance/my_instance.node1/error` 日志组中的错误日志流中，而代理日志数据将存储在 `/aws/rds/instance/my_instance.node1/agent` 日志组中。

对于多可用区数据库实例，Amazon RDS 将数据库日志作为日志组中的两个独立流发布。例如，如果您发布错误日志，则错误数据将分别存储在错误日志流 `/aws/rds/instance/my_instance.node1/error` 和 `/aws/rds/instance/my_instance.node2/error` 中。日志流在失效转移期间不会发生变化，每个节点的错误日志流可能包含来自主实例或辅助实例的错误日志。使用多可用区，系统会自动为 `/aws/rds/instance/my_instance/rds-events` 创建日志流，以存储诸如数据库实例失效转移等事件数据。

**注意**  
默认情况下，没有启用将 SQL Server 日志发布到 CloudWatch Logs 的功能。不支持发布跟踪和转储文件。所有区域都支持将 SQL Server 日志发布到 CloudWatch Logs。

### 控制台
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs.console"></a>

**从AWS 管理控制台将 SQL Server 数据库日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

   您可以选择**代理日志**、**错误日志**或两者。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### AWS CLI
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs.CLI"></a>

要发布 SQL Server 日志，您可以使用具有以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 SQL Server 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 SQL Server 数据库实例。`--enable-cloudwatch-logs-exports` 值是一个可以包括 `error` 和/或 `agent` 的 JSON 字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-cloudwatch-logs-exports '["error","agent"]' \
    --db-instance-class db.m4.large \
    --engine sqlserver-se
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --enable-cloudwatch-logs-exports "[\"error\",\"agent\"]" ^
    --db-instance-class db.m4.large ^
    --engine sqlserver-se
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 SQL Server 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是可以包括 `error` 和/或 `agent` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["error","agent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"EnableLogTypes\":[\"error\",\"agent\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 SQL Server 数据库实例以禁用将代理日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是可以包括 `error` 和/或 `agent` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["agent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"DisableLogTypes\":[\"agent\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

# MySQL 数据库日志文件
<a name="USER_LogAccess.Concepts.MySQL"></a>

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

有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [RDS for MySQL 数据库日志概览](USER_LogAccess.MySQL.LogFileSize.md)
+ [将 MySQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs.md)
+ [将 MySQL 日志输出发送到表](Appendix.MySQL.CommonDBATasks.Logs.md)
+ [为单可用区数据库配置 RDS for MySQL 二进制日志记录](USER_LogAccess.MySQL.BinaryFormat.md)
+ [为多可用区数据库集群配置 MySQL 二进制日志记录](USER_Binlog.MultiAZ.md)
+ [访问 MySQL 二进制日志](USER_LogAccess.MySQL.Binarylog.md)

# 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)。

# 将 MySQL 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs"></a>

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

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

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


| 日志 | 要求 | 
| --- | --- | 
|  审核日志  |  数据库实例必须使用具有 `MARIADB_AUDIT_PLUGIN` 选项的自定义选项组。  | 
|  常规日志  |  数据库实例必须使用具有参数设置 `general_log = 1` 的自定义参数组才能启用常规日志。  | 
|  慢速查询日志  |  数据库实例必须使用具有参数设置 `slow_query_log = 1` 的自定义参数组才能启用慢速查询日志。  | 
|  IAM 数据库身份验证错误日志  |  您必须通过创建或修改数据库实例来启用数据库实例的日志类型 `iam-db-auth-error`。  | 
|  日志输出  |  数据库实例必须使用具有参数设置 `log_output = FILE` 的自定义参数组，才能将日志写入文件系统并将日志发布到 CloudWatch Logs。  | 

## 控制台
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CON"></a>

**使用控制台将 MySQL 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

## AWS CLI
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CLI"></a>

 您可以使用 AWS CLI 来发布 MySQL 日志。您可以调用带以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 AWS CLI 命令来发布 MySQL 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 AWS CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example**  
以下示例修改现有的 MySQL 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `audit`、`error`、`general` 和 `slowquery` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```
对于 Windows：  

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

**Example**  
以下示例将创建一个 MySQL 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `audit`、`error`、`general` 和 `slowquery` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \
4.     --db-instance-class db.m4.large \
5.     --engine MySQL
```
对于 Windows：  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine MySQL
```

## RDS API
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 MySQL 日志。您可以使用以下参数调用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 MySQL 日志：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

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

# 将 MySQL 日志输出发送到表
<a name="Appendix.MySQL.CommonDBATasks.Logs"></a>

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

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

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

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

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

# 为单可用区数据库配置 RDS for MySQL 二进制日志记录
<a name="USER_LogAccess.MySQL.BinaryFormat"></a>

*二进制日志*是一组日志文件，其中包含对 MySQL 服务器实例所做的数据修改的信息。二进制日志包含以下信息：
+ 描述数据库更改的事件，例如表创建或行修改
+ 有关更新数据的各语句的持续时间的信息
+ 本应更新但未更新数据的语句的事件

复制过程中发送的二进制日志记录语句。一些恢复操作也需要用到这些语句。有关更多信息，请参阅 MySQL 文档中的[二进制日志](https://dev.mysql.com/doc/refman/8.0/en/binary-log.html)。

自动备份功能会判断是否为 MySQL 开启或关闭二进制日志记录。您有以下选项：

打开二进制日志记录  
将备份保留期设置为非零正值。

关闭二进制日志记录  
将备份保留期设置为 0。

有关更多信息，请参阅 [启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MySQL 支持*基于行*、*基于语句*和*混合*的二进制日志记录格式。我们建议混合使用，除非您需要特定的二进制日志格式。有关不同的 MySQL 二进制日志格式的详细信息，请参阅 MySQL 文档中的 [Binary Logging Formats](https://dev.mysql.com/doc/refman/8.0/en/binary-log-formats.html)。

如果您计划使用复制，则二进制日志记录格式很重要，因为它确定了在源中记录和发送到复制目标的数据更改记录。有关用于复制的不同二进制日志记录格式的优缺点的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

**重要**  
在 MySQL 8.0.34 中，MySQL 弃用了 `binlog_format` 参数。在更高版本的 MySQL 中，MySQL 计划删除该参数，并且仅支持基于行的复制。因此，我们建议对新的 MySQL 复制设置使用基于行的日志记录。有关更多信息，请参阅 MySQL 文档中的 [binlog\$1format](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format)。  
MySQL 版本 8.0 和 8.4 接受参数 `binlog_format`。使用此参数时，MySQL 会发出弃用警告。在将来的主要版本中，MySQL 将移除参数 `binlog_format`。  
基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关详细信息，请参阅 MySQL 文档中的[确定二进制日志记录中的安全和不安全语句](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。  
启用二进制日志记录会增加数据库实例的写入磁盘 I/O 操作数。您可以使用 `WriteIOPS``` CloudWatch 指标监控 IOPS 使用情况。

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

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择要修改的与数据库实例关联的数据库参数组。

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

   有关参数组的更多信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 从**操作**中，选择**编辑**。

1. 将 `binlog_format` 参数设置为您选择的二进制日志记录格式（`ROW`、`STATEMENT` 或 `MIXED`）

   您可以通过将数据库实例的备份保留期设置为零来关闭二进制日志记录，但这会禁用每日自动备份。禁用自动备份会关闭或禁用 `log_bin` 会话变量。这将禁用 RDS for MySQL 数据库实例上的二进制日志记录，这反过来又会将数据库中的 `binlog_format` 会话变量重置为默认值 `ROW`。我们建议您不要禁用备份。有关设置**备份保留期**的更多信息，请参阅[数据库实例的设置](USER_ModifyInstance.Settings.md)。

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

由于 `binlog_format` 参数在 RDS for MySQL 中是动态的，因此您无需重启数据库实例即可应用更改。（请注意，在 Aurora MySQL 中，此参数是静态的。有关更多信息，请参阅[配置 Aurora MySQL 二进制日志记录](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.MySQL.BinaryFormat.html)。）

**重要**  
更改数据库参数组会影响使用该参数组的所有数据库实例。如果要为 AWS 区域中的不同 MySQL 数据库实例指定不同的二进制日志记录格式，数据库实例必须使用不同的数据库参数组。这些参数组标识不同的日志记录格式。为每个数据库实例分配相应的数据库参数组。

# 为多可用区数据库集群配置 MySQL 二进制日志记录
<a name="USER_Binlog.MultiAZ"></a>

Amazon RDS for MySQL 多可用区数据库集群中的二进制日志记录会记录所有数据库更改，以支持复制、时间点故障恢复和审计。在多可用区数据库集群中，二进制日志将辅助节点与主节点同步，从而确保跨可用区的数据一致性并实现无缝失效转移。

为了优化二进制日志记录，Amazon RDS 支持二进制日志事务压缩，这样可以降低二进制日志的存储要求并提高复制效率。

**Topics**
+ [多可用区数据库集群的二进制日志事务压缩](#USER_Binlog.MultiAZ.compression)
+ [为多可用区数据库集群配置二进制日志事务压缩](#USER_Binlog.MultiAZ.configuring)

## 多可用区数据库集群的二进制日志事务压缩
<a name="USER_Binlog.MultiAZ.compression"></a>

二进制日志事务压缩使用 zstd 算法来减小存储在二进制日志中的事务数据的大小。启用后，MySQL 数据库引擎会将事务有效载荷压缩为单个事件，从而显著减少 I/O 和存储开销。此功能可提高数据库性能，减小二进制日志的大小，并优化在多可用区数据库集群中管理和复制日志的资源使用。

Amazon RDS 通过以下参数为 RDS for MySQL 多可用区数据库集群提供二进制日志事务压缩：
+ `binlog_transaction_compression` – 启用 (`1`) 后，数据库引擎会压缩事务有效载荷，并将其作为单个事件写入二进制日志。这样可减少存储空间使用量并降低 I/O 开销。默认情况下，将禁用此参数。
+ `binlog_transaction_compression_level_zstd` – 为二进制日志事务配置 zstd 压缩级别。较高的值会提高压缩比，从而进一步降低存储要求，但会增加压缩的 CPU 和内存使用量。默认值为 3，范围为 1-22。

这些参数允许您根据工作负载特征和资源可用性来微调二进制日志压缩。有关更多信息，请参阅 MySQL 文档中的 [Binary Log Transaction Compression](https://dev.mysql.com/doc/refman/8.4/en/binary-log-transaction-compression.html)。

二进制日志事务压缩具有以下主要优势：
+ 压缩会减小二进制日志的大小，对于大型事务或写入量大的工作负载尤其如此。
+ 较小的二进制日志可减少网络和 I/O 开销，提高复制性能。
+ `binlog_transaction_compression_level_zstd` 参数提供对在压缩比和资源消耗之间权衡的控制。

## 为多可用区数据库集群配置二进制日志事务压缩
<a name="USER_Binlog.MultiAZ.configuring"></a>

要为 RDS for MySQL 多可用区数据库集群配置二进制日志事务压缩，请修改相关的集群参数设置以满足您的工作负载要求。

### 控制台
<a name="USER_Binlog.MultiAZ.configuring-console"></a>

**启用二进制日志事务压缩**

1. 修改数据库集群参数组，以将 `binlog_transaction_compression` 参数设置为 `1`。

1. （可选）根据您的工作负载要求和资源可用性调整 `binlog_transaction_compression_level_zstd` 参数的值。

有关更多信息，请参阅 [修改数据库集群参数组中的参数](USER_WorkingWithParamGroups.ModifyingCluster.md)。

### AWS CLI
<a name="USER_Binlog.MultiAZ.configuring-cli"></a>

要使用 AWS CLI 配置二进制日志事务压缩，请执行 [modify-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html) 命令。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name your-cluster-parameter-group \
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```
对于：Windows  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name your-cluster-parameter-group ^
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```

### RDS API
<a name="USER_Binlog.MultiAZ.configuring-api"></a>

要使用 Amazon RDS API 配置二进制日志事务压缩，请执行 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html) 操作。

# 访问 MySQL 二进制日志
<a name="USER_LogAccess.MySQL.Binarylog"></a>

可使用 mysqlbinlog 实用程序从 RDS for MySQL 数据库实例下载或流式传输二进制日志。二进制日志下载到本地计算机，可以执行一些操作，例如使用 mysql 实用程序执行重放日志。有关使用 mysqlbinlog 实用程序的更多信息，请参阅 MySQL 文档中的[使用 mysqlbinlog 备份二进制日志文件](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-backup.html)。

要针对 Amazon RDS 实例运行 mysqlbinlog 实用工具，请使用下列选项：
+ `--read-from-remote-server` – 必需。
+ `--host` – 来自实例的端点的 DNS 名称。
+ `--port` – 实例使用的端口。
+ `--user` – 已获得 `REPLICATION SLAVE` 权限的 MySQL 用户。
+ `--password` – MySQL 用户的密码，或忽略密码值以让实用程序提示您输入密码。
+ `--raw` – 以二进制格式下载文件。
+ `--result-file` – 用于接收原始输出的本地文件。
+ `--stop-never` – 流式传输二进制日志文件。
+ `--verbose` – 使用 `ROW` 二进制日志格式时，包括此选项以将行事件视为伪 SQL 语句。有关 `--verbose` 选项的更多信息，请参阅 MySQL 文档中的 [mysqlbinlog 行事件显示](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-row-events.html)。
+ 指定一个或多个二进制日志文件的名称。要获取可用日志的列表，请使用 SQL 命令 `SHOW BINARY LOGS`。

有关 mysqlbinlog 选项的更多信息，请参阅 MySQL 文档中的 [mysqlbinlog - 处理二进制日志文件的实用程序](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html)。

以下示例显示如何使用 mysqlbinlog 实用程序。

对于 Linux、macOS 或 Unix：

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

对于 Windows：

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

数据库实例上的二进制日志必须保持可用，以备 mysqlbinlog 实用程序访问。要确保这些日志的可用性，请使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 存储过程并指定一个时段，以便您有足够的时间来下载日志。如果未设置此配置，Amazon RDS 会尽可能快地清除二进制日志，导致 mysqlbinlog 实用程序检索的二进制日志出现空白。

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

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

要显示当前设置，请使用 [mysql.rds\$1show\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_show_configuration) 存储过程。

```
call mysql.rds_show_configuration;
```

# Amazon RDS for Oracle 数据库日志文件
<a name="USER_LogAccess.Concepts.Oracle"></a>

可以使用 Amazon RDS 控制台或 API 访问 Oracle 警报日志、审核文件和跟踪文件。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

提供的 Oracle 审核文件是标准 Oracle 审核文件。Amazon RDS 支持 Oracle 精细审核（FGA）功能。但是，日志访问不提供对存储在 `SYS.FGA_LOG$` 表中并且可通过 `DBA_FGA_AUDIT_TRAIL` 视图访问的 FGA 事件的访问权限。

[https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) API 操作列出可用于数据库实例的 Oracle 日志文件，该操作会忽略 `MaxRecords` 参数，最多返回 1000 个记录。该调用返回 `LastWritten` 作为 POSIX 日期（单位：毫秒）。

**Topics**
+ [保留计划](#USER_LogAccess.Concepts.Oracle.Retention)
+ [使用 Oracle 跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles)
+ [将 Oracle 日志发布到 Amazon CloudWatch Logs](#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)
+ [访问警报日志和侦听器日志](#USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog)

## 保留计划
<a name="USER_LogAccess.Concepts.Oracle.Retention"></a>

如果日志文件变得非常大，则 Oracle 数据库引擎可能会轮换这些文件。要保留审核文件或跟踪文件，请下载这些文件。如果您将文件存储在本地，则可以降低 Amazon RDS 存储成本并为您的数据留出更多空间。

下表显示了 Amazon RDS 上的 Oracle 警报日志、审计文件和跟踪文件的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  警报日志  |   文本警报日志每天轮换，并具有由 Amazon RDS 管理的 30 天保留期。XML 警报日志至少保留七天。可以使用 `ALERTLOG` 视图访问此日志。  | 
|  审核文件  |   审核文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的审核文件。  | 
|  跟踪文件  |  跟踪文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的跟踪文件。  | 
|  侦听器日志  |   侦听器日志默认的保留期为七天。Amazon RDS 可能会删除超过 7 天的侦听器日志。  | 

**注意**  
审核文件和跟踪文件共享相同的保留配置。

## 使用 Oracle 跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles"></a>

下面介绍用于创建、刷新、访问和删除跟踪文件的 Amazon RDS 过程。

**Topics**
+ [列出文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest)
+ [生成跟踪文件并跟踪会话](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating)
+ [检索跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving)
+ [清除跟踪文件](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging)

### 列出文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest"></a>

可以使用两个过程中的任意一个过程来允许访问 `background_dump_dest` 路径中的任意文件。第一个过程可刷新视图（其中包含当前 `background_dump_dest` 中所有文件的列表）。

```
1. EXEC rdsadmin.manage_tracefiles.refresh_tracefile_listing;
```

刷新视图后，请查询以下视图来访问结果。

```
1. SELECT * FROM rdsadmin.tracefile_listing;
```

上述过程的替代方法是，使用 `FROM table` 以类似表的格式流式处理非关系数据以列出数据库目录内容。

```
1. SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP'));
```

下面的查询显示日志文件的文本。

```
1. SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','alert_dbname.log.date'));
```

在只读副本上，通过查询 `V$DATABASE.DB_UNIQUE_NAME` 获取 BDUMP 目录的名称。如果唯一名称为 `DATABASE_B`，则 BDUMP 目录为 `BDUMP_B`。以下示例查询副本上的 BDUMP 名称，然后使用此名称查询 `alert_DATABASE.log.2020-06-23` 的内容。

```
1. SELECT 'BDUMP' || (SELECT regexp_replace(DB_UNIQUE_NAME,'.*(_[A-Z])', '\1') FROM V$DATABASE) AS BDUMP_VARIABLE FROM DUAL;
2. 
3. BDUMP_VARIABLE
4. --------------
5. BDUMP_B
6. 
7. SELECT TEXT FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP_B','alert_DATABASE.log.2020-06-23'));
```

### 生成跟踪文件并跟踪会话
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating"></a>

由于没有任何 `ALTER SESSION` 限制，Oracle 中用于生成跟踪文件的许多标准方法对于 Amazon RDS 数据库实例仍然可用。为需要更大访问权限的跟踪文件提供了以下程序。


****  

|  Oracle 方法  |  Amazon RDS 方法 | 
| --- | --- | 
|  `oradebug hanganalyze 3 `  |  `EXEC rdsadmin.manage_tracefiles.hanganalyze; `  | 
|  `oradebug dump systemstate 266 `  |  `EXEC rdsadmin.manage_tracefiles.dump_systemstate;`  | 

您可以使用很多标准方法来跟踪连接到 Amazon RDS 中的 Oracle 数据库实例的各个会话。要启用对会话的跟踪，您可以运行 Oracle 提供的 PL/SQL 程序包中的子程序，如 `DBMS_SESSION` 和 `DBMS_MONITOR`。有关更多信息，请参阅 Oracle 文档中的[启用会话跟踪](https://docs.oracle.com/database/121/TGSQL/tgsql_trace.htm#GUID-F872D6F9-E015-481F-80F6-8A7036A6AD29)。

### 检索跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving"></a>

对于 Amazon RDS 管理的外部表，您可以使用标准 SQL 查询检索 `background_dump_dest` 中的任何跟踪文件。要使用此方法，必须执行此程序以将此表的位置设置到指定跟踪文件。

例如，可以使用前面提到的 `rdsadmin.tracefile_listing` 视图列出系统上的所有跟踪文件。然后，可以使用以下过程设置 `tracefile_table` 视图，从而使视图指向预定的跟踪文件。

```
1. EXEC rdsadmin.manage_tracefiles.set_tracefile_table_location('CUST01_ora_3260_SYSTEMSTATE.trc');
```

以下示例在当前架构中创建了一个外部表，并将表位置设定在提供的文件中。可以使用 SQL 查询将内容检索到本地文件中。

```
1. SPOOL /tmp/tracefile.txt
2. SELECT * FROM tracefile_table;
3. SPOOL OFF;
```

### 清除跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging"></a>

跟踪文件会累积并占用磁盘空间。Amazon RDS 默认清除跟踪文件和超过 7 天的日志文件。可以使用 `show_configuration` 过程查看和设置跟踪文件保留期。您应运行命令 `SET SERVEROUTPUT ON`，以便查看配置结果。

以下示例显示了当前的跟踪文件保留期，然后设置了新的跟踪文件保留期。

```
 1. # Show the current tracefile retention
 2. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
 3. NAME:tracefile retention
 4. VALUE:10080
 5. DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
 6. 		
 7. # Set the tracefile retention to 24 hours:
 8. SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440);
 9. SQL> commit;
10. 
11. #show the new tracefile retention
12. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
13. NAME:tracefile retention
14. VALUE:1440
15. DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
```

除定期清除过程外，您可以从 `background_dump_dest` 中手动删除文件。以下示例显示了如何清除保留时间已超过五分钟的所有文件。

```
EXEC rdsadmin.manage_tracefiles.purge_tracefiles(5);
```

您还可清除与特定模式匹配的所有文件（如果这样做，则不要包括 .trc 等文件扩展名）。以下示例介绍如何清除以 `SCHPOC1_ora_5935` 开头的所有文件。

```
1. EXEC rdsadmin.manage_tracefiles.purge_tracefiles('SCHPOC1_ora_5935');
```

## 将 Oracle 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs"></a>

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

Amazon RDS 将每个 Oracle 数据库日志作为日志组中的单独数据库流进行发布。例如，如果将导出功能配置为包括审核日志，则审核数据将存储在 `/aws/rds/instance/my_instance/audit` 日志组中的审核日志流中。下表总结了 RDS for Oracle 将日志发布到 Amazon CloudWatch Logs 的要求。


| 日志名称 | 要求 | 默认值 | 
| --- | --- | --- | 
|  提醒日志  |  无。您无法禁用此日志。  |  已启用  | 
|  跟踪日志  |  将 `trace_enabled` 参数设置 `TRUE` 或将其保留为默认值。  |  `TRUE`  | 
|  审核日志  |  将 `audit_trail` 参数设置为以下允许的任何值： <pre>{ none | os | db [, extended] | xml [, extended] }</pre>  |  `none`  | 
|  侦听器日志  |  无。您无法禁用此日志。  |  已启用  | 
|  Oracle Management Agent 日志  |  无。您无法禁用此日志。  |  已启用  | 

此 Oracle Management Agent 日志由下表中显示的日志组组成。


****  

| 日志名称 | CloudWatch 日志组 | 
| --- | --- | 
| emctl.log | oemagent-emctl | 
| emdctlj.log | oemagent-emdctlj | 
| gcagent.log | oemagent-gcagent | 
| gcagent\$1errors.log | oemagent-gcagent-errors | 
| emagent.nohup | oemagent-emagent-nohup | 
| secure.log | oemagent-secure | 

有关详细信息，请参阅 Oracle 文档中的 [查找 Management Agent 日志和跟踪文件](https://docs.oracle.com/en/enterprise-manager/cloud-control/enterprise-manager-cloud-control/13.4/emadm/locating-management-agent-log-and-trace-files1.html#GUID-9C710D78-6AA4-42E4-83CD-47B5FF4892DF)。

### 控制台
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.console"></a>

**从AWS 管理控制台将 Oracle 数据库日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

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

1. 选择**修改**。

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

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### AWS CLI
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.CLI"></a>

要发布 Oracle 日志，您可以使用具有以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 Oracle 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 Oracle 数据库实例。`--cloudwatch-logs-export-configuration` 值是 JSON 字符串数组。这些字符串可以是 `alert`、`audit`、`listener` 和 `trace` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '["trace","audit","alert","listener","oemagent"]' \
    --db-instance-class db.m5.large \
    --allocated-storage 20 \
    --engine oracle-ee \
    --engine-version 19.0.0.0.ru-2024-04.rur-2024-04.r1 \
    --license-model bring-your-own-license \
    --master-username myadmin \
    --manage-master-user-password
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration trace alert audit listener oemagent ^
    --db-instance-class db.m5.large ^
    --allocated-storage 20 ^
    --engine oracle-ee ^
    --engine-version 19.0.0.0.ru-2024-04.rur-2024-04.r1 ^
    --license-model bring-your-own-license ^
    --master-username myadmin ^
    --manage-master-user-password
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["trace","alert","audit","listener","oemagent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration EnableLogTypes=\"trace\",\"alert\",\"audit\",\"listener\",\"oemagent\"
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以禁用将审核和侦听器日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit","listener"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration DisableLogTypes=\"audit\",\"listener\"
```

### RDS API
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 Oracle 数据库日志。您可以使用以下参数调用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 Oracle 日志：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

根据您运行的 RDS 操作，可能需要其他参数。

## 访问警报日志和侦听器日志
<a name="USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog"></a>

您可以使用 Amazon RDS 控制台查看警告日志。您还可以使用以下 SQL 语句。

```
1. SELECT message_text FROM alertlog;
```

使用 Amazon CloudWatch Logs 访问侦听器日志。

**注意**  
当警报和侦听器日志超过 10MB 时，Oracle 会轮换这些日志，此时它们不会显示在 Amazon RDS 视图中。

# RDS for PostgreSQL 数据库日志文件
<a name="USER_LogAccess.Concepts.PostgreSQL"></a>

您可以监控以下类型的 日志文件：
+ PostgreSQL 日志
+ 升级日志
+ IAM 数据库身份验证错误日志
**注意**  
要启用 IAM 数据库身份验证错误日志，您必须先为 RDS for PostgreSQL 数据库实例启用 IAM 数据库身份验证。有关启用 IAM 数据库身份验证的更多信息，请参阅[启用和禁用 IAM 数据库身份验证](UsingWithRDS.IAMDBAuth.Enabling.md)。

RDS for PostgreSQL 将数据库活动记录到原定设置 PostgreSQL 日志文件中。对于本地 PostgreSQL 数据库实例，这些消息本地存储在 `log/postgresql.log` 中。对于 RDS for PostgreSQL 数据库实例，日志文件可用于 Amazon RDS 实例上。也可以通过 AWS 管理控制台访问这些日志，您可以在此处查看或下载它们。原定设置日志记录级别可捕获登录失败、严重服务器错误、死锁和查询失败。

有关如何查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。要了解有关 PostgreSQL 日志的更多信息，请参阅 [Working with Amazon RDS and Aurora PostgreSQL logs: Part 1](https://aws.amazon.com/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-1/) 和 [Working with Amazon RDS and Aurora PostgreSQL logs: Part 2](https://aws.amazon.com/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-2/)。

除了本主题中讨论的标准 PostgreSQL 日志外，RDS for PostgreSQL 还支持 PostgreSQL Audit 扩展（`pgAudit`）。大多数受监管行业和政府机构需要保留对数据所做更改的审计日志或审计跟踪，以符合法律要求。有关安装和使用 pgAudit 的更多信息，请参阅 [使用 pgAudit 记录数据库活动](Appendix.PostgreSQL.CommonDBATasks.pgaudit.md)。

**Topics**
+ [RDS for PostgreSQL 中的日志记录参数](USER_LogAccess.Concepts.PostgreSQL.overview.parameter-groups.md)
+ [为您的 RDS for PostgreSQL 数据库实例开启查询日志记录](USER_LogAccess.Concepts.PostgreSQL.Query_Logging.md)
+ [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)

# RDS for PostgreSQL 中的日志记录参数
<a name="USER_LogAccess.Concepts.PostgreSQL.overview.parameter-groups"></a>

您可以通过修改各种参数来自定义 RDS for PostgreSQL 数据库实例的日志记录行为。在下表中，您可以找到影响日志存储时间长度、何时轮换日志和是否以 CSV（逗号分隔值）格式输出日志的参数。您还可以找到发送到 STDERR 的文本输出以及其他设置。要更改可修改的参数的设置，请为以下项目使用自定义数据库参数组： RDS for PostgreSQL 实例。有关更多信息，请参阅。[Amazon RDS 数据库实例的数据库参数组](USER_WorkingWithDBInstanceParamGroups.md)


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
| log\$1destination | stderr | 设置日志的输出格式。原定设置为 `stderr`，但您也可以通过向设置中添加 `csvlog` 来指定逗号分隔值（CSV）。有关更多信息，请参阅 [设置日志目标（`stderr`、`csvlog`）](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)。 | 
| log\$1filename |  postgresql.log.%Y-%m-%d-%H  | 指定日志文件名的模式。除原定设置外，此参数还支持使用 `postgresql.log.%Y-%m-%d` 和 `postgresql.log.%Y-%m-%d-%H%M` 作为文件名模式。 | 
| log\$1line\$1prefix | %t:%r:%u@%d:[%p]: | 为写入 `stderr` 的每个日志行定义前缀，以记录时间（%t）、远程主机（%r）、用户（%u）、数据库（%d）和进程 ID（%p）。 | 
| log\$1rotation\$1age | 60 | 此分钟数后，将自动轮换日志文件。您可以在 1 到 1440 分钟的范围内更改此值。有关更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| log\$1rotation\$1size | – | 日志自动轮换的大小（kB）。原定设置情况下，不使用此参数，因为日志是根据 `log_rotation_age` 参数轮换的。要了解更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| rds.log\$1retention\$1period | 4320 | 超过指定分钟数的 PostgreSQL 日志将被删除。默认值为 4320 分钟，表示系统将在 3 天后删除日志文件。有关更多信息，请参阅 [设置日志保留期](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)。 | 

要识别应用程序问题，您可以在日志中查找查询失败、登录失败、死锁和致命的服务器错误。例如，假设您将旧版应用程序从 Oracle 转换为 Amazon RDS PostgreSQL，但部分查询可能未正确转换。这些格式不正确的查询会生成错误消息，您可以在日志中找到这些错误消息以帮助识别问题。有关日志记录查询的更多信息，请参阅 [为您的 RDS for PostgreSQL 数据库实例开启查询日志记录](USER_LogAccess.Concepts.PostgreSQL.Query_Logging.md)。

在以下主题中，您可以找到有关如何设置各种参数（用于控制 PostgreSQL 日志的基本详细信息）的信息。

**Topics**
+ [设置日志保留期](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)
+ [设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)
+ [设置日志目标（`stderr`、`csvlog`）](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)
+ [了解 log\$1line\$1prefix 参数](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)

## 设置日志保留期
<a name="USER_LogAccess.Concepts.PostgreSQL.log_retention_period"></a>

`rds.log_retention_period` 参数指定 RDS for PostgreSQL 数据库实例将其日志文件保留多长时间。原定设置为 3 天（4320 分钟），但您可以将此值设置为 1 天（1440 分钟）到 7 天（10080 分钟）之间的任意值。确保您的 RDS for PostgreSQL 数据库实例具有足够的存储空间，可将日志文件保留一段时间。

建议您将日志定期发布到 Amazon CloudWatch Logs，以便您可以在日志从 RDS for PostgreSQL 数据库实例中删除很久之后查看和分析系统数据。有关更多信息，请参阅 [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.PostgreSQL.md#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)。

## 设置日志文件轮换
<a name="USER_LogAccess.Concepts.PostgreSQL.log_rotation"></a>

原定设置情况下，Amazon RDS 每小时都会创建新的日志文件。计时由 `log_rotation_age` 参数控制。此参数的原定设置值为 60（分钟），但您可以将其设置为 1 分钟到 24 小时（1440 分钟）之间的任意值。轮换时，系统将创建一个新的不同日志文件。该文件根据 `log_filename` 参数指定的模式命名。

也可以根据日志文件的大小进行轮换（如 `log_rotation_size` 参数指定）。此参数指定在日志达到指定的大小（以千字节为单位）时应轮换日志。对于 RDS for PostgreSQL 数据库实例，`log_rotation_size` 未设置，也就是说，未指定任何值。但是，您可以将该参数设置为 0-2097151KB（千字节）之间。

日志文件名基于在 `log_filename` 参数中指定的文件名模式。此参数的可用设置如下：
+ `postgresql.log.%Y-%m-%d` – 日志文件名的原定设置格式。在日志文件的名称中包括年、月和日。
+ `postgresql.log.%Y-%m-%d-%H` – 在日志文件名格式中包含小时。

有关更多信息，请参阅 PostgreSQL 文档中的 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE) 和 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE)。

## 设置日志目标（`stderr`、`csvlog`）
<a name="USER_LogAccess.Concepts.PostgreSQL.Log_Format"></a>

默认情况下，Amazon RDS PostgreSQL 以标准错误 (stderr) 格式生成日志。此格式是 `log_destination` 参数的原定设置。每条消息都使用在 `log_line_prefix` 参数中指定的模式作为前缀。有关更多信息，请参阅 [了解 log\$1line\$1prefix 参数](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)。

RDS for PostgreSQL 也可以按 `csvlog` 格式生成日志。`csvlog` 用于将日志数据作为逗号分隔值（CSV）数据进行分析。例如，假设您使用 `log_fdw` 扩展将日志作为外部表处理。在 `stderr` 日志文件上创建的外部表包含一个列，其中包含日志事件数据。通过向 `csvlog` 参数添加 `log_destination`，可以获得 CSV 格式的日志文件，其中对外部表的多个列进行了分界。您现在可以更轻松地对日志进行排序和分析。要了解如何将 `log_fdw` 与 `csvlog` 结合使用，请参阅 [使用 log\$1fdw 扩展通过 SQL 访问数据库日志](CHAP_PostgreSQL.Extensions.log_fdw.md)。

如果您为此参数指定 `csvlog`，请注意将同时生成 `stderr` 和 `csvlog` 文件。确保监控日志所占用的存储空间，同时考虑 `rds.log_retention_period` 以及影响日志存储和周转的其他设置。使用 `stderr` 和 `csvlog` 会使日志占用的存储空间增加一倍以上。

如果将 `csvlog` 添加到 `log_destination` 并想单独恢复到 `stderr`，则需要重置参数。为此，请打开 Amazon RDS 控制台，然后为您的实例打开自定义数据库参数组。选择 `log_destination` 参数，选择 **Edit parameter**（编辑参数），然后选择 **Reset**（重置）。

有关配置日志记录的更多信息，请参阅[使用 Amazon RDS 和 Aurora PostgreSQL 日志：第 1 部分](https://aws.amazon.com/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-1/)。

## 了解 log\$1line\$1prefix 参数
<a name="USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix"></a>

`stderr` 日志格式将由 `log_line_prefix` 参数指定的详细信息作为每条日志消息的前缀。默认值为：

```
%t:%r:%u@%d:[%p]:t
```

从 Aurora PostgreSQL 版本 16 开始，还可以选择：

```
%m:%r:%u@%d:[%p]:%l:%e:%s:%v:%x:%c:%q%a
```

发送到 stderr 的每个日志条目都包含以下基于所选值的信息：
+ `%t`：日志条目的时间，不带毫秒
+ `%m`：日志条目的时间，带毫秒
+  `%r` – 远程主机地址
+  `%u@%d` – 用户名 @ 数据库名称
+  `[%p]` – 进程 ID（如果有）
+  `%l`：每个会话的日志行号 
+  `%e`：SQL 错误代码 
+  `%s`：进程开始时间戳 
+  `%v`：虚拟事务 ID 
+  `%x`：事务 ID 
+  `%c`：会话 ID 
+  `%q`：非会话终止器 
+  `%a`：应用程序名称 

# 为您的 RDS for PostgreSQL 数据库实例开启查询日志记录
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging"></a>

通过设置下表中列出的一些参数，您可以收集有关数据库活动的更多详细信息，包括查询、等待锁定的查询、检查点和许多其他详细信息。本主题重点介绍日志记录查询。


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
| log\$1connections | – | 记录每个成功的连接。 | 
| log\$1disconnections | – | 记录每个会话的结束及其持续时间。 | 
| log\$1checkpoints | 1 | 记录每个检查点。 | 
| log\$1lock\$1waits | – | 记录长锁定等待次数。默认情况下，不设置此参数。 | 
| log\$1min\$1duration\$1sample | – | 设置如超出则记录语句示例的最短执行时间（ms）。示例数量使用 log\$1statement\$1sample\$1rate 参数进行设置。 | 
| log\$1min\$1duration\$1statement | – | 任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。默认情况下，不设置此参数。开启该参数可帮助查找未优化的查询。 | 
| log\$1statement | – | 设置所记录的语句类型。默认情况下，未设置此参数，但您可以将其更改为 `all`、`ddl` 或 `mod`，以指定要记录的 SQL 语句的类型。如果您为此参数指定了与 `none` 不同的任何值，还应采取其他措施来防止日志文件中的密码泄露。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。 | 
| log\$1statement\$1sample\$1rate | – | 超过在 `log_min_duration_sample` 中指定的时间的语句百分比，以介于 0.0 和 1.0 之间的浮点值表示。 | 
| log\$1statement\$1stats | – | 向服务器日志写入累计性能统计数据。 | 

## 使用日志记录查找执行缓慢的查询
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.using"></a>

您可以记录 SQL 语句和查询，以帮助查找执行缓慢的查询。您可以通过修改本节中概述的 `log_statement` 和 `log_min_duration` 参数的设置来开启此功能。在为 RDS for PostgreSQL 数据库实例开启查询日志记录之前，您应该了解日志中可能存在的密码泄露以及如何降低风险。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。

接下来，您可以了解有关 `log_statement` 和 `log_min_duration` 参数的参考信息。log\$1statement

此参数指定应发送到日志的 SQL 语句的类型。默认值为 `none`。如果您将此参数更改为 `all`、`ddl` 或 `mod`，请务必采取建议的操作来降低在日志中泄露密码的风险。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。

**全部**  
记录所有语句。建议将此设置用于调试目的。

**ddl**  
记录所有数据定义语言（DDL）语句，例如 CREATE、ALTER、DROP 等。

**mod**  
记录所有可修改数据的 DDL 语句和数据操作语言（DML）语句，例如 INSERT、UPDATE 和 DELETE。

**none**  
不记录任何 SQL 语句。我们建议使用此设置，以避免在日志中泄露密码的风险。log\$1min\$1duration\$1statement

任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。默认情况下，不设置此参数。开启该参数可帮助查找未优化的查询。

**–1–2147483647**  
如超过即记录语句的运行时间的毫秒数（ms）。

**设置查询日志记录**

这些步骤假设您的 RDS for PostgreSQL 数据库实例使用自定义数据库参数组。

1. 将 `log_statement` 参数设置为 `all`。以下示例显示了使用此参数设置写入 `postgresql.log` 文件的信息。

   ```
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence
   FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s
   ORDER BY s.confidence DESC;
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats:
   ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed
   ! [0.025146 s user, 0.000000 s system total]
   ! 36644 kB max resident size
   ! 0/8 [0/8] filesystem blocks in/out
   ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps
   ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
   ! 19/0 [27/0] voluntary/involuntary context switches
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence
   FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s
   ORDER BY s.confidence DESC;
   2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1
   2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC;
   ----------------------- END OF LOG ----------------------
   ```

1. 设置 `log_min_duration_statement` 参数。以下示例显示了参数设置为 `postgresql.log` 时写入 `1` 文件的信息。

   将记录超过在 `log_min_duration_statement` 参数中指定的持续时间的查询。下面是一个示例。您可以在 Amazon RDS 控制台中查看 RDS for PostgreSQL 数据库实例的日志文件。

   ```
   2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments;
   2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms
   2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time
   2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB
   ----------------------- END OF LOG ----------------------
   ```

### 降低使用查询日志记录时泄露密码的风险
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk"></a>

我们建议您将 `log_statement` 保持设置为 `none`，以避免泄露密码。如果您将 `log_statement` 设置为 `all`、`ddl` 或 `mod`，我们建议您采取以下一个或多个步骤。
+ 对于客户端，加密敏感信息。有关更多信息，请参阅 PostgreSQL 文档中的[加密选项](https://www.postgresql.org/docs/current/encryption-options.html)。使用 `ENCRYPTED` 和 `UNENCRYPTED` 语句的 `CREATE`（和 `ALTER`）选项。有关更多信息，请参阅 PostgreSQL 文档中的 [CREATE USER](https://www.postgresql.org/docs/current/sql-createuser.html)。
+ 对于您的 RDS for PostgreSQL 数据库实例，请设置并使用 PostgreSQL Auditing（pgAudit）扩展。此扩展编辑发送到日志的 CREATE 和 ALTER 语句中的敏感信息。有关更多信息，请参阅 [使用 pgAudit 记录数据库活动](Appendix.PostgreSQL.CommonDBATasks.pgaudit.md)。
+ 限制对 CloudWatch Logs 的访问。
+ 使用更强的身份验证机制，如 IAM。

## 将 PostgreSQL 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs"></a>

要在高持久性存储中存储 PostgreSQL 日志记录，您可以使用 Amazon CloudWatch Logs。利用 CloudWatch Logs，您还可以对日志数据进行实时分析，并使用 CloudWatch 查看指标和创建警报。例如，如果您将 `log_statement` 设置为 `ddl`，则可以将告警设置为只要执行 DDL 语句就发出提示。在创建 RDS for PostgreSQL 数据库实例的过程中，您可以选择让 PostgreSQL 日志上载到 CloudWatch Logs。如果您当时选择不上载日志，可以稍后修改您的实例，以便从那时起开始上载日志。换句话说，不会上载现有日志。只有在修改后的 RDS for PostgreSQL 数据库实例上创建了新日志时，才上载这些新日志。

所有目前可用的 RDS for PostgreSQL 版本都支持将日志文件发布到 CloudWatch Logs。有关更多信息，请参阅《Amazon RDS for PostgreSQL 版本注释》**中的 [Amazon RDS for PostgreSQL 更新](https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html)。

要使用 CloudWatch Logs，请为 PostgreSQL 数据库实例配置 RDS 以将日志数据发布到日志组。

您可以将以下日志类型发布到 CloudWatch Logs for RDS for PostgreSQL：
+ PostgreSQL 日志
+ 升级日志 
+ IAM 数据库身份验证错误日志

在完成配置后，Amazon RDS 将日志事件发布到 CloudWatch 日志组内的日志流。例如，PostgreSQL 日志数据存储在日志组 `/aws/rds/instance/my_instance/postgresql` 中。要查看您的日志，请在 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 处打开 CloudWatch 控制台。

### 控制台
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.CON"></a>

**使用控制台将 PostgreSQL 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要修改的数据库实例，然后选择 **Modify (修改)**。

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

   **Log exports (日志导出)** 部分仅适用于支持发布到 CloudWatch Logs 的 PostgreSQL 版本。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### AWS CLI
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.CLI"></a>

您可以使用 AWS CLI 来发布 PostgreSQL 日志。您可以调用带以下参数的 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令。
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 CLI 命令来发布 PostgreSQL 日志：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example 修改实例以将日志发布到 CloudWatch Logs**  
以下示例修改现有的 PostgreSQL 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `postgresql` 和 `upgrade` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'
```
对于：Windows  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql","upgrade"]}'
```

**Example 创建实例以将日志发布到 CloudWatch Logs**  
以下示例将创建一个 PostgreSQL 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `postgresql` 和 `upgrade` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \
4.     --db-instance-class db.m4.large \
5.     --engine postgres
```
对于：Windows  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine postgres
```

### RDS API
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 PostgreSQL 日志。您可以使用以下参数调用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 PostgreSQL 日志：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

根据您运行的操作，可能需要其他参数。

 