本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RDS for MySQL 的主要版本升級
對於 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 資料庫執行個體類別的相關資訊,請參閱資料庫執行個體類別。
MySQL 主要版本升級概觀
主要版本升級 可能包含與現有應用程式回溯不相容的資料庫變更。因此,Amazon RDS 不會自動套用主要版本升級;您必須手動修改資料庫執行個體。我們建議您在將任何升級套用至生產執行個體之前,先進行完整測試。
若要執行主要版本升級,請先執行任何可用的作業系統更新。作業系統更新完成後,請升級至每個主要版本,例如 5.7 至 8.0,然後 8.0 至 8.4。如需有關升級 RDS for MySQL 多可用區域資料庫叢集的資訊,請參閱 升級適用於 Amazon RDS 的多可用區域資料庫叢集引擎版本。2014 年 4 月 24 日以前所建立的 MySQL 資料庫執行個體會顯示可用的作業系統更新,直到套用更新為止。如需作業系統更新的相關資訊,請參閱將更新套用至資料庫執行個體。
在 MySQL 的主要版本升級期間,Amazon RDS 會視需求執行 MySQL 二進位檔 mysql_upgrade
,進而升級資料表。此外,在主要版本升級期間,Amazon RDS 還會清空 slow_log
與 general_log
資料表。若要保留日誌資訊,請在主要版本升級之前儲存日誌內容。
MySQL 主要版本升級通常在大約 10 分鐘內完成。由於資料庫執行個體類別的大小,或因為執行個體未遵循Amazon RDS 的最佳實務中的特定操作準則,有些升級可能會較久。如果您從 Amazon RDS 主控台升級資料庫執行個體,資料庫執行個體的狀態會指出升級何時完成。如果您使用 AWS Command Line Interface (AWS CLI) 升級,請使用 describe-db-instances 命令並檢查 Status
值。
升級的預先檢查
Amazon RDS 會在升級之前執行預先檢查,以檢查不相容。這些不相容情況會根據要升級的 MySQL 版本而有所不同。
前置檢查所含的部分檢查是隨附於 MySQL 的項目,另一些則是由 Amazon RDS 團隊特別設計。如需 MySQL 提供的前置檢查相關資訊,請參閱升級檢查程式公用程式
前置檢查會在系統將資料庫執行個體停止以進行升級前執行,意即前置檢查執行期間不會造成任何停機時間。如果預先檢查找到不相容,Amazon RDS 會在資料庫執行個體停止前自動取消升級。Amazon RDS 也會為不相容產生事件。如需 Amazon RDS 事件的詳細資訊,請參閱使用 Amazon RDS 事件通知。
Amazon RDS 會在日誌檔 PrePatchCompatibility.log
中記錄每個不相容的相關詳細資訊。在多數情況下,日誌項目包含修正不相容的 MySQL 文件連結。如需檢視日誌檔案的詳細資訊,請參閱檢視並列出資料庫日誌檔案。
由於預先檢查的性質,它們會分析資料庫中的物件。此分析會耗用資源,並增加升級完成的時間。
從 MySQL 8.0 升級至 8.4 的預先檢查
MySQL 8.4 包含與 MySQL 8.0 的許多不相容。這些不相容可能會在從 MySQL 8.0 升級到 MySQL 8.4 期間造成問題。因此,您可能需要為資料庫做一些準備,才能順利完成升級。以下是這些不相容問題的一般清單:
-
資料表不能使用過時的資料類型或函數。
-
觸發條件不能有遺漏或空白的 DEFINER,或是無效的建立內容。
-
不能違反關鍵字或保留字的規定。有些關鍵字可能保留在先前未保留的 MySQL 8.4 中。
如需詳細資訊,請參閱 MySQL 文件中的 Keywords and Reserved Words
(關鍵字與保留字)。 -
MySQL 8.0
mysql
系統資料庫中不得有任何與 MySQL 8.4 資料字典所用資料表具有相同名稱的資料表。 -
不能在
sql_mode
系統變數設定中定義過時的 SQL 模式。 -
資料表或預存程序的個別
ENUM
或SET
資料欄元素長度皆不得超過 255 個字元,也不能超過 1020 位元組。 -
您的 MySQL 8.0 安裝不得使用 MySQL 8.4 中不支援的功能。
如需詳細資訊,請參閱 MySQL 文件中的 MySQL 8.4 中移除的功能。
MySQL -
外部索引鍵的限制條件名稱不得超過 64 個字元。
-
如需改善 Unicode 支援,請檢閱下列資訊:
-
考慮轉換使用
utf8mb3
字元集的物件來使用utf8mb4
字元集。因為utf8mb3
字元集已棄用。 -
請考慮使用
utf8mb4
做為字元集參考而非utf8
,因為目前utf8
是utf8mb3
字元集的別名。如果可能,utf8mb4
請先utf8
變更為 ,然後升級您的資料庫。 -
由於較舊的用戶端可能會收到 的未知字元集錯誤
utf8mb3
,因此請在升級資料庫之前升級資料庫用戶端。
如需詳細資訊,請參閱 MySQL 文件中的 The utf8mb3 character set (3-byte UTF-8 unicode encoding)
。 若要變更字元集,您可以手動執行資料庫的備份、還原和複寫。或者,您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊,請參閱使用 Amazon RDS 藍/綠部署進行資料庫更新。
-
當您從 MySQL 8.0 升級至 8.4 時,Amazon RDS 會自動執行預先檢查,以偵測這些不相容情況。如需有關升級至 MySQL 8.4 的資訊,請參閱 MySQL 文件中的升級
系統會強制執行這些前置檢查,您無法選擇略過這些檢查。前置檢查提供以下優勢:
-
升級期間可避免非預期的停機時間。
-
出現不相容情況時,Amazon RDS 即會防止系統進行升級,並提供相關日誌讓您了解。然後,您可以使用 日誌來準備資料庫,以減少不相容的問題,以升級至 MySQL 8.4。如需移除不相容的詳細資訊,請參閱 MySQL 文件中的準備您的安裝以進行升級
。
從 MySQL 5.7 升級到 8.0 的前置檢查
MySQL 8.0 與 MySQL 5.7 有許多不相容的地方。這些不相容可能會在從 MySQL 5.7 升級至 MySQL 8.0 期間發生問題。因此,您可能需要為資料庫做一些準備,才能順利完成升級。以下是這些不相容問題的一般清單:
-
資料表不能使用過時的資料類型或函數。
-
不能有孤立的 *.frm 檔案。
-
觸發條件不能有遺漏或空白的 DEFINER,或是無效的建立內容。
-
分割資料表所使用的儲存引擎皆需提供原生分割支援。
-
不能違反關鍵字或保留字的規定。MySQL 8.0 中可能會保留一些先前未保留的關鍵字。
如需詳細資訊,請參閱 MySQL 文件中的 Keywords and Reserved Words
(關鍵字與保留字)。 -
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
(MySQL 8.0 中移除的功能)。 -
外部索引鍵的限制條件名稱不得超過 64 個字元。
-
如需改善 Unicode 支援,請檢閱下列資訊:
-
考慮轉換使用
utf8mb3
字元集的物件來使用utf8mb4
字元集。因為utf8mb3
字元集已棄用。 -
請考慮使用
utf8mb4
做為字元集參考而非utf8
,因為目前utf8
是utf8mb3
字元集的別名。如果可能,utf8mb4
請先utf8
變更為 ,然後升級您的資料庫。 -
由於較舊的用戶端可能會收到 的未知字元集錯誤
utf8mb3
,因此請在升級資料庫之前升級資料庫用戶端。
如需詳細資訊,請參閱 MySQL 文件中的 The utf8mb3 character set (3-byte UTF-8 unicode encoding)
。 若要變更字元集,您可以手動執行資料庫的備份、還原和複寫。或者,您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊,請參閱使用 Amazon RDS 藍/綠部署進行資料庫更新。
-
當您開始從 MySQL 5.7 升級到 8.0 時,Amazon RDS 會自動執行前置檢查,以偵測這些不相容問題。如需升級至 MySQL 8.0 的相關資訊,請參閱 MySQL 文件中的 Upgrading MySQL
系統會強制執行這些前置檢查,您無法選擇略過這些檢查。前置檢查提供以下優勢:
-
升級期間可避免非預期的停機時間。
-
出現不相容情況時,Amazon RDS 即會防止系統進行升級,並提供相關日誌讓您了解。如此,您就可以使用這些日誌來減少不相容情況,為資料庫做好升級至 MySQL 8.0 的準備。如需移除不相容問題的詳細資訊,請參閱 MySQL 文件中的準備您的安裝進行升級
,以及 MySQL Server 部落格上的升級至 MySQL 8.0? 這裡是您需要知道的事項... 。
升級失敗後復原
當您將資料庫執行個體從 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 文件中的下列主題:
如需升級至 MySQL 8.4 的詳細資訊,請參閱 MySQL 文件中的準備您的安裝以進行升級