

# Amazon RDS 上的 MySQL 功能支持
<a name="MySQL.Concepts.FeatureSupport"></a>

RDS for MySQL 支持 MySQL 的大部分特性和功能。有些功能可能仅提供有限支持或受限制的权限。

您可以在[数据库的新增功能？](https://aws.amazon.com/about-aws/whats-new/database/)页面上筛选新的 Amazon RDS 特征。对于 **Products (产品)**，请选择 **Amazon RDS**。然后使用 **MySQL 2022** 之类的关键词进行搜索。

**注意**  
以下列表并不详尽。

**Topics**
+ [

## Amazon RDS for MySQL 主要版本上的 MySQL 功能支持
](#MySQL.Concepts.FeatureSupport.MajorVersions)
+ [

## 支持的 RDS for MySQL 存储引擎
](#MySQL.Concepts.Storage)
+ [

## 在 Amazon RDS 上通过 MySQL 使用 memcached 和其他选项
](#MySQL.Concepts.General.Options)
+ [

## Amazon RDS 上 MySQL 的 InnoDB 缓存预热
](#MySQL.Concepts.InnoDBCacheWarming)
+ [

## 有关 RDS for MySQL 8.4 的包容性语言更改
](#mysql-8-4-inclusive-language-changes)
+ [

## Amazon RDS 不支持的 MySQL 功能
](#MySQL.Concepts.Features)

## Amazon RDS for MySQL 主要版本上的 MySQL 功能支持
<a name="MySQL.Concepts.FeatureSupport.MajorVersions"></a>

在以下几节中，可查找有关 Amazon RDS for MySQL 主要版本上的 MySQL 功能支持的信息：

**Topics**
+ [

### Amazon RDS 支持 MySQL 8.4
](#MySQL.Concepts.FeatureSupport.8-4)

有关受支持的 Amazon RDS for MySQL 次要版本的信息，请参阅[Amazon RDS 上支持的 MySQL 次要版本](MySQL.Concepts.VersionMgmt.md#MySQL.Concepts.VersionMgmt.Supported)。

### Amazon RDS 支持 MySQL 8.4
<a name="MySQL.Concepts.FeatureSupport.8-4"></a>

对于运行 MySQL 8.4 或更高版本的数据库实例，Amazon RDS 支持以下新功能。
+ **密码库** – RDS for MySQL 将 OpenSSL 替换为已获得 FIPS 140-3 认证的 AWS Libcrypto（AWS-LC）。有关更多信息，请参阅 AWS-LC GitHub 存储库（网址为 [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)）。
+ **TLS 更改** – RDS for MySQL 仅支持 TLS 1.2 和 TLS 1.3。有关更多信息，请参阅 [Amazon RDS 上 MySQL 数据库实例的 SSL/TLS 支持](MySQL.Concepts.SSLSupport.md)。
+ **Memcached 支持** – Memcached 接口在 MySQL 8.4 上不再可用。有关更多信息，请参阅 [MySQL memcached 支持](Appendix.MySQL.Options.memcached.md)。
+ **默认身份验证插件** - 默认身份验证插件是 `caching_sha2_password`。有关更多信息，请参阅 [MySQL 默认身份验证插件](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin)。
+ **`mysqlpump` 客户端实用工具** – MySQL 8.4 中不再提供 `mysqlpump` 客户端实用工具。有关更多信息，请参阅《AWS 规范性指南》中的 [RDS for MySQL 的基于角色的权限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)以及 [mysqldump and mysqlpump](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-large-mysql-mariadb-databases/mysqldump-and-mysqlpump.html)。**
+ **托管复制存储过程** - 在使用这些存储过程管理复制时，如果其复制用户配置了 `caching_sha2_password`，则必须通过指定 `SOURCE_SSL=1` 来配置 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的默认身份验证插件。
+ **参数行为更改** - MySQL 8.4 的以下参数已更改。
  + `innodb_dedicated_server` – 此参数默认处于启用状态。有关更多信息，请参阅 [在 MySQL 8.4 中配置缓冲池大小和重做日志容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
  + `innodb_buffer_pool` – 数据库引擎现在计算此参数，但您可以覆盖此设置。有关更多信息，请参阅 [在 MySQL 8.4 中配置缓冲池大小和重做日志容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
  + `innodb_redo_log_capacity` – 此参数现在控制重做日志文件的大小。数据库引擎现在计算此参数，但您可以覆盖此设置。有关更多信息，请参阅 [在 MySQL 8.4 中配置缓冲池大小和重做日志容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
+ **已弃用或删除的参数** – RDS for MySQL 从 MySQL 8.4 数据库实例的参数组中删除了以下参数。`innodb_redo_log_capacity` 参数现在控制重做日志文件的大小。
  + `innodb_log_file_size`
  + `innodb_log_files_in_group`
+ **参数的新默认值** – 对于 MySQL 8.4 数据库实例，以下参数具有新的默认值：
  + 与性能相关的各种 MySQL 社区参数发生了更改。有关更多信息，请参阅 [What is New in MySQL 8.4 since MySQL 8.0](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)。

    建议您在迁移生产实例之前，在 RDS for MySQL 8.4 上测试应用程序的性能。
  + `innodb_purge_threads` – 将默认值设置为公式 `LEAST({DBInstanceVCPU/2},4)`，以防止 InnoDB 历史记录列表长度变得过大。
  + `group_replication_exit_state_action` – 默认值为 `OFFLINE_MODE`，这与 MySQL 社区中的默认值一致。有关更多信息，请参阅 [RDS for MySQL 主动-主动集群的注意事项和最佳实践](mysql-active-active-clusters-considerations-limitations.md#mysql-active-active-clusters-considerations)。
  + `binlog_format` – 默认值为 `ROW`，这与 MySQL 社区中的默认值一致。您可以修改单可用区数据库实例或多可用区数据库实例的参数，但多可用区数据库集群的参数不可修改。多可用区数据库集群使用半同步复制，当 `binlog_format` 设置为 `MIXED` 或 `STATEMENT` 时，复制将失败。
+ **包容性语言更改** – RDS for MySQL 8.4 包含自 RDS for MySQL 8.0 起，与包容性语言的关键字和系统架构相关的更改。有关更多信息，请参阅 [有关 RDS for MySQL 8.4 的包容性语言更改](#mysql-8-4-inclusive-language-changes)。

要查看所有 MySQL 8.4 功能和更改的列表，请参阅 MySQL 文档中的 [What is New in MySQL 8.4 since MySQL 8.0](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MySQL 功能](#MySQL.Concepts.Features)。

## 支持的 RDS for MySQL 存储引擎
<a name="MySQL.Concepts.Storage"></a>

虽然 MySQL 支持功能不同的多种存储引擎，但并非所有引擎都为恢复和数据持久性进行了优化。Amazon RDS 完全支持 MySQL 数据库实例的 InnoDB 存储引擎。Amazon RDS 的时间点恢复和快照恢复功能要求使用恢复存储引擎，且仅支持 InnoDB 存储引擎。有关更多信息，请参阅 [MySQL memcached 支持](Appendix.MySQL.Options.memcached.md)。

Amazon RDS for MySQL 当前不支持联合存储引擎。

对于用户创建的架构，MyISAM 存储引擎不支持可靠的恢复，并且在恢复后重新启动 MySQL 时可能会导致数据丢失或损坏，使时间点还原或快照还原无法发挥预期的作用。不过，如果您仍选择配合使用 MyISAM 和 Amazon RDS，在某些情况下，快照可能也会有所帮助。

**注意**  
`mysql` 架构中的系统表可以位于 MyISAM 存储中。

如果要将现有的 MyISAM 表转换为 InnoDB 表，您可以使用 `ALTER TABLE` 命令（例如，`alter table TABLE_NAME engine=innodb;`）。请注意，MyISAM 和 InnoDB 各有优点和缺点，所以在执行前请充分评估转换可能对您的应用程序造成的影响。

Amazon RDS 不再支持 MySQL 5.1、5.5 和 5.6。但您可以还原现有的 MySQL 5.1、5.5 和 5.6 快照。在还原 MySQL 5.1、5.5 和 5.6 快照时，数据库实例将自动升级到 MySQL 5.7。

## 在 Amazon RDS 上通过 MySQL 使用 memcached 和其他选项
<a name="MySQL.Concepts.General.Options"></a>

大多数 Amazon RDS 数据库引擎均支持一些选项组，通过这些选项组，可选择其他功能用于数据库实例。RDS for MySQL 数据库实例支持 `memcached` 选项，它是一个简单的基于键的缓存。有关 `memcached` 和其他选项的更多信息，请参阅[适用于 MySQL 数据库实例的选项](Appendix.MySQL.Options.md)。有关使用选项组的详细信息，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

## Amazon RDS 上 MySQL 的 InnoDB 缓存预热
<a name="MySQL.Concepts.InnoDBCacheWarming"></a>

InnoDB 缓存预热可为您的 MySQL DB 实例提供性能收益，方式是在数据库实例关闭时保存缓冲池的当前状态，然后在数据库实例启动时从保存的信息重新加载缓冲池。这将不再需要缓冲池使用常规数据库进行“预热”，而是预加载具有已知常见查询的页的缓冲池。存储已保存缓冲池信息的文件仅存储缓冲池内的页的元数据，而不是存储页本身。因此，此文件需要的存储空间不多。此文件的大小约为缓存大小的 0.2%。例如，对于 64 GiB 的缓存，缓存预热文件大小为 128 MiB。有关 InnoDB 缓存预热的更多信息，请参阅 MySQL 文档中的[保存和还原缓冲池状态](https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html)。

RDS for MySQL 数据库实例支持 InnoDB 缓存预热。要启用 InnoDB 缓存预热，请将数据库实例的参数组中的 `innodb_buffer_pool_dump_at_shutdown` 和 `innodb_buffer_pool_load_at_startup` 参数设置为 1。更改参数组中的这些参数值将影响使用该参数组的所有 MySQL 数据库实例。要为特定 MySQL 数据库实例启用 InnoDB 缓存预热，您可能需要为这些实例创建新的参数组。有关参数组的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

InnoDB 缓存预热主要为使用标准存储的数据库实例提供性能收益。如果您使用 PIOPS 存储，则通常看不到显著的性能收益。

**重要**  
如果您的 MySQL 数据库实例未正常关闭（例如，在失效转移期间），则缓冲池状态将不会保存到磁盘。在此情况下，MySQL 将在重新启动数据库实例时加载任何可用的缓冲池文件。这不会造成任何损害，但还原后的缓冲池可能不会反映缓冲池在重新启动前的最新状态。要确保您拥有启动时可用于预热 InnoDB 缓存的缓冲池的最新状态，建议您定期“按需”转储缓冲池。  
您可创建事件来定期自动转储缓冲池。例如，以下语句创建一个名为 `periodic_buffer_pool_dump` 的事件，该事件每小时转储一次缓冲池。  

```
1. CREATE EVENT periodic_buffer_pool_dump 
2. ON SCHEDULE EVERY 1 HOUR 
3. DO CALL mysql.rds_innodb_buffer_pool_dump_now();
```
有关 MySQL 事件的更多信息，请参阅 MySQL 文档中的[事件语法](https://dev.mysql.com/doc/refman/8.0/en/events-syntax.html)。

### 按需转储和加载缓冲池
<a name="MySQL.Concepts.InnoDBCacheWarming.OnDemand"></a>

您可“按需”保存和加载 InnoDB 缓存。
+ 要将缓冲池的当前状态转储到磁盘，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_dump_now) 存储过程。
+ 要从磁盘加载缓冲池的已保存状态，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_now) 存储过程。
+ 要取消正在进行的加载操作，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_abort) 存储过程。

## 有关 RDS for MySQL 8.4 的包容性语言更改
<a name="mysql-8-4-inclusive-language-changes"></a>

RDS for MySQL 8.4 包含 MySQL 8.4 社区版本中与包容性语言的关键字和系统架构相关的更改。例如，`SHOW REPLICA STATUS` 命令替换了 `SHOW SLAVE STATUS`。

**Topics**
+ [

### 配置参数名称更改
](#mysql-8-4-inclusive-language-changes-params)
+ [

### 存储过程名称更改
](#mysql-8-4-inclusive-language-changes-sp)

### 配置参数名称更改
<a name="mysql-8-4-inclusive-language-changes-params"></a>

以下配置参数在 RDS for MySQL 8.4 中具有新名称。

为实现兼容，您可以在 `mysql` 客户端使用任何一个名称检查参数名称。当修改自定义 MySQL 8.4 参数组中的值时，只能使用新名称。有关更多信息，请参阅 [原定设置和自定义参数组](parameter-groups-overview.md#parameter-groups-overview.custom)。


| 要删除的名称 | 新名称或首选名称 | 
| --- | --- | 
|  `init_slave`  |  `init_replica`  | 
|  `log_slave_updates`  |  `log_replica_updates`  | 
|  `log_slow_slave_statements`  |  `log_slow_replica_statements`  | 
|  `rpl_stop_slave_timeout`  |  `rpl_stop_replica_timeout`  | 
|  `skip_slave_start`  |  `skip_replica_start`  | 
|  `slave_checkpoint_group`  |  `replica_checkpoint_group`  | 
|  `slave_checkpoint_period`  |  `replica_checkpoint_period`  | 
|  `slave_compressed_protocol`  |  `replica_compressed_protocol`  | 
|  `slave_exec_mode`  |  `replica_exec_mode`  | 
|  `slave_load_tmpdir`  |  `replica_load_tmpdir`  | 
|  `slave_max_allowed_packet`  |  `replica_max_allowed_packet`  | 
|  `slave_net_timeout`  |  `replica_net_timeout`  | 
|  `slave_parallel_type`  |  `replica_parallel_type`  | 
|  `slave_parallel_workers`  |  `replica_parallel_workers`  | 
|  `slave_pending_jobs_size_max`  |  `replica_pending_jobs_size_max`  | 
|  `slave_preserve_commit_order`  |  `replica_preserve_commit_order`  | 
|  `slave_skip_errors`  |  `replica_skip_errors`  | 
|  `slave_sql_verify_checksum`  |  `replica_sql_verify_checksum`  | 
|  `slave_transaction_retries`  |  `replica_transaction_retries`  | 
|  `slave_type_conversions`  |  `replica_type_conversions`  | 
|  `sql_slave_skip_counter`  |  `sql_replica_skip_counter`  | 

**注意**  
参数 `replica_allow_batching` 不可用，因为 Amazon RDS 不支持 NDB 集群。

### 存储过程名称更改
<a name="mysql-8-4-inclusive-language-changes-sp"></a>

以下存储过程在 RDS for MySQL 8.4 中具有新名称。

为实现兼容，您可以在 RDS for MySQL 8.4 初始版本中使用任一名称。未来版本将删除旧的过程名称。有关更多信息，请参阅 [配置、启动和停止二进制日志（binlog）复制](mysql-stored-proc-replicating.md)。


| 要删除的名称 | 新名称或首选名称 | 
| --- | --- | 
|  `mysql.rds_next_master_log`  |  `mysql.rds_next_source_log `  | 
|  `mysql.rds_reset_external_master`  |  `mysql.rds_reset_external_source`  | 
|  `mysql.rds_set_external_master`  |  `mysql.rds_set_external_source`  | 
|  `mysql.rds_set_external_master_with_auto_position`  |  `mysql.rds_set_external_source_with_auto_position`  | 
|  `mysql.rds_set_external_master_with_delay`  |  `mysql.rds_set_external_source_with_delay`  | 
|  `mysql.rds_set_master_auto_position`  |  `mysql.rds_set_source_auto_position`  | 

## Amazon RDS 不支持的 MySQL 功能
<a name="MySQL.Concepts.Features"></a>

Amazon RDS 当前不支持以下 MySQL 功能：
+ 身份验证插件
+ 将错误记录到系统日志
+ InnoDB 表空间加密
+ NDB 集群
+ 密码强度插件
+ 永久保存的系统变量
+ Rewriter 查询重写插件
+ 半同步复制，多可用区数据库集群除外
+ 可传输的表空间
+ X 插件

为了提供托管服务体验，Amazon RDS 未提供数据库实例的 Shell 访问权限。并且它还限制了对需要高级权限的某些系统程序和表的访问。Amazon RDS 支持使用任何标准 SQL 客户端应用程序访问数据库实例上的数据库。Amazon RDS 不允许使用 Telnet、安全外壳（SSH）或 Windows 远程桌面连接直接从主机访问数据库实例。创建数据库实例时，系统会将您分配为该实例上所有数据库的 *db\$1owner*，并且您将具有除用于备份的权限以外的所有数据库级别权限。Amazon RDS 会为您管理备份。