選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Aurora My 的主要版本升級預先檢查SQL - Amazon Aurora

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

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

Aurora My 的主要版本升級預先檢查SQL

將 MySQL 從一個主要版本升級至另一個主要版本,例如從 MySQL 5.7 升級至 MySQL 8.0,涉及一些需要仔細規劃和準備的重大架構變更。與次要版本升級不同,其重點主要是更新資料庫引擎軟體,在某些情況下,系統資料表,主要我的SQL升級通常會對資料庫存放和管理其中繼資料的方式帶來基本變更。

為了協助您識別這種不相容,在從 Aurora MySQL 第 2 版升級至第 3 版時,Aurora 會自動執行升級相容性檢查 (預先檢查),以檢查資料庫叢集中的物件,並識別已知的不相容,這些不相容情況可能會阻止升級進行。如需 Aurora MySQL 預先檢查的詳細資訊,請參閱 Aurora My 的預先檢查描述參考SQL。除了 Community MySQL 升級檢查工具公用程式 執行的 Aurora 預先檢查之外,還會執行這些預先檢查

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

  • 它們可以減少執行到升級失敗的可能性,這可能會導致延長停機時間。

  • 如果有不相容的情況,Amazon Aurora 會阻止升級繼續進行,並提供日誌供您了解。然後,您可以使用 日誌來準備資料庫,以解決不相容的問題,以升級至第 3 版。如需解決不相容的詳細資訊,請參閱我的SQL文件和升級至 My 8.0 中的準備要升級的安裝 SQL 以下是您在我的伺服器部落格上需要知道的...。SQL

    如需有關升級至 MySQL 8.0 的詳細資訊,請參閱我的文件中的升級SQL MySQL。

預先檢查會在資料庫叢集離線進行主要版本升級之前執行。如果預先檢查發現不相容,Aurora 會在資料庫執行個體停止之前自動取消升級。Aurora 也會為不相容產生事件。如需 Amazon Aurora 事件的詳細資訊,請參閱 使用 Amazon RDS 事件通知

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

注意

根據前置檢查的特性,這些檢查作業會分析資料庫中的物件。此分析會耗用資源,並增加升級完成的時間。如需預先檢查效能考量的詳細資訊,請參閱 Aurora My 的預先檢查程序SQL

Aurora My 的預先檢查程序SQL

如前所述,Aurora MySQL 升級程序涉及在主要版本升級可以繼續進行之前,在資料庫中執行相容性檢查 (預先檢查)。

對於就地升級,預先檢查會在寫入器資料庫執行個體上線時執行。如果預先檢查成功,升級會繼續進行。如果發現錯誤,則會登入 upgrade-prechecks.log 檔案並取消升級。在再次嘗試升級之前,請解決upgrade-prechecks.log檔案中傳回的任何錯誤。

對於快照還原升級,預先檢查會在還原程序期間執行。如果成功,您的資料庫將升級至新的 Aurora MySQL 版本。如果發現錯誤,則會登入 upgrade-prechecks.log 檔案,並取消升級。在再次嘗試升級之前,請解決upgrade-prechecks.log檔案中傳回的任何錯誤。

如需詳細資訊,請參閱 尋找 Aurora MySQL 主要版本升級失敗的原因Aurora My 的預先檢查描述參考SQL

若要監控預先檢查狀態,您可以在資料庫叢集上檢視下列事件。

預先檢查狀態 事件訊息 動作

已開始

升級準備進行中:開始線上升級預先檢查。

失敗

資料庫叢集處於無法升級的狀態:升級預先檢查失敗。如需詳細資訊,請參閱 upgrade-prechecks.log 檔案。

如需升級失敗原因疑難排解的詳細資訊,請參閱

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL。升級.Troubleshooting.html

檢閱upgrade-prechecks.log是否有錯誤。

修復錯誤。

重試升級。

Succeeded

升級準備進行中:已完成線上升級預先檢查。

預先檢查成功,沒有傳回錯誤。

upgrade-prechecks.log 檢閱警告和通知。

如需檢視事件的詳細資訊,請參閱 查看 Amazon RDS 活動

預先檢查 Aurora My 的日誌格式SQL

升級相容性檢查 (預先檢查) 完成後,您可以檢閱 upgrade-prechecks.log 檔案。日誌檔案包含每個預先檢查的結果、受影響的物件和修復資訊。

錯誤會封鎖升級。您必須先解決這些問題,才能重試升級。

警告和通知較不重要,但仍建議您仔細檢閱,以確保應用程式工作負載沒有相容性問題。盡快解決任何已識別的問題。

日誌檔案具有下列格式:

  • targetVersion – 與 My SQL相容的 Aurora MySQL 升級版本。

  • auroraServerVersion – 執行預先檢查的 Aurora MySQL 版本。

  • auroraTargetVersion – 您要升級的 Aurora MySQL 版本。

  • checksPerformed – 包含已執行預先檢查的清單。

  • id – 正在執行的預先檢查名稱。

  • title – 正在執行的預先檢查說明。

  • status – 這並不表示預先檢查是否成功或失敗,但會顯示預先檢查查詢的狀態:

    • OK – 預先檢查查詢已成功執行並完成。

    • ERROR – 預先檢查查詢無法執行。這可能是因為資源限制、意外執行個體重新啟動或正在中斷的相容性預先檢查查詢等問題所造成。

      如需詳細資訊,請參閱此範例

  • description – 不相容的一般描述,以及如何修復問題。

  • documentationLink – 如適用,相關 Aurora MySQL 或 MySQL 文件的連結會註明在此處。如需詳細資訊,請參閱Aurora My 的預先檢查描述參考SQL

  • detectedProblems – 如果預先檢查傳回錯誤、警告或通知,這會顯示不相容和不相容物件的詳細資訊,如適用:

    • level – 預先檢查偵測到的不相容程度。有效層級如下:

      • Error – 您必須先解決不相容問題,才能繼續升級。

      • Warning – 升級可以繼續,但偵測到已棄用物件、語法或組態。仔細檢閱警告,並儘快解決,以避免未來版本中發生問題。

      • Notice – 升級可以繼續,但偵測到已棄用物件、語法或組態。仔細檢閱通知,並儘快解決,以避免未來版本中發生問題。

    • dbObject – 偵測到不相容的資料庫物件名稱。

    • description – 不相容的詳細描述,以及如何修復問題。

  • errorCount – 偵測到的不相容錯誤數目。這些會封鎖升級。

  • warningCount – 偵測到的不相容警告數目。這些不會封鎖升級,但會盡快解決,以避免未來版本發生問題。

  • noticeCount – 偵測到的不相容通知數目。這些不會封鎖升級,請儘快解決,以避免未來版本發生問題。

  • Summary – 預先檢查相容性錯誤、警告和通知計數的摘要。

預先檢查 Aurora My 的日誌輸出範例SQL

下列範例顯示您可能會看到的預先檢查日誌輸出。如需執行之預先檢查的詳細資訊,請參閱 Aurora My 的預先檢查描述參考SQL

預先檢查狀態正常,未偵測到不相容

預先檢查查詢已成功完成。未偵測到不相容。

{ "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext", "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns", "status": "OK", "detectedProblems": [] },
預先檢查狀態正常,偵測到錯誤

預先檢查查詢已成功完成。偵測到一個錯誤。

{ "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns", "title": "Check for geometry columns on prefix indexes", "status": "OK", "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.", "detectedProblems": [ { "level": "Error", "dbObject": "test25.sbtest1", "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;" }, }
預先檢查狀態正常,偵測到警告

當預先檢查成功或失敗時,可以傳回警告。

在此處成功完成預先檢查查詢。偵測到兩個警告。

{ "id": "zeroDatesCheck", "title": "Zero Date, Datetime, and Timestamp values", "status": "OK", "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.", "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/", "detectedProblems": [ { "level": "Warning", "dbObject": "global.sql_mode", "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" }, { "level": "Warning", "dbObject": "session.sql_mode", "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" } ] }
預先檢查狀態 ERROR,未回報不相容

預先檢查查詢失敗,但發生錯誤,因此無法驗證不相容。

{ "id": "auroraUpgradeCheckForDatafilePathInconsistency", "title": "Check for inconsistency related to ibd file path.", "status": "ERROR", "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class." }

由於意外執行個體重新啟動或執行時資料庫上的相容性預先檢查查詢中斷,因此可能會發生此失敗。例如,在較小的資料庫執行個體類別上,當執行個體上的可用記憶體不足時,您可能會遇到這種情況。

您可以使用 FreeableMemory Amazon CloudWatch 指標,在執行預先檢查時驗證執行個體上的可用記憶體。如果執行個體記憶體不足,建議您在較大的資料庫執行個體類別上重試升級。在某些情況下,您可以使用藍/綠部署。這允許預先檢查和升級在「綠」資料庫叢集上執行,而不受生產工作負載影響,這也會使用系統資源。

如需詳細資訊,請參閱故障診斷 Aurora MySQL 資料庫的記憶體用量問題

預先檢查摘要,偵測到一個錯誤和三個警告

相容性預先檢查也包含來源和目標 Aurora MySQL 版本的相關資訊,以及預先檢查輸出結束時的錯誤、警告和通知計數摘要。

例如,下列輸出顯示已嘗試從 Aurora MySQL 2.11.6 升級到 Aurora MySQL 3.07.1。升級傳回一個錯誤、三個警告,而且沒有通知。由於在傳回錯誤時無法繼續升級,因此您必須解決routineSyntaxCheck相容性問題,然後重試升級。

{ "serverAddress": "/tmp%2Fmysql.sock", "serverVersion": "5.7.12 - MySQL Community Server (GPL)", "targetVersion": "8.0.36", "auroraServerVersion": "2.11.6", "auroraTargetVersion": "3.07.1", "outfilePath": "/rdsdbdata/tmp/PreChecker.log", "checksPerformed": [{ ... output for each individual precheck ... . . { "id": "oldTemporalCheck", "title": "Usage of old temporal type", "status": "OK", "detectedProblems": [] }, { "id": "routinesSyntaxCheck", "title": "MySQL 8.0 syntax check for routine-like objects", "status": "OK", "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.", "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html", "detectedProblems": [{ "level": "Error", "dbObject": "test.select_res_word", "description": "at line 2,18: unexpected token 'except'" }] }, . . . { "id": "zeroDatesCheck", "title": "Zero Date, Datetime, and Timestamp values", "status": "OK", "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.", "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/", "detectedProblems": [{ "level": "Warning", "dbObject": "global.sql_mode", "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" }, { "level": "Warning", "dbObject": "session.sql_mode", "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" } ] }, . . . }], "errorCount": 1, "warningCount": 3, "noticeCount": 0, "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues." }

Aurora My 的預先檢查效能SQL

相容性預先檢查會在資料庫執行個體離線進行升級之前執行,因此在正常情況下,不會在執行時造成資料庫執行個體停機。不過,它們可能會影響在寫入器資料庫執行個體上執行的應用程式工作負載。預先檢查會透過 information_schema 資料表存取資料字典,如果存在許多資料庫物件,可能會很慢。請考慮下列因素:

  • 預先檢查持續時間會因資料表、資料欄、例行程序和限制等資料庫物件數量而有所不同。具有大量物件的資料庫叢集可能需要更長的時間才能執行。

    例如, removedFunctionsCheck可能需要更長的時間,並根據儲存的物件數量使用更多資源。

  • 對於就地升級,使用較大的資料庫執行個體類別 (例如 db.r5.24xlarge 或 db.r6g.16xlarge) 可以透過使用更多 協助更快完成升級CPU。您可以在升級後縮減大小。

  • information_schema 跨多個資料庫的 查詢可能很慢,特別是對於許多物件和較小的資料庫執行個體。在這種情況下,請考慮使用複製、快照還原或藍/綠部署進行升級。

  • 預先檢查資源用量 (CPU,記憶體) 可能會隨著更多物件而增加,導致更小的資料庫執行個體的執行時間更長。在這種情況下,請考慮使用複製、快照還原或藍/綠部署進行測試以進行升級。

    如果預先檢查因資源不足而失敗,您可以使用狀態輸出在預先檢查日誌中偵測:

    "status": "ERROR",

如需詳細資訊,請參閱 Aurora MySQL 主要版本就地升級的運作方式規劃 Aurora MySQL 叢集的主要版本升級

Community MySQL 升級預先檢查摘要

以下是 MySQL 5.7 和 8.0 之間不相容的一般清單:

  • 您的 MySQL 5.7 相容資料庫叢集不得使用 MySQL 8.0 中不支援的功能。

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

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

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

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

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

  • 不得有非預設資料列格式的 InnoDB 資料表。

  • 必須沒有 ZEROFILLdisplay 長度類型屬性。

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

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

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

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

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

  • 不得有個別或SET資料欄元素長度超過 255 個字元的資料表ENUM或預存程序。

  • 共用 InnoDB 資料表空間中不得有資料表分割區。

  • 資料表空間資料檔案路徑中不得有循環參考。

  • GROUP BY句不得有使用 ASCDESC 限定詞的查詢和預存程式定義。

  • 不得移除任何系統變數,且系統變數必須使用 MySQL 8.0 的新預設值。

  • 日期、日期時間或時間戳記值不得為零 (0)。

  • 不得有任何因檔案移除或損毀而導致的結構描述不一致。

  • 不得有任何包含FTS字元字串的資料表名稱。

  • 不得有任何屬於不同引擎的 InnoDB 資料表。

  • 沒有任何資料表或結構描述名稱對 MySQL 5.7 無效。

如需執行之預先檢查的詳細資訊,請參閱 Aurora My 的預先檢查描述參考SQL

如需有關升級至 MySQL 8.0 的詳細資訊,請參閱我的文件中的升級SQL MySQL。如需 MySQL 8.0 中變更的一般說明,請參閱 MySQL 文件中的 MySQL 8.0 中的新功能

Aurora MySQL 升級預先檢查摘要

從第 2 版升級至第 3 版時,Aurora MySQL 有自己的特定要求,包括下列項目:

  • 在檢視、常式SQL_CACHESQL_NO_CACHE、觸發條件和事件中,不得有已棄用SQL語法QUERY_CACHE,例如 、 和 。

  • 任何沒有FTS索引的資料表上都必須沒有資料FTS_DOC_ID欄。

  • InnoDB 資料字典與實際資料表定義之間不得有任何資料欄定義不相符。

  • lower_case_table_names 參數設定為 時,所有資料庫和資料表名稱都必須是小寫1

  • 事件和觸發條件不得具有遺失或空白定義符,或無效的建立內容。

  • 資料庫中的所有觸發程序名稱必須是唯一的。

  • DDL Aurora MySQL 第 3 版DDL不支援復原和快速。資料庫中不得有與這些功能相關的成品。

  • 具有 REDUNDANTCOMPACT資料列格式的資料表索引不能大於 767 個位元組。

  • tiny文字資料欄上定義的索引字首長度不得超過 255 個位元組。使用utf8mb4字元集時,這會將支援的字首長度限制為 63 個字元。

    使用 innodb_large_prefix 參數,在 MySQL 5.7 中允許較大的字首長度。此參數已在 MySQL 8.0 中取代。

  • mysql.host 資料表中不得有任何 InnoDB 中繼資料不一致。

  • 系統資料表中不得有任何資料欄資料類型不相符。

  • 狀態中不得有 XA 交易prepared

  • 檢視中的資料欄名稱不能超過 64 個字元。

  • 預存程序中的特殊字元不能不一致。

  • 資料表不能有資料檔案路徑不一致。

如需執行之預先檢查的詳細資訊,請參閱 Aurora My 的預先檢查描述參考SQL

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。