

# 执行次要版本升级
执行次要版本升级

可以使用以下方法升级数据库集群的次要版本或修补数据库集群：

**Topics**
+ [

## 在执行次要版本升级之前
](#USER_UpgradeDBInstance.PostgreSQL.BeforeMinor)
+ [

## 如何执行次要版本升级和应用补丁
](#USER_UpgradeDBInstance.PostgreSQL.Minor)
+ [

## 次要版本升级和零停机时间修补
](#USER_UpgradeDBInstance.PostgreSQL.Minor.zdp)
+ [

## 零停机时间修补的限制
](#USER_UpgradeDBInstance.PostgreSQL.Minor.zdp.limitations)
+ [

## 将 Aurora PostgreSQL 引擎升级到新的次要版本
](#USER_UpgradeDBInstance.MinorUpgrade)

## 在执行次要版本升级之前
在执行次要版本升级之前

建议您执行以下操作以缩短次要版本升级期间的停机时间：
+ 应在流量较低的时段执行 Aurora 数据库集群维护。使用 Performance Insights 来识别这些时间段，以便正确配置维护时段。有关 Performance Insights 的更多信息，请参阅[在 Amazon RDS 上使用 Performance Insights 监控数据库负载](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_PerfInsights.html)。有关数据库集群维护时段的更多信息，请参阅[调整首选数据库集群维护时段](USER_UpgradeDBInstance.Maintenance.md#AdjustingTheMaintenanceWindow.Aurora)。
+ 使用支持指数回退和抖动的 Amazon SDK 作为最佳实践。有关更多信息，请参阅 [Exponential Backoff And Jitter](https://www.amazonaws.cn/blogs/architecture/exponential-backoff-and-jitter/)。

## 如何执行次要版本升级和应用补丁
如何执行次要版本升级和应用补丁

次要版本升级和补丁只有在经过严格的测试后才会在 Amazon Web Services 区域中推出。在发布升级和补丁之前，Aurora PostgreSQL 将进行测试，以确保次要社群版本发布后出现的已知安全问题、错误和其它问题不会破坏 Aurora PostgreSQL 实例集的稳定性。

如果您开启了**启用自动次要版本升级**，Aurora PostgreSQL 将在指定的维护时段定期升级您的数据库集群。确保对 Aurora PostgreSQL 数据库集群中的所有实例开启**启用自动次要版本升级**选项。有关如何设置**自动次要版本升级**以及该设置在集群和实例级别应用时的工作原理的信息，请参阅[Aurora 数据库集群的自动次要版本升级](USER_UpgradeDBInstance.Maintenance.md#Aurora.Maintenance.AMVU)。

通过使用 [describe-db-instances](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-instances.html) Amazon CLI 命令，针对所有 Aurora PostgreSQL 数据库集群检查**启用自动次要版本升级**选项的值，如下所示。

```
aws rds describe-db-instances \
  --query '*[].{DBClusterIdentifier:DBClusterIdentifier,DBInstanceIdentifier:DBInstanceIdentifier,AutoMinorVersionUpgrade:AutoMinorVersionUpgrade}'
```

此查询返回其 `AutoMinorVersionUpgrade` 设置的状态值为 `true` 或 `false` 的所有 Aurora DB 集群及其实例的列表。该命令假设您已将 Amazon CLI 配置为以默认的 Amazon Web Services 区域为目标。

有关 AmVU 选项以及如何修改 Aurora 数据库集群以使用该选项的更多信息，请参阅[Aurora 数据库集群的自动次要版本升级](USER_UpgradeDBInstance.Maintenance.md#Aurora.Maintenance.AMVU)。

您可以通过响应维护任务或修改集群以使用新版本，将 Aurora PostgreSQL 数据库集群升级到新的次要版本。

通过使用 RDS 控制台并打开 **Recommendations**（建议）菜单，您可以确定 Aurora PostgreSQL 数据库集群的任何可用升级或补丁。在此处，您可以找到各种维护问题的列表，例如 **Old minor versions**（旧的次要版本）。根据您的生产环境，您可以选择 **Schedule**（计划）升级，或通过选择 **Apply now**（立即应用）立即采取行动，如下所示。

![\[控制台图像，其中显示升级到较新次要版本的建议。\]](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/apg-maintenance-upgrade-minor.png)


要了解有关如何维护 Aurora 数据库集群的更多信息，包括如何手动应用补丁和次要版本升级，请参阅[维护Amazon Aurora 数据库集群](USER_UpgradeDBInstance.Maintenance.md)。

## 次要版本升级和零停机时间修补
次要版本升级和零停机时间修补

升级 Aurora PostgreSQL 数据库集群可能会导致中断。在升级过程中，数据库会在升级时关闭。如果在数据库忙碌时开始升级，则会丢失数据库集群正在处理的所有连接和事务。如果等到数据库处于空闲状态再执行升级，则可能需要等待很长时间。

零停机修补 (ZDP) 特征改进了升级过程。使用 ZDP，可以应用次要版本升级和补丁，且对 Aurora PostgreSQL 数据库集群的影响最小。当对 Aurora PostgreSQL 版本以及这些次要版本的其他更高版本和更高的主要版本应用补丁或更高次要版本升级时，使用 ZDP。也就是说，从这些版本中的任何一个升级到新的次要版本都使用 ZDP。

下表显示提供了 ZDP 的 Aurora PostgreSQL 版本和数据库实例类：


| 版本 | db.r\$1 实例类 | db.t\$1 实例类 | db.x\$1 实例类 | db.serverless 实例类 | 
| --- | --- | --- | --- | --- | 
| 10.21 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 11.16 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 11.17 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 12.11 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 12.12 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 13.7 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 13.8 及更高版本 | 支持 | 是 | 是 | 是 | 
| 14.3 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 14.4 及更高版本 | 支持 | 是 | 是 | 不适用 | 
| 14.5 及更高版本 | 支持 | 是 | 是 | 是 | 
| 15.3 及更高版本 | 支持 | 是 | 是 | 是 | 
| 16.1 及更高版本 | 支持 | 是 | 是 | 是 | 

在使用 ZDP 的升级过程中，数据库引擎会寻找一个安静点来暂停所有新事务。此操作可在应用补丁和升级期间保护数据库。为了确保您的应用程序在事务暂停的情况下平稳运行，我们建议将重试逻辑集成到您的代码中。这种方法可确保系统能够管理任何短暂的停机时间而不会出现故障，并且可以在升级后重试新事务。

当 ZDP 成功完成时，应用程序会话将保持（但断开连接的会话除外），并且数据库引擎将在升级仍在进行时重新启动。尽管数据库引擎重新启动可能会导致吞吐量临时下降，但这通常只持续几秒钟，最多约一分钟。

在某些情况下，零停机修补 (ZDP) 可能无法成功。例如，Aurora PostgreSQL 数据库集群或其实例上处于 `pending` 状态的参数更改会干扰 ZDP。

您可以在控制台的 **Events**（事件）页面中找到 ZDP 操作的指标和事件。这些事件包括 ZDP 升级的开始和升级完成。在这种情况下，您可以了解该过程所用的时长，以及在重新启动过程中发生的保留连接和断开连接的数量。您可以在数据库错误日志中找到详细信息。

## 零停机时间修补的限制
零停机时间修补的限制

零停机时间修补存在以下限制：
+ 在整个 Aurora PostgreSQL 升级过程中，ZDP 尝试保留与 Aurora PostgreSQL 写入器实例的当前客户端连接。但在以下情况下，连接将断开，以便 ZDP 完成：
  + 正在执行长时间运行的查询或事务。
  + 数据定义语言（DDL）语句正在运行。
  + 正在使用临时表或表锁定。
  + 所有会话都在侦听通知渠道。
  + 处于“WITH HOLD”状态的光标正在使用中。
  + 使用的是 TLSv1.1 连接。从 Aurora PostgreSQL 高于 16.1、15.3、14.8、13.11、12.15 和 11.20 的版本开始，TLSv1.3 连接支持 ZDP。
+ 在以下情况下，不支持 ZDP：
  + 当 Aurora PostgreSQL 数据库集群配置为 Aurora Serverless v1 时。
  + 在升级任意 Aurora 读取器实例期间。
  + 在升级辅助区域中属于 Aurora Global Database 集群的任何 Aurora 读取器实例期间。
  + 在操作系统修补和操作系统升级期间。

## 将 Aurora PostgreSQL 引擎升级到新的次要版本
将 Aurora PostgreSQL 引擎升级到新的次要版本

 您可以使用以下方法将 Aurora PostgreSQL 数据库集群升级到新的次要版本：控制台、Amazon CLI 或 RDS API。在执行升级之前，我们建议您遵循我们针对主要版本升级推荐的最佳实践。与新的主要版本一样，新的次要版本也可以对优化器进行改进（例如修复），这可能会导致查询计划回归。为确保计划稳定性，我们建议您使用查询计划管理（QPM）扩展，详情请参阅[确保主要版本升级后的计划稳定性](AuroraPostgreSQL.Optimize.BestPractice.md#AuroraPostgreSQL.Optimize.BestPractice.MajorVersionUpgrade)。

### 控制台


**升级 Aurora PostgreSQL 数据库集群的引擎版本**

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

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

1. 选择**修改**。此时会显示**修改数据库集群**页面。

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

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

1. 要立即应用更改，请选择**立即应用**。选择此选项在某些情况下可能导致中断。有关更多信息，请参阅“[修改 Amazon Aurora 数据库集群](Aurora.Modifying.md)”。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择**修改集群**以保存更改。

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

### Amazon CLI


要升级数据库集群的引擎版本，请结合使用 Amazon CLI 命令 [modify-db-cluster](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-cluster.html) 与以下参数：
+ `--db-cluster-identifier` – Aurora PostgreSQL 数据库集群的名称。
+ `--engine-version` – 数据库引擎要升级到的版本号。有关有效的引擎版本的信息，请使用 Amazon CLI [describe-db-engine-versions](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-engine-versions.html) 命令。
+ `--no-apply-immediately` – 在下一维护时段内应用更改。要立即应用更改，请改用 `--apply-immediately`。

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-cluster \
    --db-cluster-identifier mydbcluster \
    --engine-version new_version \
    --no-apply-immediately
```

对于：Windows

```
aws rds modify-db-cluster ^
    --db-cluster-identifier mydbcluster ^
    --engine-version new_version ^
    --no-apply-immediately
```

### RDS API


要升级数据库集群的引擎版本，请使用 [ModifyDBCluster](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) 操作。指定以下参数：
+ `DBClusterIdentifier` – 数据库集群的名称，例如 *`mydbcluster`*。
+ `EngineVersion` – 数据库引擎要升级到的版本号。有关有效的引擎版本的信息，请使用 [DescribeDBEngineVersions](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBEngineVersions.html) 操作。
+ `ApplyImmediately` – 是立即应用更改还是在下一个维护时段内应用更改。要立即应用更改，请将该值设置为 `true`。要在下一个维护时段内应用更改，请将该值设置为 `false`。