

# 适用于 MySQL 数据库实例的选项
<a name="Appendix.MySQL.Options"></a>

在下文中，您可以找到适用于运行 MySQL 数据库引擎的 Amazon RDS 实例的选项或其他功能的说明。要启用这些选项，您可以将它们添加到自定义选项组中，然后将选项组关联到数据库实例。有关使用选项组的详细信息，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

Amazon RDS 支持 MySQL 的以下选项：


****  

| 选项 | 选项 ID | 引擎版本 | 
| --- | --- | --- | 
|  [MySQL 的 MariaDB 审计插件支持](Appendix.MySQL.Options.AuditPlugin.md)  |  `MARIADB_AUDIT_PLUGIN`  | 所有 MySQL 8.4 版本MySQL 8.0.28 及更高的 8.0 版本所有 MySQL 5.7 版本 | 
|  [MySQL memcached 支持](Appendix.MySQL.Options.memcached.md)  |  `MEMCACHED`  |  所有 MySQL 5.7 和 8.0 版本  | 

# MySQL 的 MariaDB 审计插件支持
<a name="Appendix.MySQL.Options.AuditPlugin"></a>

Amazon RDS 基于开源 MariaDB 审计插件为 MySQL 数据库实例提供审计插件。有关更多信息，请参阅 [MySQL Server GitHub 存储库的审计插件](https://github.com/aws/audit-plugin-for-mysql)。

**注意**  
MySQL 的审计插件基于 MariaDB 审计插件。在本文中，我们将其称为 MariaDB 审计插件。

MariaDB 审计插件记录数据库活动，包括用户登录数据库和针对数据库运行的查询等。数据库活动记录存储在日志文件中。

## 审计插件选项设置
<a name="Appendix.MySQL.Options.AuditPlugin.Options"></a>

Amazon RDS 支持 MariaDB 审计插件选项的以下设置。


| 选项设置 | 有效值 | 默认值 | 描述 | 
| --- | --- | --- | --- | 
| `SERVER_AUDIT_FILE_PATH` | `/rdsdbdata/log/audit/` | `/rdsdbdata/log/audit/` |  日志文件的位置。日志文件包含 `SERVER_AUDIT_EVENTS` 中指定的活动记录。有关更多信息，请参阅“[查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)”和“[MySQL 数据库日志文件](USER_LogAccess.Concepts.MySQL.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATE_SIZE` | 1–1000000000 | 1000000 |  达到该字节大小时，会导致文件轮换。有关更多信息，请参阅“[RDS for MySQL 数据库日志概览](USER_LogAccess.MySQL.LogFileSize.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATIONS` | 0–100 | 9 |  当 `server_audit_output_type=file` 时要保存的日志轮换数量。如果设置为 0，则日志文件从不轮换。有关更多信息，请参阅“[RDS for MySQL 数据库日志概览](USER_LogAccess.MySQL.LogFileSize.md)”和“[下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)”。  | 
| `SERVER_AUDIT_EVENTS` | `CONNECT`, `QUERY`, `QUERY_DDL`, `QUERY_DML`, `QUERY_DML_NO_SELECT`, `QUERY_DCL` | `CONNECT`, `QUERY` |  要在日志中记录的活动类型。安装 MariaDB 审核插件可自行登录。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html) MySQL 不支持 `TABLE`。  | 
| `SERVER_AUDIT_INCL_USERS` | 多个逗号分隔值 | 无 |  仅包括指定用户的活动。默认情况下，会记录所有用户的活动。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果将值添加到 `SERVER_AUDIT_INCL_USERS`，请确保未向 `SERVER_AUDIT_EXCL_USERS` 中添加任何值。  | 
| `SERVER_AUDIT_EXCL_USERS` | 多个逗号分隔值 | 无 |  排除指定用户的活动。默认情况下，会记录所有用户的活动。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果将值添加到 `SERVER_AUDIT_EXCL_USERS`，请确保未向 `SERVER_AUDIT_INCL_USERS` 中添加任何值。  `rdsadmin` 用户会每秒查询一次数据库，以检查数据库的运行状况。根据您的其他设置，此活动可能导致您的日志文件大小非常快速地增长。如果您不需要记录此活动，请将 `rdsadmin` 用户添加到 `SERVER_AUDIT_EXCL_USERS` 列表。   `CONNECT`会始终为所有用户记录 活动，即使是该选项设置指定的用户。   | 
| `SERVER_AUDIT_LOGGING` | `ON` | `ON` |  日志记录处于活动状态。唯一有效值为 `ON`。Amazon RDS 不支持停用日志记录。如果您要停用日志记录，请删除 MariaDB 审核插件。有关更多信息，请参阅“[删除 MariaDB 审核插件](#Appendix.MySQL.Options.AuditPlugin.Remove)”。  | 
| `SERVER_AUDIT_QUERY_LOG_LIMIT` | 0–2147483647 | 1024 |  记录中查询字符串的长度限制。  | 

## 添加 MariaDB 审核插件
<a name="Appendix.MySQL.Options.AuditPlugin.Add"></a>

向数据库实例添加 MariaDB 审核插件的一般过程如下：
+ 创建新的选项组，或者复制或修改现有选项组
+ 向选项组添加选项
+ 将选项组与数据库实例相关联

添加 MariaDB 审核插件后，您无需重新启动数据库实例。一旦选项组处于活动状态，审核便会立即开始。

**重要**  
将 MariaDB 审计插件添加到数据库实例可能会导致中断。我们建议在维护时段或数据库工作负载较低时添加 MariaDB 审计插件。

**添加 MariaDB 审核插件**

1. 确定您想要使用的选项组。您可以创建新的选项组，或使用现有选项组。如果您想使用现有选项组，请跳到下一步。否则，请创建自定义数据库选项组。为**引擎**选择 **mysql**，并为**主引擎版本**选择 **5.7**、**8.0** 或 **8.4**。有关更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 将 **MARIADB\$1AUDIT\$1PLUGIN** 选项添加到选项组中，然后配置选项设置。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MySQL.Options.AuditPlugin.Options)。

1. 将选项组应用到新的或现有的数据库实例。
   + 对于新数据库实例，您可以在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，您可以通过修改实例并附加新的选项组来应用选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

## 审计日志格式
<a name="Appendix.MySQL.Options.AuditPlugin.LogFormat"></a>

日志文件表示为 UTF-8 格式的逗号分隔变量 (CSV) 文件。

**提示**  
日志文件条目不按先后顺序排列。要对条目进行排序，请使用时间戳值。要查看最新事件，您可能需要查看所有日志文件。为了更加灵活地对日志数据进行排序和搜索，请启用设置将审计日志上传到 CloudWatch，再使用 CloudWatch 界面进行查看。  
 若要查看包含更多字段类型和 JSON 格式输出的审计数据，还可以使用数据库活动流功能。有关更多信息，请参阅 [使用数据库活动流监控 Amazon RDS](DBActivityStreams.md)。

审核日志文件的各行按照指定顺序包含以下逗号分隔的信息：


| 字段 | 描述 | 
| --- | --- | 
|  timestamp  |  所记录的事件的 `YYYYMMDD` 后跟 `HH:MI:SS`（24 小时制）。  | 
|  serverhost  |  记录了其事件的实例的名称。  | 
|  username  |  已连接用户的用户名。  | 
|  host  |  用户发起连接时所在的主机。  | 
|  connectionid  |  所记录操作的连接 ID 号。  | 
|  queryid  |  查询 ID 号，可用于查找关系表事件和相关查询。对于 `TABLE` 事件，添加多行。  | 
|  operation  |  记录的操作类型。可能值为：`CONNECT`、`QUERY`、`READ`、`WRITE`、`CREATE`、`ALTER`、`RENAME` 和 `DROP`。  | 
|  database  |  活动数据库，由 `USE` 命令设置。  | 
|  object  |  对于 `QUERY` 事件，此值指示数据库执行的查询。对于 `TABLE` 事件，它指示表名。  | 
|  retcode  |  所记录操作的返回代码。  | 
|  connection\$1type  |  与服务器的连接的安全状态。可能的值有： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)  | 

## 查看和下载 MariaDB 审计插件日志
<a name="Appendix.MySQL.Options.AuditPlugin.Log"></a>

启用 MariaDB 审计插件后，您将以访问其他任何基于文本的日志文件的相同方式来访问日志文件中的结果。审计日志文件位于 `/rdsdbdata/log/audit/`。有关在控制台中查看日志文件的信息，请参阅 [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)。有关下载日志文件的信息，请参阅 [下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)。

## 修改 MariaDB 审计插件设置
<a name="Appendix.MySQL.Options.AuditPlugin.ModifySettings"></a>

启用 MariaDB 审计插件后，您可以修改各项设置。有关如何修改选项设置的更多信息，请参阅 [修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MySQL.Options.AuditPlugin.Options)。

## 删除 MariaDB 审核插件
<a name="Appendix.MySQL.Options.AuditPlugin.Remove"></a>

Amazon RDS 不支持关闭 MariaDB 审核插件中的日志记录。不过，您可以从数据库实例删除插件。在删除 MariaDB 审核插件时，将自动重新启动数据库实例以停止审核。

要从数据库实例中删除 MariaDB 审核插件，请执行以下操作之一：
+ 从 MariaDB 审核插件选项所属的选项组中删除 MariaDB 审核插件选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)” 
+ 修改数据库实例，并指定不包含插件的其他选项组。此更改会影响单个数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

# MySQL memcached 支持
<a name="Appendix.MySQL.Options.memcached"></a>

Amazon RDS 支持对 InnoDB 表使用 `memcached` 接口，该接口已在 MySQL 5.6 中引入。通过 `memcached` API，应用程序可以按照 NoSQL 密钥值数据存储的类似使用方式来使用 InnoDB 表。

**注意**  
Memcached 接口在 MySQL 8.4 上不再可用。当您将数据库实例升级到 MySQL 8.4 时，必须在现有选项组中禁用 `memcached`。

`memcached` 接口是基于键的简单缓存。应用程序使用 `memcached` 插入、操作和检索缓存中的“键-值”数据对。MySQL 5.6 引入了一个插件来实现一个守护进程服务，该服务通过 `memcached` 协议公开 InnoDB 表中的数据。有关 MySQL `memcached` 插件的更多信息，请参阅 [InnoDB 与 memcached 的集成](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html)。

**实现对 RDS for MySQL 数据库实例的 memcached 支持**

1. 确定用于控制对 `memcached` 接口的访问的安全组。如果已在使用 SQL 接口的应用程序集与访问 `memcached` 接口的应用程序集相同，则可使用 SQL 接口所用的现有 VPC 安全组。如果访问 `memcached` 接口的系列应用程序与之不同，则请定义新的 VPC 或数据库安全组。有关管理安全组的更多信息，请参阅 [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。

1. 创建自定义数据库选项组，引擎类型选择 MySQL 并选择版本。有关创建选项组的更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 将 `MEMCACHED` 选项添加到该选项组。指定 `memcached` 接口将使用的端口以及用于控制对接口的访问的安全组。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 如有必要，修改选项设置以配置 `memcached` 参数。有关如何修改选项设置的更多信息，请参阅 [修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

1. 将选项组应用于实例。在应用选项组时，Amazon RDS 会为该实例启用 `memcached` 支持：
   + 您可以通过在启动实例时指定自定义选项组来启用新实例的 `memcached` 支持。有关启动 MySQL 实例的更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
   + 您可以通过在修改实例时指定自定义选项组来启用现有实例的 `memcached` 支持。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

1. 指定 MySQL 表中哪些列可以通过 `memcached` 接口进行访问。`memcached` 插件会在名为 `containers` 的专用数据库中创建名为 `innodb_memcache` 的目录表。在 `containers` 表中插入行，使之映射通过 `memcached` 访问的 InnoDB 表。在 InnoDB 表中指定用于存储 `memcached` 键值的列，并指定一个或多个用于存储与该键关联的数据值的列。您还指定一个 `memcached` 应用程序用于引用列集的名称。有关在 `containers` 表中插入行的详细信息，请参阅 [InnoDB memcached 插件内部信息](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html)。有关映射 InnoDB 表并通过 `memcached` 访问该表的示例，请参阅[为 InnoDB memcached 插件编写应用程序](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html)。

1. 如果访问 `memcached` 接口的应用程序与使用 SQL 接口的应用程序位于不同的计算机或 EC2 实例上，请将这些计算机的连接信息添加到与 MySQL 实例关联的 VPC 安全组。有关管理安全组的更多信息，请参阅 [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。

您通过修改该实例并指定 MySQL 版本的默认选项组来关闭实例的 `memcached` 支持。有关修改 数据库实例的更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

## MySQL memcached 安全注意事项
<a name="w2aac47c83c15c13"></a>

`memcached` 协议不支持用户身份验证。有关 MySQL `memcached` 安全注意事项的更多信息，请参阅 MySQL 文档中的 [InnoDB memcached 插件的安全注意事项](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html)。

您可以采取下列操作来帮助提高 `memcached` 接口的安全性：
+ 在向选项组添加 `MEMCACHED` 选项时，指定一个与默认 11211 不同的端口。
+ 确保将 `memcached` 接口与用于限制对巳知的可信客户端地址和 EC2 实例的访问的 VPC 安全组关联。有关管理安全组的更多信息，请参阅 [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。

## MySQL memcached 连接信息
<a name="w2aac47c83c15c15"></a>

要访问 `memcached` 接口，应用程序必须同时指定 Amazon RDS 实例的 DNS 名称和 `memcached` 端口号。例如，如果实例的 DNS 名称为 `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com`，并且内存缓存接口使用端口 11212，PHP 中指定的连接信息将为：

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**要查找 MySQL DB 实例的 DNS 名称和 memcached 端口，请执行以下操作：**

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

1. 在 AWS 管理控制台中的右上角，选择包含该数据库实例的地区。

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

1. 选择 MySQL 数据库实例名称以显示其详细信息。

1. 在**连接**部分，记下**终端节点**字段的值。DNS 名称与终端节点相同。另请注意，**连接**部分中的端口未用于访问 `memcached` 接口。

1. 在**详细信息**部分，记下**选项组**字段中列出的名称。

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

1. 选择 MySQL 数据库实例所用的选项组名称以显示该选项组的详细信息。在**选项**部分，记下 **MEMCACHED** 选项的**端口**设置值。

## MySQL memcached 选项设置
<a name="w2aac47c83c15c17"></a>

Amazon RDS 将 MySQL `memcached` 参数公开为 Amazon RDS `MEMCACHED` 选项中的选项设置。

### MySQL memcached 参数
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE` – 一个整数，用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 `memcached` 读取操作（获取）。允许的值是 1 到 4294967295；默认值为 1。此选项在重新启动实例后生效。
+  `DAEMON_MEMCACHED_W_BATCH_SIZE` – 一个整数，用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 `memcached` 写入操作，如添加、设置或者 incr。允许的值是 1 到 4294967295；默认值为 1。此选项在重新启动实例后生效。
+  `INNODB_API_BK_COMMIT_INTERVAL` – 一个整数，用于指定多长时间自动提交一次使用 InnoDB `memcached` 接口的闲置连接。允许的值是 1 到 1073741824；默认值为 5。该选项会立即生效，无需重新启动实例。
+  `INNODB_API_DISABLE_ROWLOCK` – 一个布尔值，该值在使用 InnoDB `memcached` 接口时禁用 (1 (true)) 或启用 (0 (false)) 行锁。默认为 0 (false)。此选项在重新启动实例后生效。
+  `INNODB_API_ENABLE_MDL` –一个布尔值，设置为 0(false) 会锁定 InnoDB `memcached` 插件使用的表，以便 DDL 无法通过 SQL 接口删除或者更改该表。默认为 0 (false)。此选项在重新启动实例后生效。
+  `INNODB_API_TRX_LEVEL` – 一个整数，用于指定 `memcached` 接口处理的查询的事务隔离级别。容许值是 0 到 3。默认值为 0。此选项在重新启动实例后生效。

Amazon RDS 配置以下 MySQL `memcached` 参数，这些参数无法修改：`DAEMON_MEMCACHED_LIB_NAME`、`DAEMON_MEMCACHED_LIB_PATH` 和 `INNODB_API_ENABLE_BINLOG`。在 Amazon RDS 中，也以单个 `daemon_memcached_options` 选项设置是形式提供 MySQL 管理员使用 `MEMCACHED` 设置的参数。

### MySQL daemon\$1memcached\$1options 参数
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL` – 一个字符串，用于指定要使用的绑定协议。允许的值是 `auto`、`ascii` 或 `binary`。默认值为 `auto`，这意味着服务器与客户端自动协商协议。此选项在重新启动实例后生效。
+  `BACKLOG_QUEUE_LIMIT` 一个整数，用于指定可等待 处理的网络连接的数目。`memcached`增大此限值会减少无法连接到 `memcached` 实例的客户端所收到的错误，但不会提高服务器性能。允许的值是 1 到 2048；默认值为 1024。此选项在重新启动实例后生效。
+  `CAS_DISABLED` – 一个布尔值，该值启用 (1 (true)) 或禁用 (0 (false)) 比较和交换 (CAS)，它可使每个项大小减少 8 个字节。默认为 0 (false)。此选项在重新启动实例后生效。
+  `CHUNK_SIZE` – 一个整数，用于指定为最小项的键、值和标志所分配的最小区块大小（计算单位：字节）。容许值是 1 到 48。默认为 48，且可以使用较低的值显著地提高内存效率。此选项在重新启动实例后生效。
+  `CHUNK_SIZE_GROWTH_FACTOR` – 一个浮点数，用于控制新区块的大小。新区块的大小是前一区块时间的大小 `CHUNK_SIZE_GROWTH_FACTOR`。允许的值是 1 到 2；默认值为 1.25。此选项在重新启动实例后生效。
+  `ERROR_ON_MEMORY_EXHAUSTED` – 一个布尔值，当该值设置为 1 (true) 时，将指定在没有更多内存来存储项时 `memcached` 将返回错误，而不会返回逐出项。如果设置为 0(false)，当没有更多内存时，`memcached` 将移出项目。默认为 0 (false)。此选项在重新启动实例后生效。
+  `MAX_SIMULTANEOUS_CONNECTIONS` – 一个整数，用于指定最大并发连接数。将这个值设置为低于 10 的任何数值可防止 MySQL 启动。允许的值是 10 到 1024；默认值为 1024。此选项在重新启动实例后生效。
+  `VERBOSITY` – 一个字符串，用于指定 `memcached` 服务在 MySQL 错误日志中记录的信息级别。默认值为 v。此选项在重新启动实例后生效。允许的许值为：
  +  `v` – 记录运行主事件循环时出现的错误和警告。
  +  `vv` – 除了 v 选项记录的信息之外，还会记录每个客户端命令和响应。
  +  `vvv` – 除了 vv 选项记录的信息之外，还会记录内部状态转换。

Amazon RDS 配置这些 MySQL `DAEMON_MEMCACHED_OPTIONS` 参数，且无法进行修改：`DAEMON_PROCESS`、`LARGE_MEMORY_PAGES`、`MAXIMUM_CORE_FILE_LIMIT`、`MAX_ITEM_SIZE`、`LOCK_DOWN_PAGE_MEMORY`、`MASK`、`IDFILE`、`REQUESTS_PER_EVENT`、`SOCKET` 和 `USER`。