RDS 適用於 My 的 主要版本升級SQL - Amazon Relational Database Service

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

RDS 適用於 My 的 主要版本升級SQL

Amazon RDS支援 MySQL 資料庫引擎主要版本的下列就地升級:

  • 我的SQL 5.6 到 MySQL 5.7

  • 我的SQL 5.7 到 MySQL 8.0

注意

除了 db.m3 上一代資料庫執行個體類別之外,您只能使用最新一代和目前世代資料庫執行個體類別建立 MySQL 5.7 版和 8.0 資料庫執行個體。

在某些情況下,您想要將在上一代資料庫執行個體類別 (db.m3 除外) 上執行的 MySQL 5.6 版資料庫執行個體升級至 MySQL 5.7 版資料庫執行個體。在這些情況下,先將資料庫執行個體修改為使用最新一代的資料庫執行個體類別。完成此操作後,您可以修改資料庫執行個體以使用 MySQL 5.7 版資料庫引擎。如需 Amazon RDS 資料庫執行個體類別的資訊,請參閱 數據庫實例類

我的SQL主要版本升級概觀

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

若要在 Amazon 上將 MySQL 5.6 版資料庫執行個體的主要版本升級RDS為 MySQL 5.7 版或更新版本,請先執行任何可用的作業系統更新。作業系統完成更新後,請依序升級至每個主要版本:5.6 版至 5.7 版,接著是 5.7 版至 8.0 版。在 2014 年 4 月 24 日之前建立的我的SQL資料庫執行個體會顯示可用的作業系統更新,直到套用更新為止。如需作業系統更新的相關資訊,請參閱套用資料庫執行個體的更新

在 My 的主要版本升級期間SQL,Amazon 會視需要RDS執行 MySQL 二進位檔mysql_upgrade來升級資料表。此外,Amazon 會在主要版本升級期間清空 RDS slow_loggeneral_log 資料表。若要保留日誌資訊,請在主要版本升級之前儲存日誌內容。

我SQL的主要版本升級通常在大約 10 分鐘內完成。由於資料庫執行個體類別的大小,或因為執行個體未遵循Amazon 的最佳實踐 RDS中的特定操作準則,有些升級可能會較久。如果您從 Amazon RDS主控台升級資料庫執行個體,資料庫執行個體的狀態會指出升級完成的時間。如果您使用 AWS Command Line Interface (AWS CLI) 升級,請使用 describe-db-instances命令並檢查 Status值。

升級至 MySQL 5.7 版可能會很慢

我的SQL 5.6.4 版為 datetime、 和 timestamp資料欄引入了新的日期和時間格式time,允許日期和時間值中的分數元件。將資料庫執行個體升級至 MySQL 5.7 版時,我的SQL 會強制將所有日期和時間資料欄類型轉換為新格式。

因為此轉換會重建資料表,資料庫執行個體升級可能需要相當長的時間才會完成。強制轉換適用於執行 MySQL 5.6.4 版之前版本的任何資料庫執行個體。它也會發生在從 MySQL 5.6.4 版之前的版本升級至 5.7 版以外的任何資料庫執行個體。

如果您的資料庫執行個體執行 MySQL 5.6.4 版之前的版本,或從 5.6.4 版之前的版本升級,建議您採取額外的步驟。在這些情況下,建議您先轉換資料庫中的 datetime、 和 timestamp資料欄time,再將資料庫執行個體升級至 MySQL 5.7 版。此轉換可以大幅減少將資料庫執行個體升級至 MySQL 5.7 版所需的時間。您可以對包含日期或時間欄的資料表發出 ALTER TABLE <table_name> FORCE; 命令,進而將日期和時間欄升級為新格式。因為改變資料表會將資料表鎖定成唯讀,建議您在維護時段執行此更新。

您可以使用下列查詢,在資料庫中尋找含有 datetimetimetimestamp 欄的所有資料表,然後對每個資料表建立 ALTER TABLE <table_name> FORCE; 命令。

SET show_old_temporals = ON; SELECT table_schema, table_name,column_name, column_type FROM information_schema.columns WHERE column_type LIKE '%/* 5.5 binary format */'; SET show_old_temporals = OFF;

從 MySQL 5.7 升級至 8.0 的預先檢查

我的SQL 8.0 包含與 MySQL 5.7 的一些不相容。從 MySQL 5.7 升級到 MySQL 8.0 期間,這些不相容可能會導致問題。因此,您可能需要為資料庫做一些準備,才能順利完成升級。以下是這些不相容問題的一般清單:

  • 資料表不能使用過時的資料類型或函數。

  • 不能有孤立的 *.frm 檔案。

  • 觸發條件不能有遺漏或空白的 DEFINER,或是無效的建立內容。

  • 分割資料表所使用的儲存引擎皆需提供原生分割支援。

  • 不能違反關鍵字或保留字的規定。有些關鍵字可能保留在先前未保留的 MySQL 8.0 中。

    如需詳細資訊,請參閱我的SQL文件中的關鍵字和預留單字

  • MySQL 5.7 mysql系統資料庫中不得有任何與 MySQL 8.0 資料字典所使用的資料表名稱相同的資料表。

  • 您的sql_mode系統變數設定中必須未定義過時SQL模式。

  • 資料表或預存程序的個別 ENUMSET 資料欄元素長度皆不得超過 255 個字元,也不能超過 1020 位元組。

  • 在升級至 MySQL 8.0.13 或更新版本之前,不得有位於共用 InnoDB 資料表空間中的資料表分割區。

  • My 8.0.12 或更舊版本的子GROUP BY句不得使用 ASCDESC 限定詞查詢和儲存程式定義SQL。

  • 您的 MySQL 5.7 安裝不得使用 MySQL 8.0 中不支援的功能。

    如需詳細資訊,請參閱 MySQL 文件中的 MySQL 8.0 中移除的功能。

  • 外部索引鍵的限制條件名稱不得超過 64 個字元。

  • 運用 Unicode 增強支援時,請考慮將使用 utf8mb3 字元集的物件轉換成使用 utf8mb4 字元集,因為 utf8mb3 字元集已棄用。另外,utf8mb4 目前是 utf8 字元集的別名,因此請考慮使用 utf8 做為字元集參考,而不是 utf8mb3

    如需詳細資訊,請參閱我的SQL文件中的 utf8mb3 字元集 (3-byte UTF-8 unicode 編碼)

當您開始從 MySQL 5.7 升級到 8.0 時,Amazon 會自動RDS執行預先檢查,以偵測這些不相容情況。如需有關升級至 MySQL 8.0 的資訊,請參閱我的文件中的升級SQL MySQL。

系統會強制執行這些前置檢查,您無法選擇略過這些檢查。前置檢查提供以下優勢:

預先檢查包括 MySQL 中包含的部分,以及 Amazon RDS 團隊特別建立的部分。如需有關我的 提供的預先檢查的資訊SQL,請參閱升級檢查工具公用程式

前置檢查會在系統將資料庫執行個體停止以進行升級前執行,意即前置檢查執行期間不會造成任何停機時間。如果預先檢查發現不相容,Amazon 會在資料庫執行個體停止之前RDS自動取消升級。Amazon RDS也會針對不相容情況產生事件。如需 Amazon RDS事件的詳細資訊,請參閱 使用 Amazon RDS 事件通知

Amazon 會RDS記錄日誌檔案 中每個不相容的詳細資訊PrePatchCompatibility.log。在大多數情況下,日誌項目包含 MySQL 文件的連結,用於修正不相容。如需檢視日誌檔案的詳細資訊,請參閱檢視並列出資料庫日誌檔案

根據前置檢查的特性,這些檢查作業會分析資料庫中的物件。此分析會耗用資源,並增加升級完成的時間。

注意

Amazon 只會RDS針對從 MySQL 5.7 升級至 MySQL 8.0 執行所有這些預先檢查。對於從 MySQL 5.6 升級到 MySQL 5.7,預先檢查僅限於確認沒有孤立資料表,以及有足夠的儲存空間可以重建資料表。升級到低於 MySQL 5.7 的版本時,不會執行預先檢查。

無法從 MySQL 5.7 升級到 8.0 後復原

當您將資料庫執行個體從 MySQL 5.7 版升級至 MySQL 8.0 版時,升級可能會失敗。特別是,如果資料字典包含預先檢查未擷取的不相容性,則可能會失敗。在此情況下,資料庫無法在新的 MySQL 8.0 版本中成功啟動。此時,Amazon 會RDS復原針對升級執行的變更。復原後,MySQL 資料庫執行個體會執行 MySQL 5.7 版。當升級失敗並復原時,Amazon RDS會產生事件 ID 為 RDS-EVENT-0188 的事件。

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

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

如需有關升級至 MySQL 8.0 的詳細資訊,請參閱我的SQL文件中的下列主題:

注意

目前,只有在 MySQL 5.7 至 8.0 主要版本升級時,才支援升級失敗後的自動復原。