

# 升级数据库实例 引擎版本
<a name="USER_UpgradeDBInstance.Upgrading"></a>

Amazon RDS 提供每个支持的数据库引擎的更高版本，因此您可以保持数据库实例最新。更新的版本可能包含对于数据库引擎的错误修复、安全增强功能和其他改进。当 Amazon RDS 支持数据库引擎的新版本时，您可以选择如何以及何时升级您的数据库实例。

有两种升级方式：主要版本升级和次要版本升级。一般而言，*主引擎版本升级* 可能引入与现有应用程序不兼容的更改。相比之下，*次要版本升级* 仅包含与现有应用程序向后兼容的更改。

对于多可用区数据库集群，只有 RDS for PostgreSQL 支持主要版本升级。支持多可用区数据库集群的所有引擎均支持次要版本升级。有关更多信息，请参阅 [升级 Amazon RDS 的多可用区数据库集群的引擎版本](multi-az-db-clusters-upgrading.md)。

版本编号序列特定于每个数据库引擎。例如，RDS for MySQL 5.7 和 8.0 是主引擎版本，从任何 5.7 版本升级到任何 8.0 版本是主要版本升级。RDS for MySQL 版本 5.7.22 和 5.7.23 是次要版本，从 5.7.22 升级到 5.7.23 是次要版本升级。

**重要**  
升级数据库实例时无法修改该实例。升级期间，数据库实例的状态为 `upgrading`。

有关特定数据库引擎的主要版本升级和次要版本升级的更多信息，请参阅适用于您的数据库引擎的以下文档：
+ [升级 MariaDB 数据库引擎](USER_UpgradeDBInstance.MariaDB.md)
+ [升级 Microsoft SQL Server 数据库引擎](USER_UpgradeDBInstance.SQLServer.md)
+ [升级 RDS for MySQL 数据库引擎](USER_UpgradeDBInstance.MySQL.md)
+ [升级 RDS for Oracle 数据库引擎](USER_UpgradeDBInstance.Oracle.md)
+ [升级 RDS for PostgreSQL 数据库引擎](USER_UpgradeDBInstance.PostgreSQL.md)

对于主要版本升级，您必须通过 AWS 管理控制台、AWS CLI 或 RDS API 手动修改数据库引擎版本。对于次要版本升级，您可以手动修改引擎版本，也可以选择启用**自动次要版本升级**选项。

**注意**  
数据库引擎升级需要停机。您可以使用蓝绿部署，最大限度地减少数据库实例升级所需的停机时间。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

**Topics**
+ [手动升级引擎版本](#USER_UpgradeDBInstance.Upgrading.Manual)
+ [自动升级次要引擎版本](#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)

## 手动升级引擎版本
<a name="USER_UpgradeDBInstance.Upgrading.Manual"></a>

要手动升级数据库实例的引擎版本，可以使用 AWS 管理控制台、AWS CLI 或 RDS API。

### 控制台
<a name="USER_UpgradeDBInstance.Upgrading.Manual.Console"></a>

**使用控制台升级数据库实例的引擎版本**

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

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

1. 选择**修改**。将显示**修改数据库实例**页面。

1. 对于**数据库引擎版本**，选择新版本。

1. 选择**继续**，查看修改摘要。

1. 决定何时调度升级：
   + 要将更改放到待处理的修改队列中，请选择**在下一个计划的维护时段内应用**。在下一维护时段内，RDS 将应用队列中的所有待定更改。
   + 要立即应用更改，请选择**立即应用**。选择此选项在某些情况下可能导致中断。有关更多信息，请参阅“[使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)”。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择 **Modify DB Instance（修改数据库实例）**保存更改。

   或者，选择 **Back** 编辑您的更改，或者选择 **Cancel** 取消更改。

### AWS CLI
<a name="USER_UpgradeDBInstance.Upgrading.Manual.CLI"></a>

要升级数据库实例的引擎版本，请使用 CLI [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令。指定以下参数：
+ `--db-instance-identifier` – 数据库实例的名称。
+ `--engine-version` – 数据库引擎要升级到的版本号。

  有关有效的引擎版本的信息，请使用 AWS CLI [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) 命令。
+ `--allow-major-version-upgrade` – 升级主要版本。
+ `--no-apply-immediately` – 在下一维护时段内应用更改。要立即应用更改，请使用 `--apply-immediately`。

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

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine-version new_version \
4.     --allow-major-version-upgrade \
5.     --no-apply-immediately
```
对于：Windows  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine-version new_version ^
4.     --allow-major-version-upgrade ^
5.     --no-apply-immediately
```

### RDS API
<a name="USER_UpgradeDBInstance.Upgrading.Manual.API"></a>

要升级数据库实例的引擎版本，请使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作。指定以下参数：
+ `DBInstanceIdentifier` – 数据库实例的名称，例如 *`mydbinstance`*。
+ `EngineVersion` – 数据库引擎要升级到的版本号。有关有效的引擎版本的信息，请使用 [DescribeDBEngineVersions](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBEngineVersions.html) 操作。
+ `AllowMajorVersionUpgrade` – 是否允许主版本升级。为此，请将该值设置为 `true`。
+ `ApplyImmediately` – 是立即应用更改还是在下一个维护时段内应用更改。要立即应用更改，请将该值设置为 `true`。要在下一个维护时段内应用更改，请将该值设置为 `false`。

## 自动升级次要引擎版本
<a name="USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades"></a>

自动次要版本升级会定期将数据库更新到新近的数据库引擎版本。但是，升级可能并不始终包括最新的数据库引擎版本。如果您需要在特定时间将数据库保持在特定版本上，我们建议您根据所需的时间表，手动升级到您需要的数据库版本。在出现严重安全问题的情况下或当版本达到其终止支持日期时，Amazon RDS 可能会应用次要版本升级，即使您尚未启用**自动次要版本升级**选项也是如此。有关更多信息，请参阅特定数据库引擎的升级文档。
+ [RDS for PostgreSQL 的自动次要版本升级](USER_UpgradeDBInstance.PostgreSQL.Minor.md)
+ [RDS for MySQL 的自动次要版本升级](USER_UpgradeDBInstance.MySQL.Minor.md)
+ [RDS for MariaDB 的自动次要版本升级](USER_UpgradeDBInstance.MariaDB.Minor.md)
+ [Oracle 次要版本升级](USER_UpgradeDBInstance.Oracle.Minor.md)
+ [升级 Microsoft SQL Server 数据库引擎](USER_UpgradeDBInstance.SQLServer.md)
+ [Amazon RDS 上的 Db2 版本](Db2.Concepts.VersionMgmt.md)

**Topics**
+ [自动次要版本升级的工作原理](#USER_UpgradeDBInstance.Upgrading.scheduled)
+ [启用自动次要版本升级](#USER_UpgradeDBInstance.Upgrading.turning-on-automatic)
+ [确定维护更新的可用性](#USER_UpgradeDBInstance.Upgrading.availability)
+ [查找自动次要版本升级目标](#USER_UpgradeDBInstance.Upgrading.targets)

### 自动次要版本升级的工作原理
<a name="USER_UpgradeDBInstance.Upgrading.scheduled"></a>

*升级目标* 是 Amazon RDS 将您的数据库升级到的数据库引擎版本。当满足以下条件时，将次要引擎版本指定为升级目标：
+ 数据库正在运行的数据库引擎次要版本低于目标次要引擎版本。

  通过查看数据库详细信息页面的**配置**选项卡或运行 CLI 命令 `describe-db-instances`，可以找到数据库实例的当前引擎版本。
+ 数据库启用了自动次要版本升级。

RDS 安排升级在维护时段中自动运行。在升级过程中，RDS 将执行以下操作：

1. 运行系统预检查，以确保数据库运行状况良好并已准备好进行升级

1. 将数据库引擎升级到目标次要引擎版本

1. 运行升级后检查

1. 将数据库升级标记为完成

自动升级会导致停机。停机时间长短取决于各种因素，包括数据库引擎类型和数据库的大小。

### 启用自动次要版本升级
<a name="USER_UpgradeDBInstance.Upgrading.turning-on-automatic"></a>

当您执行以下任务时，您可以控制是否为数据库实例启用自动次要版本升级。
+ [创建数据库实例](USER_CreateDBInstance.md)
+ [修改数据库实例](Overview.DBInstance.Modifying.md)
+ [创建只读副本](USER_ReadRepl.Create.md)
+ [从快照还原数据库实例](USER_RestoreFromSnapshot.md)
+ [将数据库实例还原到特定时间](USER_PIT.md)
+ [从 Amazon S3 导入数据库实例](MySQL.Procedural.Importing.md)（适用于 Amazon S3 上的 MySQL 备份）

当您执行这些任务时，您可以通过以下方式控制是否为数据库实例启用自动次要版本升级：
+ 使用控制台，设置**自动次要版本升级**选项。
+ 使用 AWS CLI，设置 `--auto-minor-version-upgrade|--no-auto-minor-version-upgrade` 选项。
+ 使用 RDS API，设置 `AutoMinorVersionUpgrade` 参数。

### 确定维护更新的可用性
<a name="USER_UpgradeDBInstance.Upgrading.availability"></a>

要确定维护更新（如数据库引擎版本升级）是否可用于您的数据库实例，您可以使用控制台、AWS CLI 或 RDS API。您还可以手动升级数据库引擎实例版本并调整维护时段。有关更多信息，请参阅 [维护数据库实例](USER_UpgradeDBInstance.Maintenance.md)。

### 查找自动次要版本升级目标
<a name="USER_UpgradeDBInstance.Upgrading.targets"></a>

您可以使用以下 AWS CLI 命令，以确定特定 AWS 区域中指定数据库引擎次要版本的当前自动次要升级目标版本。您可以在 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 中的 `Engine` 参数描述中找到此命令可能的 `--engine` 值。

对于 Linux、macOS 或 Unix：

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

对于：Windows

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

例如，以下 AWS CLI 命令可确定美国东部（俄亥俄）AWS 区域 (us-east-2) 中 MySQL 次要版本 8.0.11 的自动次要升级目标。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
--engine mysql \
--engine-version 8.0.11 \
--region us-east-2 \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output table
```

对于：Windows

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--engine-version 8.0.11 ^
--region us-east-2 ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output table
```

输出类似于以下内容。

```
----------------------------------
|    DescribeDBEngineVersions    |
+--------------+-----------------+
|  AutoUpgrade |  EngineVersion  |
+--------------+-----------------+
|  False       |  8.0.15         |
|  False       |  8.0.16         |
|  False       |  8.0.17         |
|  False       |  8.0.19         |
|  False       |  8.0.20         |
|  False       |  8.0.21         |
|  True        |  8.0.23         |
|  False       |  8.0.25         |
+--------------+-----------------+
```

在此示例中，`AutoUpgrade` 值对于 MySQL 版本 8.0.23 为 `True`。因此，自动次要升级目标是 MySQL 版本 8.0.23，它在输出中突出显示。

**重要**  
如果您计划在不久后将 RDS for PostgreSQL 数据库实例迁移到 Aurora PostgreSQL 数据库集群，我们强烈建议您在规划期间的早期对数据库实例禁用自动次要版本升级。如果 Aurora PostgreSQL 尚不支持 RDS for PostgreSQL 版本，迁移到 Aurora PostgreSQL 可能会延迟。有关 Aurora PostgreSQL 版本的信息，请参阅 [Amazon Aurora PostgreSQL 的引擎版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)。