

# 升级 RDS for MySQL 数据库引擎
<a name="USER_UpgradeDBInstance.MySQL"></a>

如果 Amazon RDS 支持数据库引擎的新版本，您可以将您的数据库实例升级到新版本。MySQL 数据库有两种升级方式：主要版本升级和次要版本升级。

**主要版本升级。**  
*主要版本升级*会包含不与现有应用程序向后兼容的数据库更改。因此，您必须手动为数据库实例执行主要版本升级。您可以通过修改数据库实例来启动主要版本升级。在执行主要版本升级之前，建议您按照[RDS for MySQL 的主要版本升级](USER_UpgradeDBInstance.MySQL.Major.md)中的说明操作。  
对于多可用区数据库实例部署的主要版本升级，Amazon RDS 会同时升级主要副本和备用副本。在升级完成之前，数据库实例将不可用。对于多可用区数据库集群部署的主要版本升级，Amazon RDS 一次升级一个集群成员实例。  
您可以使用蓝绿部署，最大限度地减少主要版本升级所需的停机时间。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

**次要版本升级**  
*次要版本升级* 仅包含与现有应用程序向后兼容的更改。您可以通过修改数据库实例来手动启动次要版本升级。您也可以在创建或修改数据库实例时启用**自动次要版本升级**选项。这样做意味着 Amazon RDS 会在测试并批准新版本后自动升级您的数据库实例。有关执行升级的信息，请参阅 [升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  
当您对多可用区数据库集群执行次要版本升级时，Amazon RDS 将一次升级一个读取器数据库实例。然后，其中一个读取器数据库实例将切换为新的写入器数据库实例。然后，Amazon RDS 升级旧的写入器实例（现在是读取器实例）。  
多可用区数据库*实例*部署的次要版本升级的停机时间可能会持续几分钟。多可用区数据库集群通常可将次要版本升级的停机时间缩短至大约 35 秒。与 RDS 代理一起使用时，您可以将停机时间进一步缩短到一秒或更短。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。或者，您可以使用开源数据库代理，例如 [ProxySQL](https://www.amazonaws.cn/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://www.amazonaws.cn/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 或 [Amazon Advanced JDBC Wrapper Driver](https://www.amazonaws.cn/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)。

Amazon RDS 还支持升级推出策略，以管理跨多个数据库资源和 Amazon Web Services 账户的自动次要版本升级。有关更多信息，请参阅 [使用 Amazon Organizations 升级推出策略自动升级次要版本](RDS.Maintenance.AMVU.UpgradeRollout.md)。

如果 MySQL 数据库实例使用只读副本，则必须在升级源实例之前升级所有只读副本。

**Topics**
+ [MySQL 升级的注意事项](#USER_UpgradeDBInstance.MySQL.Considerations)
+ [查找有效的升级目标](#USER_UpgradeDBInstance.MySQL.FindingTargets)
+ [MySQL 版本号](USER_UpgradeDBInstance.MySQL.VersionID.md)
+ [RDS for MySQL 中的 RDS 版本号](USER_UpgradeDBInstance.MySQL.rds.version.md)
+ [RDS for MySQL 的主要版本升级](USER_UpgradeDBInstance.MySQL.Major.md)
+ [测试 RDS for MySQL 升级](USER_UpgradeDBInstance.MySQL.UpgradeTesting.md)
+ [升级 MySQL 数据库实例](#USER_UpgradeDBInstance.MySQL.Upgrading)
+ [RDS for MySQL 的自动次要版本升级](USER_UpgradeDBInstance.MySQL.Minor.md)
+ [使用只读副本在升级 RDS for MySQL 数据库时减少停机时间](USER_UpgradeDBInstance.MySQL.ReducedDowntime.md)
+ [使用事件监控 RDS for MySQL 引擎升级](USER_UpgradeDBInstance.MySQL.Monitoring.md)

## MySQL 升级的注意事项
<a name="USER_UpgradeDBInstance.MySQL.Considerations"></a>

在升级流程期间，Amazon RDS 会创建两个或更多数据库快照。在进行任何升级更改*之前*，Amazon RDS 最多会拍摄两个数据库实例快照。如果无法完成数据库的升级，那么，就可以还原这些快照之一，来创建一个运行旧版本的数据库实例。升级完成后，Amazon RDS 会为数据库实例拍摄另一个快照。无论 Amazon Backup 是否管理数据库实例的备份，Amazon RDS 都会拍摄这些快照。

**注意**  
如果您将数据库实例的备份保留期设置为大于 0 的数字，则 Amazon RDS 只需创建数据库快照。要更改您的备份保留期，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

升级完成后，您无法恢复为数据库引擎的以前版本。如果要返回以前版本，则还原创建的第一个数据库快照以新建数据库实例。

您可以控制何时将数据库实例升级到 Amazon RDS 支持的新版本。此级别的控制可帮助您保留与特定数据库版本的兼容性，并在生产中部署前使用应用程序测试新版本。在您准备好后，可在与时间表最搭配的时间执行版本升级。

如果数据库实例使用只读复制，则必须在升级源实例之前升级所有只读副本。

## 查找有效的升级目标
<a name="USER_UpgradeDBInstance.MySQL.FindingTargets"></a>

使用 Amazon Web Services 管理控制台 升级数据库实例时，它会显示数据库实例的有效升级目标。您还可以运行以下 Amazon CLI 命令来标识数据库实例的有效升级目标：

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version version_number \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

对于：Windows

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version version_number ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

例如，要标识 MySQL 版本 8.0.28 数据库实例的有效升级目标，请运行以下 Amazon CLI 命令：

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version 8.0.28 \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

对于：Windows

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version 8.0.28 ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

## 升级 MySQL 数据库实例
<a name="USER_UpgradeDBInstance.MySQL.Upgrading"></a>

有关手动或自动升级 MySQL 数据库实例的信息，请参阅[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。