

# 比较 Aurora MySQL 版本 2 和 Aurora MySQL 版本 3
<a name="AuroraMySQL.Compare-v2-v3"></a>

使用以下内容了解在将 Aurora MySQL 版本 2 集群升级到版本 3 时需要注意的更改。

**Topics**
+ [原子数据定义语言（DDL）支持](#AuroraMySQL.Compare-v2-v3-atomic-ddl)
+ [Aurora MySQL 版本 2 和 3 之间的功能区别](#AuroraMySQL.Compare-v2-v3-features)
+ [实例类支持](#AuroraMySQL.mysql80-instance-classes)
+ [Aurora MySQL 版本 3 的参数更改](#AuroraMySQL.mysql80-parameter-changes)
+ [状态变量](#AuroraMySQL.mysql80-status-vars)
+ [Aurora MySQL 版本 3 的包容性语言更改](#AuroraMySQL.8.0-inclusive-language)
+ [AUTO\$1INCREMENT 值](#AuroraMySQL.mysql80-autoincrement)
+ [二进制日志复制](#AuroraMySQL.mysql80-binlog)

## 原子数据定义语言（DDL）支持
<a name="AuroraMySQL.Compare-v2-v3-atomic-ddl"></a>

从 MySQL 5.7 到 8.0 的最大变化之一是引入了 [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)。在 MySQL 8.0 之前，MySQL 数据字典使用基于文件的方法，来将表定义 (.frm)、触发器 (.trg) 和函数等元数据与存储引擎的元数据（例如 InnoDB 的元数据）分开存储。这会有一些问题，包括以下这类情况：如果在 DDL 操作期间发生意外情况，导致基于文件的元数据和存储引擎元数据不同步，表就有变为“[orphaned](https://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html)”的风险。

为了解决这个问题，MySQL 8.0 引入了原子数据字典，它将所有元数据存储在架构 `mysql` 内的一组内部 InnoDB 表中。这种新架构提供了一种事务性、符合 [ACID](https://en.wikipedia.org/wiki/ACID) 的方法来管理数据库元数据，解决了基于文件的旧方法中的“原子 DDL”问题。有关原子数据字典的更多信息，请参阅《MySQL 参考手册》**中的 [Removal of file-based metadata storage](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) 和 [Atomic data definition statement support](https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html)。

由于这种架构更改，从 Aurora MySQL 版本 2 升级到版本 3 时，必须考虑以下因素：
+ 在升级到版本 3 的过程中，必须将版本 2 中基于文件的元数据迁移到新的数据字典表中。这可能需要花一些时间，具体取决于要迁移的数据库对象数量。
+ 这些更改还引入了一些新的不兼容性，在从 MySQL 5.7 升级到 8.0 之前，可能需要解决这类问题。例如，8.0 有一些新的保留关键字，它们可能与现有的数据库对象名称冲突。

为了协助您在升级引擎之前确定这些不兼容性，在执行数据字典升级之前，Aurora MySQL 会运行一系列升级兼容性检查（预检查），来确定数据库字典中是否存在任何不兼容的对象。有关预检查的更多信息，请参阅 [Aurora MySQL 的主要版本升级预检查](AuroraMySQL.upgrade-prechecks.md)。

## Aurora MySQL 版本 2 和 3 之间的功能区别
<a name="AuroraMySQL.Compare-v2-v3-features"></a>

在 Aurora MySQL for MySQL 5.7 中支持以下 Amazon Aurora MySQL 功能，但在 Aurora MySQL for MySQL 8.0 中不支持这些功能。
+ 您不能将 Aurora MySQL 版本 3 用于 Aurora Serverless v1 集群。Aurora MySQL 版本 3 可与 Aurora Serverless v2 一起使用。
+ 实验室模式不适用于 Aurora MySQL 版本 3。Aurora MySQL 版本 3 中没有任何实验室模式功能。即时 DDL 取代了以前在实验室模式下可用的快速线上 DDL 功能。有关示例，请参阅[即时 DDL（Aurora MySQL 版本 3）](AuroraMySQL.Managing.FastDDL.md#AuroraMySQL.mysql80-instant-ddl)。
+ 查询缓存已从社区 MySQL 8.0 以及 Aurora MySQL 版本 3 中删除。
+ Aurora MySQL 版本 3 与社区 MySQL 即时哈希联接功能兼容。未使用 Aurora MySQL 版本 2 中特定于 Aurora 的哈希联接实现。有关在 Aurora 并行查询中使用哈希联接的信息，请参阅 [为并行查询集群开启哈希联接](aurora-mysql-parallel-query-enabling.md#aurora-mysql-parallel-query-enabling-hash-join) 和 [Aurora MySQL 提示](AuroraMySQL.Reference.Hints.md)。有关哈希联接的一般用法信息，请参阅 *MySQL 参考手册*中的[哈希联接优化](https://dev.mysql.com/doc/refman/8.0/en/hash-joins.html)。
+ 在 Aurora MySQL 版本 2 中弃用的 `mysql.lambda_async` 存储过程将在版本 3 中删除。对于版本 3，请使用异步函数 `lambda_async`。
+ Aurora MySQL 版本 3 中的原定设置字符集是 `utf8mb4`。Aurora MySQL 版本 2 中的原定设置字符集是 `latin1`。有关此字符集的信息，请参阅 *MySQL 参考手册*中的 [utf8mb4 字符集（4 字节 UTF-8 Unicode 编码）](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html)。

一些 Aurora MySQL 功能可用于 AWS 区域和数据库引擎版本的特定组合。有关详细信息，请参阅[Amazon Aurora 中受 AWS 区域 和 Aurora 数据库引擎支持的功能](Concepts.AuroraFeaturesRegionsDBEngines.grids.md)。

## 实例类支持
<a name="AuroraMySQL.mysql80-instance-classes"></a>

Aurora MySQL 版本 3 支持与 Aurora MySQL 版本 2 不同的一组实例类：
+ 对于较大的实例，您可以使用现代实例类，例如 `db.r5`、`db.r6g` 和 `db.x2g`。
+ 对于较大的实例，您可以使用现代实例类，例如 `db.t3` 和 `db.t4g`。
**注意**  
建议仅将 T 数据库实例类用于开发和测试服务器，或其他非生产服务器。有关 T 实例类的更多详细信息，请参阅[使用 T 实例类进行开发和测试](AuroraMySQL.BestPractices.Performance.md#AuroraMySQL.BestPractices.T2Medium)。

Aurora MySQL 版本 2 中的以下实例类不适用于 Aurora MySQL 版本 3：
+  `db.r4` 
+  `db.r3` 
+  `db.t3.small` 
+  `db.t2` 

 检查您的管理脚本中是否有任何创建 Aurora MySQL 数据库实例的 CLI 语句。Aurora MySQL 版本 3 不可用的硬编码实例类名称。如有必要，请将实例类名称修改为 Aurora MySQL 版本 3 支持的名称。

**提示**  
 检查可用于 Aurora MySQL 版本和 AWS 区域特定组合的实例类，请使用 `describe-orderable-db-instance-options` AWS CLI 命令。

 有关 Aurora 实例类的完整详细信息，请参阅 [Amazon Aurora数据库实例类](Concepts.DBInstanceClass.md)。

## Aurora MySQL 版本 3 的参数更改
<a name="AuroraMySQL.mysql80-parameter-changes"></a>

Aurora MySQL 版本 3 包括新的集群级和实例级配置参数。Aurora MySQL 版本 3 还删除了 Aurora MySQL 版本 2 中存在的一些参数。由于包容性语言的倡议，一些参数名称发生了变化。为了向后兼容，您仍可以使用旧名称或使用新名称检索参数值。但是，您必须使用新名称在自定义参数组中指定参数值。

在 Aurora MySQL 版本 3 中，`lower_case_table_names` 参数的值在创建集群时永久设置。如果对此选项使用非原定设置值，请在升级之前设置 Aurora MySQL 版本 3 自定义参数组。然后，在创建集群或快照还原操作期间指定参数组。

**注意**  
使用基于 Aurora MySQL 的 Aurora 全局数据库时，如果开启了 `lower_case_table_names` 参数，则无法执行从 Aurora MySQL 版本 2 到版本 3 的就地升级。改用快照还原方法。

在 Aurora MySQL 版本 3 中，`init_connect` 和 `read_only` 参数不适用于具有 `CONNECTION_ADMIN` 权限的用户。这包括 Aurora 主用户。有关更多信息，请参阅 [基于角色的权限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。

有关 Aurora MySQL 集群参数的完整列表，请参阅 [集群级别的参数](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Cluster)。该表涵盖了 Aurora MySQL 版本 2 和 3 的所有参数。该表包括一些说明，显示了 Aurora MySQL 版本 3 中哪些参数是新增的，哪些参数已从 Aurora MySQL 版本 3 中删除。

有关 Aurora MySQL 实例参数的完整列表，请参阅 [实例级参数](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Instance)。该表涵盖了 Aurora MySQL 版本 2 和 3 的所有参数。该表包括一些说明，显示了 Aurora MySQL 版本 3 中哪些参数是新增的，哪些参数已从 Aurora MySQL 版本 3 中删除。它还包括显示哪些参数在早期版本中可修改，但不能在 Aurora MySQL 版本 3 中修改的说明。

有关已更改的参数名称的信息，请参阅 [Aurora MySQL 版本 3 的包容性语言更改](#AuroraMySQL.8.0-inclusive-language)。

## 状态变量
<a name="AuroraMySQL.mysql80-status-vars"></a>

有关不适用于 Aurora MySQL 的状态变量的信息，请参阅 [不适用于 Aurora MySQL 的 MySQL 状态变量](AuroraMySQL.Reference.GlobalStatusVars.md#AuroraMySQL.Reference.StatusVars.Inapplicable)。

## Aurora MySQL 版本 3 的包容性语言更改
<a name="AuroraMySQL.8.0-inclusive-language"></a>

 Aurora MySQL 版本 3 与 MySQL 社群版的 8.0.23 版本兼容。Aurora MySQL 版本 3 还包括 MySQL 8.0.26 中与包容性语言的关键字和系统架构相关的更改。例如，现在首选 `SHOW REPLICA STATUS` 命令，而不是 `SHOW SLAVE STATUS`。

 以下 Amazon CloudWatch 指标在 Aurora MySQL 版本 3 中有新名称。

 在 Aurora MySQL 版本 3 中，只有新的指标名称可用。升级到 Aurora MySQL 版本 3 时，请务必更新依赖指标名称的任何告警或其他自动化。


|  旧名称  |  新名称  | 
| --- | --- | 
|  ForwardingMasterDMLLatency  |  ForwardingWriterDMLLatency  | 
|  ForwardingMasterOpenSessions  |  ForwardingWriterOpenSessions  | 
|  AuroraDMLRejectedMasterFull  |  AuroraDMLRejectedWriterFull  | 
|  ForwardingMasterDMLThroughput  |  ForwardingWriterDMLThroughput  | 

 以下状态变量在 Aurora MySQL 版本 3 中有新名称。

 为了获得兼容性，您可以在初始的 Aurora MySQL 版本 3 中使用任何一个名称。未来版本将删除旧的状态变量名称。


|  要删除的名称  |  新名称或首选名称  | 
| --- | --- | 
|  Aurora\$1fwd\$1master\$1dml\$1stmt\$1duration  |  Aurora\$1fwd\$1writer\$1dml\$1stmt\$1duration  | 
|  Aurora\$1fwd\$1master\$1dml\$1stmt\$1count  |  Aurora\$1fwd\$1writer\$1dml\$1stmt\$1count  | 
|  Aurora\$1fwd\$1master\$1select\$1stmt\$1duration  |  Aurora\$1fwd\$1writer\$1select\$1stmt\$1duration  | 
|  Aurora\$1fwd\$1master\$1select\$1stmt\$1count  |  Aurora\$1fwd\$1writer\$1select\$1stmt\$1count  | 
|  Aurora\$1fwd\$1master\$1errors\$1session\$1timeout  |  Aurora\$1fwd\$1writer\$1errors\$1session\$1timeout  | 
|  Aurora\$1fwd\$1master\$1open\$1sessions  |  Aurora\$1fwd\$1writer\$1open\$1sessions  | 
|  Aurora\$1fwd\$1master\$1errors\$1session\$1limit  |  Aurora\$1fwd\$1writer\$1errors\$1session\$1limit  | 
|  Aurora\$1fwd\$1master\$1errors\$1rpc\$1timeout  |  Aurora\$1fwd\$1writer\$1errors\$1rpc\$1timeout  | 

以下配置参数在 Aurora MySQL 版本 3 中有新名称。

为了获得兼容性，您可以在初始的 Aurora MySQL 版本 3 中使用任何一个名称以检查 `mysql` 客户端中的参数值。当修改自定义参数组中的值时，只能使用新名称。未来版本将删除旧的参数名称。


|  要删除的名称  |  新名称或首选名称  | 
| --- | --- | 
|  aurora\$1fwd\$1master\$1idle\$1timeout  |  aurora\$1fwd\$1writer\$1idle\$1timeout  | 
|  aurora\$1fwd\$1master\$1max\$1connections\$1pct  |  aurora\$1fwd\$1writer\$1max\$1connections\$1pct  | 
|  master\$1verify\$1checksum  |  source\$1verify\$1checksum  | 
|  sync\$1master\$1info  |  sync\$1source\$1info  | 
|  init\$1slave  |  init\$1replica  | 
|  rpl\$1stop\$1slave\$1timeout  |  rpl\$1stop\$1replica\$1timeout  | 
|  log\$1slow\$1slave\$1statements  |  log\$1slow\$1replica\$1statements  | 
|  slave\$1max\$1allowed\$1packet  |  replica\$1max\$1allowed\$1packet  | 
|  slave\$1compressed\$1protocol  |  replica\$1compressed\$1protocol  | 
|  slave\$1exec\$1mode  |  replica\$1exec\$1mode  | 
|  slave\$1type\$1conversions  |  replica\$1type\$1conversions  | 
|  slave\$1sql\$1verify\$1checksum  |  replica\$1sql\$1verify\$1checksum  | 
|  slave\$1parallel\$1type  |  replica\$1parallel\$1type  | 
|  slave\$1preserve\$1commit\$1order  |  replica\$1preserve\$1commit\$1order  | 
|  log\$1slave\$1updates  |  log\$1replica\$1updates  | 
|  slave\$1allow\$1batching  |  replica\$1allow\$1batching  | 
|  slave\$1load\$1tmpdir  |  replica\$1load\$1tmpdir  | 
|  slave\$1net\$1timeout  |  replica\$1net\$1timeout  | 
|  sql\$1slave\$1skip\$1counter  |  sql\$1replica\$1skip\$1counter  | 
|  slave\$1skip\$1errors  |  replica\$1skip\$1errors  | 
|  slave\$1checkpoint\$1period  |  replica\$1checkpoint\$1period  | 
|  slave\$1checkpoint\$1group  |  replica\$1checkpoint\$1group  | 
|  slave\$1transaction\$1retries  |  replica\$1transaction\$1retries  | 
|  slave\$1parallel\$1workers  |  replica\$1parallel\$1workers  | 
|  slave\$1pending\$1jobs\$1size\$1max  |  replica\$1pending\$1jobs\$1size\$1max  | 
|  pseudo\$1slave\$1mode  |  pseudo\$1replica\$1mode  | 

 以下存储过程在 Aurora MySQL 版本 3 中有新名称。

 为了获得兼容性，您可以在初始的 Aurora MySQL 版本 3 中使用任何一个名称。未来版本将删除旧的过程名称。


|  要删除的名称  |  新名称或首选名称  | 
| --- | --- | 
|  mysql.rds\$1set\$1master\$1auto\$1position  |  mysql.rds\$1set\$1source\$1auto\$1position  | 
|  mysql.rds\$1set\$1external\$1master  |  mysql.rds\$1set\$1external\$1source  | 
|  mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position  |  mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position  | 
|  mysql.rds\$1reset\$1external\$1master  |  mysql.rds\$1reset\$1external\$1source  | 
|  mysql.rds\$1next\$1master\$1log  |  mysql.rds\$1next\$1source\$1log  | 

## AUTO\$1INCREMENT 值
<a name="AuroraMySQL.mysql80-autoincrement"></a>

 在 Aurora MySQL 版本 3 中，Aurora 在重启每个数据库实例时保留每个表的 `AUTO_INCREMENT` 值。在 Aurora MySQL 版本 2 中，`AUTO_INCREMENT` 值在重启后不会保留。

 当您通过从快照还原、执行时间点恢复和克隆集群来设置新集群时，不会保留 `AUTO_INCREMENT` 值。在这些情况下，`AUTO_INCREMENT` 值将根据创建快照时表中的最大列值初始化为该值。此行为与 RDS for MySQL 8.0 中的行为不同，其中 `AUTO_INCREMENT` 值在这些操作过程中将被保留。

## 二进制日志复制
<a name="AuroraMySQL.mysql80-binlog"></a>

 在 MySQL 8.0 社群版中，预设情况下，二进制日志复制处于开启状态。预设情况下，在 Aurora MySQL 版本 3 中，二进制日志复制处于关闭状态。

**提示**  
 如果 Aurora 内置复制功能满足了您的高可用性要求，则可以关闭二进制日志复制。这样，您就可以避免二进制日志复制的性能开销。您还可以避免管理二进制日志复制所需的相关监控和故障排除过程。

 Aurora 支持从兼容 MySQL 5.7 的源到 Aurora MySQL 版本 3 的二进制日志复制。源系统可以是 Aurora MySQL 数据库集群、RDS for MySQL 数据库实例或本地 MySQL 实例。

 与社区 MySQL 一样，Aurora MySQL 支持从运行特定版本的源复制到运行相同主要版本或更高版本的目标。例如，不支持从兼容 MySQL 5.6 的系统复制到 Aurora MySQL 版本 3。不支持将 Aurora MySQL 版本 3 复制到兼容 MySQL 5.7 的系统或兼容 MySQL 5.6 的系统。有关使用二进制日志复制的详细信息，请参阅 [Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制（二进制日志复制）](AuroraMySQL.Replication.MySQL.md)。

 Aurora MySQL 版本 3 包括对社区 MySQL 8.0 中二进制日志复制的改进，例如筛选的复制。有关社区 MySQL 8.0 改进的详细信息，请参阅 *MySQL 参考手册*中的[服务器如何评估复制筛选规则](https://dev.mysql.com/doc/refman/8.0/en/replication-rules.html)。

### 二进制日志复制的事务压缩
<a name="AuroraMySQL.binlog-transaction-compression"></a>

 有关二进制日志压缩的使用信息，请参阅 MySQL 参考手册中的[二进制日志事务压缩](https://dev.mysql.com/doc/refman/8.0/en/binary-log-transaction-compression.html)。

 以下限制适用于 Aurora MySQL 版本 3 中的二进制日志压缩：
+  不会压缩其二进制日志数据大于允许的最大数据包大小的事务。无论是否开启 Aurora MySQL 二进制日志压缩设置，都是如此。此类事务在不被压缩的情况下被复制。
+  如果您使用尚不支持 MySQL 8.0 的更改数据捕获 (CDC) 的连接器，则无法使用此功能。我们建议您使用二进制日志压缩彻底测试任何第三方连接器。此外，我们建议您在对 CDC 使用二进制日志复制的系统上开启二进制日志压缩之前先这样做。