

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 Proxy 搭配使用時，您可以進一步將停機時間縮短至一秒或更短。如需詳細資訊，請參閱[Amazon RDS Proxy ](rds-proxy.md)。或者，您可以使用開放原始碼資料庫代理，例如 [ProxySQL](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://aws.amazon.com/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 或 [AWS 進階 JDBC 包裝函式驅動程式](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)。

Amazon RDS 也支援升級推展政策，以管理跨多個資料庫資源和 的自動次要版本升級 AWS 帳戶。如需詳細資訊，請參閱[使用 AWS 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 會建立資料庫執行個體的另一個快照。無論 是否 AWS Backup 管理資料庫執行個體的備份，Amazon RDS 都會拍攝這些快照。

**注意**  
只在您將資料庫執行個體的備份保留期設為大於 0 的數字時，Amazon RDS 才會建立資料庫快照。若要變更備份保留期，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

升級完成之後，您就無法回復至前一版的資料庫引擎。如果您想要回到前一版，請還原第一個建立的資料庫快照，以建立新的資料庫執行個體。

您可以控制何時將資料庫執行個體升級至 Amazon RDS 支援的新版本。這一層控制協助您維持與特定資料庫版本的相容性，並且先在您的應用程式上測試新版本，再部署於生產環境。準備好時，您就可以在最適合排程的時間執行版本升級。

如果資料庫執行個體使用讀取複寫，您就必須在升級來源執行個體之前，先升級所有僅供讀取複本。

## 尋找有效的升級目標
<a name="USER_UpgradeDBInstance.MySQL.FindingTargets"></a>

當您使用 AWS 管理主控台 來升級資料庫執行個體時，會顯示資料庫執行個體的有效升級目標。您也可以執行下列 AWS 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 版資料庫執行個體的有效升級目標，請執行下列 AWS 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.VersionID"></a>

RDS for MySQL 資料庫引擎的版本編號順序為 *major.minor.patch.YYYYMMDD* 或 *major.minor.patch* 格式，例如 8.0.33.R2.20231201 或 5.7.44。使用的格式取決於 MySQL 引擎版本。如需 RDS 延長支援版本編號的詳細資訊，請參閱 [Amazon RDS 延伸支援版本命名](extended-support-versions.md#extended-support-naming)。

**主要**  
主要引擎版本號碼是整數和版本號碼的第一個小數部分，例如 8.0。主要版本升級會增加版本號碼的主要部分。例如，從 *5.7*.44 升級至 8.0.33 是主要版本升級，其中 *5.7* 和 *8.0* 是主要版本號碼。

**minor**  
次要版本號碼是版本號碼的第三部分，例如 8.0.33 中的 33。

**patch**  
修補程式是版本號碼的第四部分，例如 8.0.33.R2 中的 R2。RDS 修補程式版本中包含發行後新增到次要版本的重要錯誤修正。

**YYYYMMDD**  
日期是版本號碼的第五部分，例如 8.0.33.R2.20231201 中的 20231201。RDS 含日期的版本中包含發佈後新增到次要版本的重要錯誤修正。其中不包含任何可能變更引擎行為的修正。

下表說明 RDS for MySQL 8.4 版的命名配置。


| 8.4 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 3  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 8.4.3.R2.20241201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 8.4.3.R2)，直到您下一次的主要或次要版本升級。 | 

下表說明 RDS for MySQL 8.0 版的命名配置。


| 8.0 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 33  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 8.0.33.R2.20231201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 8.0.33.R2)，直到您下一次的主要或次要版本升級。  | 
|  < 33  |  現有的資料庫執行個體會使用 *major.minor.patch*，例如 8.0.32.R2。  | 

下表說明 RDS for MySQL 5.7 版的命名配置。


| 5.7 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 42  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 5.7.42.R2.20231201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 5.7.42.R2)，直到您下一次的主要或次要版本升級。  | 

# RDS for MySQL 中的 RDS 版本號碼
<a name="USER_UpgradeDBInstance.MySQL.rds.version"></a>

RDS 版本號碼會使用 `major.minor.patch` 或 `major.minor.patch.YYYYMMDD` 命名配置。Amazon RDS 延長支援版本會使用 *minor-RDS.YYYYMMDD* 次要版本命名配置。

RDS 修補程式版本中包含發行後新增到次要版本的重要錯誤修正。RDS 日期版本 (*YYYYMMDD*) 是安全性修補程式。安全性修補程式不包含任何可能變更引擎行為的修正。如需 RDS 延長支援版本編號的詳細資訊，請參閱 [Amazon RDS 延伸支援版本命名](extended-support-versions.md#extended-support-naming)。

您可以透過下列 SQL 查詢找出 RDS for MySQL 資料庫的 RDS 版本號碼：

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

例如，查詢 RDS for MySQL 8.0.34 資料庫，會傳回下列輸出：

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

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

對於 MySQL 資料庫引擎的主要版本，Amazon RDS 支援以下的就地升級：
+ MySQL 5.7 至 MySQL 8.0
+ MySQL 8.0 至 MySQL 8.4

**注意**  
您只能以最新一代和當代資料庫執行個體類別來建立 MySQL 5.7、8.0 和 8.4 版資料庫執行個體。  
在某些情況下，您會想要將在前代資料庫執行個體類別上執行的資料庫執行個體升級至使用較高 MySQL 引擎版本的資料庫執行個體。在這些情況下，先將資料庫執行個體修改為使用最新一代的資料庫執行個體類別。在您這麼做後，您就可以將資料庫執行個體修改為使用較高的 MySQL 資料庫引擎版本。如需 Amazon RDS 資料庫執行個體類別的相關資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

**Topics**
+ [

## MySQL 主要版本升級概觀
](#USER_UpgradeDBInstance.MySQL.Major.Overview)
+ [

## 升級的預先檢查
](#USER_UpgradeDBInstance.MySQL.Prechecks)
+ [

## 在升級失敗後復原
](#USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure)

## MySQL 主要版本升級概觀
<a name="USER_UpgradeDBInstance.MySQL.Major.Overview"></a>

主要版本升級 可能包含與現有應用程式回溯不相容的資料庫變更。因此，Amazon RDS 不會自動套用主要版本升級；您必須手動修改資料庫執行個體。我們建議您在將任何升級套用至生產執行個體之前，先進行完整測試。

若要執行主要版本升級，請先執行任何可用的作業系統更新。作業系統完成更新後，請依序升級至各個主要版本，例如，5.7 升級至 8.0，8.0 再升級至 8.4。如需有關升級 RDS for MySQL 多可用區域資料庫叢集的資訊，請參閱 [升級 Amazon RDS 多可用區域資料庫叢集的引擎版本](multi-az-db-clusters-upgrading.md)。2014 年 4 月 24 日以前所建立的 MySQL 資料庫執行個體會顯示可用的作業系統更新，直到套用更新為止。如需作業系統更新的相關資訊，請參閱[將更新套用至資料庫執行個體](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.OSUpgrades)。

在 MySQL 的主要版本升級期間，Amazon RDS 會視需求執行 MySQL 二進位檔 `mysql_upgrade`，進而升級資料表。此外，在主要版本升級期間，Amazon RDS 還會清空 `slow_log` 與 `general_log` 資料表。若要保留日誌資訊，請在主要版本升級之前儲存日誌內容。

MySQL 主要版本升級通常在大約 10 分鐘內完成。由於資料庫執行個體類別的大小，或因為執行個體未遵循[Amazon RDS 的最佳實務](CHAP_BestPractices.md)中的特定操作準則，有些升級可能會較久。如果您從 Amazon RDS 主控台升級資料庫執行個體，資料庫執行個體的狀態會指出升級何時完成。如果您使用 AWS Command Line Interface (AWS CLI) 升級，請使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令並檢查 `Status`值。

## 升級的預先檢查
<a name="USER_UpgradeDBInstance.MySQL.Prechecks"></a>

Amazon RDS 會在升級之前執行預先檢查，確認是否有不相容的情形。這類不相容會根據要升級的 MySQL 版本而有所不同。

前置檢查所含的部分檢查是隨附於 MySQL 的項目，另一些則是由 Amazon RDS 團隊特別設計。如需 MySQL 提供的前置檢查相關資訊，請參閱[升級檢查程式公用程式](https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utilities-upgrade.html)。

前置檢查會在系統將資料庫執行個體停止以進行升級前執行，意即前置檢查執行期間不會造成任何停機時間。如果預先檢查找到不相容，Amazon RDS 會在資料庫執行個體停止前自動取消升級。Amazon RDS 也會為不相容產生事件。如需 Amazon RDS 事件的詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

Amazon RDS 會在日誌檔 `PrePatchCompatibility.log` 中記錄每個不相容的相關詳細資訊。在多數情況下，日誌項目包含修正不相容的 MySQL 文件連結。如需檢視日誌檔案的詳細資訊，請參閱[檢視並列出資料庫日誌檔案](USER_LogAccess.Procedural.Viewing.md)。

基於預先檢查的特性，這些檢查會分析資料庫中的物件。此分析會耗用資源，並增加升級完成的時間。

**Topics**
+ [

### 從 MySQL 8.0 升級至 8.4 的前置檢查
](#USER_UpgradeDBInstance.MySQL.80to84Prechecks)
+ [

### 從 MySQL 5.7 升級到 8.0 的前置檢查
](#USER_UpgradeDBInstance.MySQL.57to80Prechecks)

### 從 MySQL 8.0 升級至 8.4 的前置檢查
<a name="USER_UpgradeDBInstance.MySQL.80to84Prechecks"></a>

MySQL 8.4 有許多與 MySQL 8.0 不相容的地方。這些不相容可能會在從 MySQL 8.0 升級至 MySQL 8.4 期間發生問題。因此，您可能需要為資料庫做一些準備，才能順利完成升級。以下是這些不相容問題的一般清單：
+ 資料表不能使用過時的資料類型或函數。
+ 觸發條件不能有遺漏或空白的 DEFINER，或是無效的建立內容。
+ 不能違反關鍵字或保留字的規定。MySQL 8.4 中可能會保留一些先前未保留的關鍵字。

  如需詳細資訊，請參閱 MySQL 文件中的 [Keywords and Reserved Words](https://dev.mysql.com/doc/refman/8.4/en/keywords.html) (關鍵字與保留字)。
+ MySQL 8.0 `mysql` 系統資料庫中的資料表名稱不得與 MySQL 8.4 資料字典所使用的資料表名稱相同。
+ 不能在 `sql_mode` 系統變數設定中定義過時的 SQL 模式。
+ 資料表或預存程序的個別 `ENUM` 或 `SET` 資料欄元素長度皆不得超過 255 個字元，也不能超過 1020 位元組。
+ MySQL 8.0 安裝程式不可使用 MySQL 8.4 未支援的功能。

  如需詳細資訊，請參閱 MySQL 文件中的 [MySQL 8.4 中移除的功能](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html#mysql-nutshell-removals)。
+ 外部索引鍵的限制條件名稱不得超過 64 個字元。
+ 有關 Unicode 增強支援，請檢閱下列資訊：
  + 請考慮將使用 `utf8mb3` 字元集的物件轉換成使用 `utf8mb4` 字元集，因為 `utf8mb3` 字元集已棄用。
  + `utf8mb4` 目前是 `utf8` 字元集的別名，因此請考慮使用 `utf8` 做為字元集參考，而不是 `utf8mb3`。如果可能，請先將 `utf8` 變更為 `utf8mb4`，然後升級您的資料庫。
  + 由於較舊的用戶端可能會收到 `utf8mb3` 不明的字元集錯誤，在升級資料庫之前，請先升級資料庫用戶端。

  如需詳細資訊，請參閱 MySQL 文件中的 [The utf8mb3 character set (3-byte UTF-8 unicode encoding)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)。

  若要變更字元集，您可以手動執行資料庫的備份、還原和複寫。或者，您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

當您開始從 MySQL 8.0 升級至 8.4 時，Amazon RDS 會自動執行預先檢查，以偵測這些不相容問題。如需升級至 MySQL 8.4 的相關資訊，請參閱 MySQL 文件中的[升級 MySQL](https://dev.mysql.com/doc/refman/8.4/en/upgrading.html)。

系統會強制執行這些前置檢查，您無法選擇略過這些檢查。前置檢查提供以下優勢：
+ 升級期間可避免非預期的停機時間。
+ 出現不相容情況時，Amazon RDS 即會防止系統進行升級，並提供相關日誌讓您了解。如此，您就可以使用這些日誌來減少不相容情況，為資料庫做好升級至 MySQL 8.4 的準備。如需移除不相容的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)。

### 從 MySQL 5.7 升級到 8.0 的前置檢查
<a name="USER_UpgradeDBInstance.MySQL.57to80Prechecks"></a>

MySQL 8.0 與 MySQL 5.7 有許多不相容的地方。這些不相容可能會在從 MySQL 5.7 升級至 MySQL 8.0 期間發生問題。因此，您可能需要為資料庫做一些準備，才能順利完成升級。以下是這些不相容問題的一般清單：
+ 資料表不能使用過時的資料類型或函數。
+ 不能有孤立的 \$1.frm 檔案。
+ 觸發條件不能有遺漏或空白的 DEFINER，或是無效的建立內容。
+ 分割資料表所使用的儲存引擎皆需提供原生分割支援。
+ 不能違反關鍵字或保留字的規定。MySQL 8.0 中可能會保留一些先前未保留的關鍵字。

  如需詳細資訊，請參閱 MySQL 文件中的 [Keywords and Reserved Words](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) (關鍵字與保留字)。
+ MySQL 5.7 `mysql` 系統資料庫中的資料表名稱不得與 MySQL 8.0 資料字典所使用的資料表名稱相同。
+ 不能在 `sql_mode` 系統變數設定中定義過時的 SQL 模式。
+ 資料表或預存程序的個別 `ENUM` 或 `SET` 資料欄元素長度皆不得超過 255 個字元，也不能超過 1020 位元組。
+ 升級至 MySQL 8.0.13 或更新版本前，共用 InnoDB 資料表空間中不能存在資料表分割區。
+ MySQL 8.0.12 或較舊版本中的查詢和預存程式皆不得對 `ASC` 子句使用 `DESC` 或 `GROUP BY` 限定詞。
+ MySQL 5.7 安裝程式不能使用 MySQL 8.0 未支援的功能。

  如需詳細資訊，請參閱 MySQL 文件中的 [Features Removed in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) (MySQL 8.0 中移除的功能)。
+ 外部索引鍵的限制條件名稱不得超過 64 個字元。
+ 有關 Unicode 增強支援，請檢閱下列資訊：
  + 請考慮將使用 `utf8mb3` 字元集的物件轉換成使用 `utf8mb4` 字元集，因為 `utf8mb3` 字元集已棄用。
  + `utf8mb4` 目前是 `utf8` 字元集的別名，因此請考慮使用 `utf8` 做為字元集參考，而不是 `utf8mb3`。如果可能，請先將 `utf8` 變更為 `utf8mb4`，然後升級您的資料庫。
  + 由於較舊的用戶端可能會收到 `utf8mb3` 不明的字元集錯誤，在升級資料庫之前，請先升級資料庫用戶端。

  如需詳細資訊，請參閱 MySQL 文件中的 [The utf8mb3 character set (3-byte UTF-8 unicode encoding)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)。

  若要變更字元集，您可以手動執行資料庫的備份、還原和複寫。或者，您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

當您開始從 MySQL 5.7 升級到 8.0 時，Amazon RDS 會自動執行前置檢查，以偵測這些不相容問題。如需升級至 MySQL 8.0 的相關資訊，請參閱 MySQL 文件中的 [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) (升級 MySQL)。

系統會強制執行這些前置檢查，您無法選擇略過這些檢查。前置檢查提供以下優勢：
+ 升級期間可避免非預期的停機時間。
+ 出現不相容情況時，Amazon RDS 即會防止系統進行升級，並提供相關日誌讓您了解。如此，您就可以使用這些日誌來減少不相容情況，為資料庫做好升級至 MySQL 8.0 的準備。如需移除不相容問題的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)，以及[升級至 MySQL 8.0？ 這裡是您需要知道的事項...](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)。

## 在升級失敗後復原
<a name="USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure"></a>

當您將資料庫執行個體從 MySQL 5.7 版升級至 MySQL 8.0 版，或從 MySQL 8.0 版升級至 8.4 版時，升級可能會失敗。特別是，如果資料字典包含預先檢查未擷取的不相容性，則可能會失敗。在此情況下，資料庫無法在新的 MySQL 8.0 或 8.4 版中成功啟動。此時，Amazon RDS 會轉返升級執行的變更。復原後，MySQL 資料庫執行個體會執行原始版本：
+ MySQL 8.0 版 (從 MySQL 8.4 復原)
+ MySQL 5.7 版 (從 MySQL 8.0 復原)

升級失敗且轉返後，Amazon RDS 會產生具有事件 ID RDS-EVENT-0188 的事件。

通常，之所以升級失敗，是因為資料庫執行個體中的資料庫與目標 MySQL 版本之間的中繼資料存在不相容。升級失敗時，您可以在 `upgradeFailure.log` 檔案中檢視這些不相容性的詳細資訊。請先解決不相容性，然後嘗試再次升級。

在升級嘗試和轉返失敗期間，您的資料庫執行個體會重新啟動。任何擱置的參數變更都會在重新啟動期間套用，並在轉返後持續存在。

如需升級至 MySQL 8.0 的詳細資訊，請參閱 MySQL 文件中的下列主題：
+ [準備進行升級的裝置](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)
+ [升級至 MySQL 8.0？ 以下是您需要知道的內容.](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)..

如需升級至 MySQL 8.4 的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)。

# 測試 RDS for MySQL 升級
<a name="USER_UpgradeDBInstance.MySQL.UpgradeTesting"></a>

對資料庫執行個體執行主要版本升級之前，請完整測試資料庫，了解是否與新版本相容。此外，請完整測試可存取資料庫的所有應用程式，了解是否與新版本相容。建議您採用下列程序。

**測試主要版本升級**

1. 檢閱新版本資料庫引擎的升級文件，了解是否有可能影響資料庫或應用程式的相容性問題：
   +  [MySQL 5.7 的變更](http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html) 
   +  [MySQL 8.0 的變更](http://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) 
   + [MySQL 8.4 的變更](http://dev.mysql.com/doc/refman/8.4/en/upgrading-from-previous-series.html) 

1. 如果資料庫執行個體是自訂資料庫參數群組的成員，請以現有設定建立新的資料庫參數群組 (與新的主要版本相容)。在升級測試執行個體時，指定新的資料庫參數群組，讓升級測試確保該參數群組可順利運作。如需建立資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 針對要升級的資料庫執行個體建立資料庫快照。如需詳細資訊，請參閱 [為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。

1. 還原資料庫快照，以建立新的測試資料庫執行個體。如需詳細資訊，請參閱 [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

1. 使用如下詳述的其中一種方法，修改這個新的測試資料庫執行個體，以升級到新版本。如果您在步驟 2 建立新的參數群組，請指定該參數群組。

1. 評估升級的執行個體所使用的儲存體，以決定升級是否需要更多儲存體。

1. 對升級的資料庫執行個體儘可能進行越多次品質保證測試，以確保資料庫和應用程式搭配新版本可以正常運作。實作任何必要的新測試，以評估您在步驟 1 發現的任何相容性問題所帶來的影響。測試所有預存程序和函數。將應用程式的測試版本指向升級的資料庫執行個體。

1. 如果通過所有測試，就可以對生產資料庫執行個體進行升級。在確認一切都沒問題之前，建議您在資料庫執行個體上不要允許寫入操作。

## 升級 MySQL 資料庫執行個體
<a name="USER_UpgradeDBInstance.MySQL.Upgrading"></a>

如需有關手動或自動升級 MySQL 資料庫執行個體的資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

# RDS for MySQL 的自動次要版本升級
<a name="USER_UpgradeDBInstance.MySQL.Minor"></a>

如果您在建立或修改資料庫執行個體時指定下列設定，則可以讓資料庫執行個體自動升級。
+ 已啟用 **Auto minor version upgrade (自動次要版本升級)** 設定。
+ **Backup retention period (備份保留期間)** 設定大於 0。

在 AWS 管理主控台 中，這些設定位於 **Additional configuration** (其他組態) 下。下圖顯示 **Auto minor version upgrade** (自動次要版本升級) 設定。

![\[Amazon RDS 主控台中選取了啟用自動次要版本升級的維護區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/amvu.png)


如需這些設定的詳細資訊，請參閱 [資料庫執行個體的設定](USER_ModifyInstance.Settings.md)。

針對某些 AWS 區域 中的某些 RDS for MySQL 主要版本，RDS 會將一個次要版本指定為自動升級版本。次要版本經過測試，並由 Amazon RDS 核准之後，在您的維護時段期間，會自動發生次要版本升級。RDS 不會自動將較新發行的次要版本設定為自動升級版本。在 RDS 指派較新的自動升級版本之前，會考慮數個準則，例如下列：
+ 已知安全性問題
+ MySQL 社群版本中的錯誤
+ 從發行次要版本以來的整體機群穩定性

您可以執行下列 AWS CLI 命令，判斷特定 AWS 區域 中的指定 MySQL 次要版本目前的自動次要升級目標版本。

針對 Linux、macOS 或 Unix：

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

針對 Windows：

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--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` 值 是 `True` (若為 MySQL 版本 8.0.23)。因此，自動次要升級目標是 MySQL 版本 8.0.23，其已在輸出中反白顯示。

如果符合下列準則，在維護時段期間會自動升級 MySQL 資料庫執行個體：
+ 已啟用 **Auto minor version upgrade (自動次要版本升級)** 設定。
+ **Backup retention period (備份保留期間)** 設定大於 0。
+ 資料庫執行個體執行的次要資料庫引擎版本小於目前的自動升級次要版本。

如需詳細資訊，請參閱 [自動升級次要引擎版本](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)。

# 使用僅供讀取複本在升級 RDS for MySQL 資料庫時減少停機時間
<a name="USER_UpgradeDBInstance.MySQL.ReducedDowntime"></a>

在大多數情況下，藍/綠部署是升級 MySQL 資料庫執行個體時減少停機時間的最佳選項。如需詳細資訊，請參閱 [使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

如果您無法使用藍/綠部署，且您的 MySQL 資料庫執行個體目前與生產應用程式搭配使用，您可以使用下列程序來升級資料庫執行個體的資料庫版本。此程序可降低應用程式的停機時間。

透過使用僅供讀取複本，您可以提前執行大部分的維護步驟，並將實際中斷期間的必要變更降到最低。使用此技術，您可以測試和準備新的資料庫執行個體，而無需對現有的資料庫執行個體進行任何變更。

以下程序顯示從 MySQL 5.7 版升級至 MySQL 8.0 版的範例。您可以使用同樣的一般步驟升級到其他的主要版本。您可以使用同樣的一般步驟升級到其他的主要版本。

**注意**  
當您從 MySQL 5.7 版升級至 MySQL 8.0 版，或從 MySQL 8.0 版升級至 MySQL 8.4 版時，請先完成預先檢查，再執行升級。如需詳細資訊，請參閱[從 MySQL 5.7 升級到 8.0 的前置檢查](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.57to80Prechecks)及[從 MySQL 8.0 升級至 8.4 的前置檢查](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.80to84Prechecks)。

**在資料庫執行個體處於使用中的情況下升級 MySQL 資料庫**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 建立 MySQL 5.7 資料庫執行個體的僅供讀取複本。此程序建立資料庫的可升級副本。資料庫執行個體的其他僅供讀取複本也可能存在。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您要升級的資料庫執行個體。

   1. 在 **Actions** (動作) 中選擇 **Create read replica** (建立僅供讀取複本)。

   1. 在僅供讀取複本的 **DB instance identifier** (資料庫執行個體識別碼) 中提供一個值，並確定 **DB instance class** (資料庫執行個體類別) 和其他設定符合您的 MySQL 5.7 資料庫執行個體。

   1. 選擇 **Create read replica (建立僅供讀取複本)**。

1. (選用) 當僅供讀取複本已建立且**狀態**顯示為**可用**時，請將僅供讀取複本轉換為多可用區域部署，並啟用備份。

   根據預設，僅供讀取複本會在停用備份的情況下建立。由於僅供讀取複本最終會成為生產資料庫執行個體，因此最佳實務是設定多可用區域部署並啟用備份。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛建立的僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 針對**多可用區域部署**，選擇**建立待命執行個體**。

   1. 對於 **Backup Retention Period** (備份保留期)，選擇非零正值 (例如 3 天)，然後選擇 **Continue** (繼續)。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)**。

1. 僅供讀取複本的 **Status (狀態)** 顯示為 **Available (可用)** 時，請將僅供讀取複本升級至 MySQL 8.0：

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛建立的僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 在 **DB engine version (資料庫引擎版本)** 中，選擇升級到 MySQL 8.0 版，然後選擇 **Continue (繼續)**。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)** 以開始升級。

1. 當升級完成且 **Status (狀態)** 顯示為 **Available (可用)** 時，請確認升級的僅供讀取複本已和來源 MySQL 5.7 資料庫執行個體維持在相同的最新狀態。若要驗證，請連線至僅供讀取複本並執行 `SHOW REPLICA STATUS` 命令。如果 `Seconds_Behind_Master` 欄位是 `0`，表示複寫是最新狀態。
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. (選擇性) 建立僅供讀取複本的僅供讀取複本。

   如果您希望資料庫執行個體在提升為獨立資料庫執行個體後擁有僅供讀取複本，您可以立即建立僅供讀取複本。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛升級的僅供讀取複本。

   1. 在 **Actions** (動作) 中選擇 **Create read replica** (建立僅供讀取複本)。

   1. 在僅供讀取複本的 **DB instance identifier** (資料庫執行個體識別碼) 中提供一個值，並確定 **DB instance class** (資料庫執行個體類別) 和其他設定符合您的 MySQL 5.7 資料庫執行個體。

   1. 選擇 **Create read replica (建立僅供讀取複本)**。

1. (選擇性) 為僅供讀取複本設定自訂資料庫參數群組。

   如果您希望資料庫執行個體在提升為獨立資料庫執行個體後使用自訂參數群組，您現在可以建立資料庫參數群組，並將其與僅供讀取複本建立關聯。

   1. 建立 MySQL 8.0 的自訂資料庫參數群組。如需說明，請參閱「[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)」。

   1. 修改您想要在剛才建立的資料庫參數群組中變更的參數。如需說明，請參閱「[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)」。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 對於 **DB parameter group (資料庫參數群組)**，請選擇您剛才建立的 MySQL 8.0 資料庫參數群組，然後選擇 **Continue (繼續)**。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)** 以開始升級。

1. 將 MySQL 8.0 僅供讀取複本變成獨立資料庫執行個體。
**重要**  
當 MySQL 8.0 僅供讀取複本提升為獨立資料庫執行個體時，就不再是 MySQL 5.7 資料庫執行個體的複本。建議在維護時段提升 MySQL 8.0 僅供讀取複本，因為此時來源 MySQL 5.7 資料庫執行個體處於唯讀模式，且所有寫入操作都已暫停。提升完成時，您可以將寫入操作導向已升級的 MySQL 8.0 資料庫執行個體，以確保不會遺漏任何寫入操作。  
此外，在提升 MySQL 8.0 僅供讀取複本之前，建議您在 MySQL 8.0 僅供讀取複本上執行所有必要的資料定義語言 (DDL) 操作。範例是建立索引。此方法可避免 MySQL 8.0 僅供讀取複本在提升之後效能降低。若要提升僅供讀取複本，請使用以下程序。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛升級的僅供讀取複本。

   1. 針對 **Actions** (動作)，選擇 **Promote** (提升)。

   1. 選擇 **Yes (是)**，對僅供讀取複本執行個體啟用自動備份。如需詳細資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

   1. 選擇 **Continue (繼續)**。

   1. 選擇 **Promote Read Replica** (提升僅供讀取複本)。

1. 您現在已升級 MySQL 資料庫的版本。此時，您可以將應用程式導向至新的 MySQL 8.0 資料庫執行個體。

# 使用事件監控 RDS for MySQL 引擎升級
<a name="USER_UpgradeDBInstance.MySQL.Monitoring"></a>

當您升級 RDS for MySQL 資料庫的引擎版本時，Amazon RDS 會在程序的每個階段發出特定事件。若要追蹤升級進度，您可以檢視或訂閱這些事件。

 如需 RDS 事件的詳細資訊，請參閱 [監控 Amazon RDS 事件](working-with-events.md)。

如需引擎升級期間發生之特定 Amazon RDS 事件的詳細資訊，請參閱 [ Amazon RDS 事件類別和事件訊息](USER_Events.Messages.md)。