

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

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

*主要版本升级*会包含不与现有应用程序向后兼容的数据库更改。因此，您必须手动为数据库实例执行主要版本升级。您可以通过修改数据库实例来启动主要版本升级。但是，执行主要版本升级之前，建议您按照[RDS for MariaDB 的主要版本升级](USER_UpgradeDBInstance.MariaDB.Major.md)中的说明操作。

相比之下，*次要版本升级*仅包括与现有应用程序向后兼容的更改。您可以通过修改数据库实例来手动启动次要版本升级。您也可以在创建或修改数据库实例时启用**自动次要版本升级**选项。这样做意味着数据库实例在 Amazon RDS 测试并批准新版本后会自动升级。有关执行升级的信息，请参阅 [升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

如果 MariaDB 数据库实例正在使用只读副本，则必须在升级源实例之前升级所有只读副本。如果数据库实例在多可用区部署中，则同时升级写入器和备用副本。在升级完成之前，数据库实例可能无法使用。

有关 MariaDB 支持的版本以及版本管理的更多信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。

数据库引擎升级需要停机。停机持续时间因数据库实例的大小而异。

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

**提示**  
您可以使用蓝绿部署，显著减少数据库实例升级所需的停机时间。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

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

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

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

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

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

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

如果数据库实例使用只读副本，则必须先升级所有只读副本，然后再升级源实例。

如果数据库实例在多可用区部署中，则同时升级主数据库实例和备用数据库实例。主副本和备用数据库实例将同时升级，而您会遇到中断，直到升级完成。中断时间因数据库引擎、引擎版本和数据库实例大小而异。

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

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

对于 Linux、macOS 或 Unix：

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

对于：Windows

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

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

对于 Linux、macOS 或 Unix：

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

对于：Windows

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

# MariaDB 版本号
<a name="USER_UpgradeDBInstance.MariaDB.VersionID"></a>

RDS for MariaDB 数据库引擎的版本编号序列采用 *major.minor.patch.YYYYMMDD* 或 *major.minor.patch* 形式，例如 10.11.5.R2.20231201 或 10.4.30。所使用的格式取决于 MariaDB 引擎版本。

**major**  
主要版本号是版本号的整数和第一个小数点后的部分，例如 10.11。主要版本升级会增加版本号的主要版本部分。例如，从 *10.5*.20 升级到 10.6.12 是主要版本升级，其中 *10.5* 和 *10.6* 为主要版本号。

**minor**  
次要版本号是版本号的第三部分，例如 10.11.5 中的 5。

**patch**  
补丁是版本号的第四部分，例如 10.11.5.R2 中的 R2。RDS 补丁版本包括在发布后添加到次要版本的重要错误修复。

**YYYYMMDD**  
日期是版本号的第五部分，例如 10.11.5.R2.20231201 中的 20231201。RDS 日期版本是一个安全补丁，它包括在发布后添加到次要版本的重要安全修复程序。它不包括任何可能更改引擎行为的修复程序。

下表说明了 RDS for MariaDB 版本 10.11 的命名方案。


| 10.11 次要版本 | 命名模式 | 
| --- | --- | 
| ≥5  | 新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.11.5.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.11.5.R2。 | 
| < 5 |  现有数据库实例使用 *major.minor.patch*，例如 10.11.4.R2。  | 

下表说明了 RDS for MariaDB 版本 10.6 的命名方案。


| 10.6 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 14 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.6.14.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.6.14.R2。 | 
| < 14 | 现有数据库实例使用 *major.minor.patch*，例如 10.6.13.R2。 | 

下表说明了 RDS for MariaDB 版本 10.5 的命名方案。


| 10.5 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 21 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.5.21.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.5.21.R2。 | 
| < 21 |  现有数据库实例使用 *major.minor.patch*，例如 10.5.20.R2。  | 

下表说明了 RDS for MariaDB 版本 10.4 的命名方案。


| 10.4 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 30 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.4.30.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.4.30.R2。 | 
| < 30 |  现有数据库实例使用 *major.minor.patch*，例如 10.4.29.R2。  | 

# RDS for MariaDB 中的 RDS 版本号
<a name="USER_UpgradeDBInstance.MariaDB.rds.version"></a>

RDS 版本号使用 `major.minor.patch` 或 `major.minor.patch.YYYYMMDD` 命名方案。RDS 补丁版本包括在发布后添加到次要版本的重要错误修复。RDS 日期版本（*YYMMDD*）是一个安全补丁。安全补丁不包括任何可能更改引擎行为的修复程序。

要识别数据库的 Amazon RDS 版本号，必须先使用以下命令创建 `rds_tools` 扩展：

```
CREATE EXTENSION rds_tools;
```

您可以通过以下 SQL 查询找出 RDS for MariaDB 数据库的 RDS 版本号：

```
mysql> select mysql.rds_version();
```

例如，查询 RDS for MariaDB 10.6.14 数据库将返回以下输出：

```
+---------------------+
| mysql.rds_version() |
+---------------------+
| 10.6.14.R2.20231201  |
+---------------------+
1 row in set (0.01 sec)
```

# RDS for MariaDB 的主要版本升级
<a name="USER_UpgradeDBInstance.MariaDB.Major"></a>

主要的版本升级可能包含未与现有应用程序向后兼容的数据库更改。因此，Amazon RDS 不会自动应用主要版本升级。您必须手动修改数据库实例。建议您在将任何升级应用于生产实例前全面测试这些升级。

**注意**  
在 MariaDB 11.8 中，`require_secure_transport` 的默认值现为 `1`，需要安全的 SSL/TLS 连接。如果需要非安全连接，则设置为 `0`。

Amazon RDS 支持 MariaDB 数据库引擎的以下主要版本就地升级：
+ 任何 MariaDB 版本到 MariaDB 11.8
+ 任何 MariaDB 版本到 MariaDB 11.4
+ 任何 MariaDB 版本到 MariaDB 10.11
+ 任何 MariaDB 版本到 MariaDB 10.6
+ MariaDB 10.4 到 MariaDB 10.5

如果使用的是自定义参数组并且要执行主要版本升级，则必须为新的数据库引擎版本指定默认参数组，或者为其创建自定义参数组。在完成升级后，将新的参数组与数据库实例关联需要重新启动客户启动的数据库。如果需要重新启动该实例来应用参数组更改，则该实例的参数组状态将显示 `pending-reboot`。可在 AWS 管理控制台 中查看实例的参数组状态，或者通过运行“describe”调用进行查看，例如 `describe-db-instances`。

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

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

# RDS for MariaDB 的自动次要版本升级
<a name="USER_UpgradeDBInstance.MariaDB.Minor"></a>

如果在创建或修改数据库实例时指定以下设置，则可以让数据库实例自动升级。
+ **自动次要版本升级**设置已启用。
+ **备份保留期**设置需大于 0。

在 AWS 管理控制台 中，这些设置位于 **Additional configuration**（其他配置）下。下图显示了 **Auto minor version upgrade**（自动次要版本升级）设置。

![\[自动次要版本升级设置\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/amvu.png)


有关这些设置的更多信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

对于某些 AWS 区域中的某些 RDS for MariaDB 主要版本，RDS 将一个次要版本指定为自动升级版本。在 Amazon RDS 测试并批准次要版本后，将在维护时段内自动进行次要版本升级。RDS 不会自动将发布的较新次要版本设置为自动升级版本。在 RDS 指定较新的自动升级版本之前，将会考虑一些条件，例如：
+ 已知的安全问题
+ MariaDB 社群版本中的错误
+ 发布次要版本后的整体队列稳定性

**注意**  
从 MariaDB 的特定次要版本开始，已删除对使用 TLS 版本 1.0 和 1.1 的支持。有关支持的 MariaDB 次要版本的信息，请参阅[Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md)。

您可以运行以下 AWS CLI 命令来确定特定 AWS 区域中指定 MariaDB 次要版本的当前自动次要版本升级目标版本。

对于 Linux、macOS 或 Unix：

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

对于 Windows：

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

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

对于 Linux、macOS 或 Unix：

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

对于 Windows：

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

输出类似于以下内容。

```
----------------------------------
|    DescribeDBEngineVersions    |
+--------------+-----------------+
|  AutoUpgrade |  EngineVersion  |
+--------------+-----------------+
|  True        |  10.5.17        |
|  False       |  10.5.18        |
|  False       |  10.5.19        |
|  False       |  10.6.5         |
|  False       |  10.6.7         |
|  False       |  10.6.8         |
|  False       |  10.6.10        |
|  False       |  10.6.11        | 
|  False       |  10.6.12        |
+--------------+-----------------+
```

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

如果满足以下条件，则会在维护时段内自动升级 MariaDB 数据库实例：
+ **自动次要版本升级**设置已启用。
+ **备份保留期**设置需大于 0。
+ 数据库实例运行的次要数据库引擎版本低于当前的自动升级次要版本。

有关更多信息，请参阅“[自动升级次要引擎版本](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)”。

# 使用只读副本在升级 RDS for MariaDB 数据库时减少停机时间
<a name="USER_UpgradeDBInstance.MariaDB.ReducedDowntime"></a>

在大多数情况下，蓝绿部署是升级 MariaDB 数据库实例时减少停机时间的最佳选择。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

如果您无法使用蓝绿部署，并且 MariaDB 数据库实例当前与生产应用程序结合使用，则可使用以下过程来升级数据库实例的数据库版本。此过程可以减少应用程序的停机时间。

使用只读副本，您可以提前执行大多数维护步骤，并在实际停机期间尽量减少必要的更改。利用此技巧，您可以在不对现有数据库实例进行任何更改的情况下测试和准备新的数据库实例。

以下过程显示了从 MariaDB 版本 10.5 升级到 MariaDB 版本 10.6 的示例。您可以使用相同的常规步骤升级到其他主要版本。

**在使用数据库实例时升级 MariaDB 数据库**

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

1. 创建 MariaDB 10.5 数据库实例的只读副本。该过程可创建数据库的可升级副本。可能还存在数据库实例的其他只读副本。

   1. 在控制台上，选择**数据库**，然后选择您要升级的数据库实例。

   1. 对于 **Actions (操作)**，选择 **Create read replica (创建只读副本)**。

   1. 为只读副本提供 **DB instance identifier**（数据库实例标识符）的值，并确保 **DB instance class**（数据库实例类）和其他设置与您的 MariaDB 10.5 数据库实例匹配。

   1. 选择 **Create read replica (创建只读副本)**。

1. （可选）创建只读副本且**状态**显示为**可用**之后，将只读副本转换为多可用区部署并启用备份。

   默认情况下，只读副本将创建为已禁用备份的单可用区部署。由于只读副本最终成为生产数据库实例，因此最佳实践是立即配置多可用区部署并启用备份。

   1. 在控制台上，选择**数据库**，然后选择您刚创建的只读副本。

   1. 选择**修改**。

   1. 对于**多可用区部署**，请选择**创建备用实例**。

   1. 对于 **Backup Retention Period**（备份保留期），请选择正的非零值（如 3 天），然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择**修改数据库实例**。

1. 当只读副本 **Status**（状态）显示 **Available**（可用）后，将只读副本升级到 MariaDB 10.6：

   1. 在控制台上，选择**数据库**，然后选择您刚创建的只读副本。

   1. 选择**修改**。

   1. 对于 **DB engine version**（数据库引擎版本），选择要升级到的 MariaDB 10.6 版本，然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择 **Modify DB instance (修改数据库实例)**开始升级。

1. 升级完成并且 **Status**（状态）显示 **Available**（可用）之后，验证升级的只读副本是否与源 MariaDB 10.5 数据库实例保持同步。要进行验证，请连接到只读副本并运行 `SHOW REPLICA STATUS` 命令。如果 `Seconds_Behind_Master` 字段为 `0`，则复制保持最新。
**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.6，请使用 `SHOW SLAVE STATUS`。

1. （可选）创建只读副本的只读副本。

   如果您希望数据库实例在提升为独立数据库实例后拥有只读副本，则可以立即创建只读副本。

   1. 在控制台上，选择**数据库**，然后选择您刚刚升级的只读副本。

   1. 对于 **Actions (操作)**，选择 **Create read replica (创建只读副本)**。

   1. 为只读副本提供 **DB instance identifier**（数据库实例标识符）的值，并确保 **DB instance class**（数据库实例类）和其他设置与您的 MariaDB 10.5 数据库实例匹配。

   1. 选择 **Create read replica (创建只读副本)**。

1. （可选）为只读副本配置自定义数据库参数组。

   如果您希望数据库实例在提升为独立数据库实例后使用自定义参数组，则可以立即创建数据库参数组，并将其与只读副本相关联。

   1. 为 MariaDB 10.6 创建自定义数据库参数组。有关说明，请参阅 [在 Amazon RDS 中创建数据库参数组](USER_WorkingWithParamGroups.Creating.md)。

   1. 修改要在刚创建的数据库参数组中更改的参数。有关说明，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

   1. 在控制台中，选择**数据库**，然后选择只读副本。

   1. 选择**修改**。

   1. 对于 **DB parameter group**（数据库参数组），请选择刚创建的 MariaDB 10.6 数据库参数组，然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择 **Modify DB instance (修改数据库实例)**开始升级。

1. 使您的 MariaDB 10.6 只读副本成为独立的数据库实例。
**重要**  
将 MariaDB 10.6 只读副本提升为独立的数据库实例后，它不再是 MariaDB 10.5 数据库实例的副本。建议您在源 MariaDB 10.5 数据库实例处于只读模式并且所有写入操作都暂停的维护时段期间，提升 MariaDB 10.6 只读副本。提升完成之后，您可以将写入操作定向到已升级的 MariaDB 10.6 数据库实例，以确保不会丢失写入操作。  
此外，建议您在提升 MariaDB 10.6 只读副本之前，对 MariaDB 10.6 只读副本执行所有必需的数据定义语言（DDL）操作。例如，创建索引。此方法可避免在提升 MariaDB 10.6 只读副本之后对其性能造成任何负面影响。要提升只读副本，请使用以下过程。

   1. 在控制台上，选择**数据库**，然后选择您刚刚升级的只读副本。

   1. 对于**操作**，请选择**提升**。

   1. 选择**是**，为只读副本实例启用自动备份。有关更多信息，请参阅“[备份简介](USER_WorkingWithAutomatedBackups.md)”。

   1. 选择 **Continue (继续)**。

   1. 选择 **Promote Read Replica**。

1. 您现在有了 MariaDB 数据库的升级版本。此时，您可以将应用程序定向到新的 MariaDB 10.6 数据库实例。

# 使用事件监控 RDS for MariaDB 数据库引擎升级
<a name="USER_UpgradeDBInstance.MariaDB.Monitoring"></a>

在升级 RDS for MariaDB 数据库的引擎版本时，Amazon RDS 在流程的每个阶段都会发出一个特定的事件。要跟踪升级进度，您可以查看或订阅这些事件。

 有关 RDS 事件的更多信息，请参阅[监控 Amazon RDS 事件](working-with-events.md)。

有关引擎升级期间发生的特定 Amazon RDS 事件的详细信息，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。