MySQL 9.0 參考手冊  /  升級 MySQL  /  MySQL 升級程序升級的內容

3.4 MySQL 升級程序升級的內容

安裝新版本的 MySQL 可能需要升級現有安裝的這些部分

  • mysql 系統綱要,其中包含 MySQL 伺服器執行時所需的資訊表格(請參閱第 7.3 節,「mysql 系統綱要」)。mysql 綱要表格分為兩大類

    • 資料字典表格,儲存資料庫物件的元資料。

    • 系統表格(即,其餘非資料字典表格),用於其他操作目的。

  • 其他綱要,其中一些是內建的,可以視為伺服器「擁有」,而其他則不是

與可能需要升級的安裝部分相關聯的兩個不同版本號

  • 資料字典版本。這適用於資料字典表格。

  • 伺服器版本,也稱為 MySQL 版本。這適用於系統表格和其他綱要中的物件。

在這兩種情況下,適用於現有 MySQL 安裝的實際版本都儲存在資料字典中,而目前預期的版本則編譯到新版本的 MySQL 中。當實際版本低於目前預期的版本時,必須將與該版本相關聯的安裝部分升級到目前版本。如果兩個版本都表示需要升級,則必須先進行資料字典升級。

為了反映剛才提到的兩個不同版本,升級分為兩個步驟

  • 步驟 1:資料字典升級。

    此步驟會升級

    • mysql 綱要中的資料字典表格。如果實際資料字典版本低於目前預期的版本,則伺服器會建立具有更新定義的資料字典表格,將持久化的元資料複製到新表格,以原子方式將舊表格替換為新表格,並重新初始化資料字典。

    • 效能綱要、INFORMATION_SCHEMAndbinfo

  • 步驟 2:伺服器升級。

    此步驟包含所有其他升級任務。如果現有 MySQL 安裝的伺服器版本低於新安裝的 MySQL 版本,則必須升級其他所有內容

    • mysql 綱要中的系統表格(其餘非資料字典表格)。

    • sys 綱要。

    • 使用者綱要。

資料字典升級(步驟 1)是伺服器的責任,伺服器會在啟動時根據需要執行此任務,除非使用可防止其執行此操作的選項叫用。該選項是 --upgrade=NONE

如果資料字典已過時,但伺服器被阻止升級它,則伺服器不會執行,而是會以錯誤結束。例如

[ERROR] [MY-013381] [Server] Server shutting down because upgrade is
required, yet prohibited by the command line option '--upgrade=NONE'.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

--upgrade 伺服器選項控制伺服器是否以及如何在啟動時執行自動升級

  • 如果沒有選項或使用 --upgrade=AUTO,則伺服器會升級它判斷為過時的所有內容(步驟 1 和 2)。

  • 使用 --upgrade=NONE,則伺服器不會升級任何內容(略過步驟 1 和 2),但如果必須升級資料字典,也會以錯誤結束。無法執行具有過時資料字典的伺服器;伺服器堅持升級它或結束。

  • 如果使用 --upgrade=MINIMAL,則伺服器會根據需要升級資料字典、效能綱要和 INFORMATION_SCHEMA(步驟 1)。請注意,在使用此選項進行升級後,無法啟動群組複寫,因為複寫內部依賴的系統表格未更新,並且在其他區域也可能出現功能減少的情況。

  • 如果使用 --upgrade=FORCE,則伺服器會根據需要升級資料字典、效能綱要和 INFORMATION_SCHEMA(步驟 1),並強制升級其他所有內容(步驟 2)。使用此選項時,預期伺服器啟動時間會更長,因為伺服器會檢查所有綱要中的所有物件。

FORCE 在伺服器認為不需要時,用於強制執行步驟 2 動作。 FORCEAUTO 的不同之處在於,使用 FORCE 時,如果系統表格(例如說明表格或時區表格)遺失,則伺服器會重新建立這些表格。

關於升級步驟 2 期間發生的其他注意事項

  • 步驟 2 會安裝 sys 綱要(如果尚未安裝),否則會將其升級到目前版本。如果 sys 綱要存在但沒有 version 檢視,則會發生錯誤,因為假設其不存在表示是使用者建立的綱要

    A sys schema exists with no sys.version view. If
    you have a user created sys schema, this must be renamed for the
    upgrade to succeed.

    若要在這種情況下升級,請先移除或重新命名現有的 sys 綱要。然後再次執行升級程序。(可能需要強制執行步驟 2。)

    若要防止 sys 綱要檢查,請使用 --upgrade=NONE--upgrade=MINIMAL 選項啟動伺服器。

  • 步驟 2 會升級系統表格,以確保它們具有目前的結構,這包括說明表格,但不包括時區表格。載入時區表格的程序與平台相關,且需要 DBA 做出決策,因此無法自動完成。

  • 當步驟 2 升級 mysql 綱要中的系統表格時,mysql.dbmysql.tables_privmysql.columns_privmysql.procs_priv 表格的主要索引鍵中的欄順序會變更,以將主機名稱和使用者名稱欄放在一起。將主機名稱和使用者名稱放在一起表示可以使用索引查詢,這可提升 CREATE USERDROP USERRENAME USER 陳述式以及具有多個權限的多個使用者的 ACL 檢查效能。刪除並重新建立索引是必要的,如果系統有大量使用者和權限,可能需要一些時間。

  • 步驟 2 會根據需要處理所有使用者綱要中的所有表格。表格檢查可能需要很長時間才能完成。在處理期間,每個表格都會被鎖定,因此其他連線將無法使用。檢查和修復操作可能很耗時,特別是對於大型表格。表格檢查會使用 CHECK TABLE 陳述式的 FOR UPGRADE 選項。關於此選項的詳細資訊,請參閱第 15.7.3.2 節,「CHECK TABLE 陳述式」

    若要防止表格檢查,請使用 --upgrade=NONE--upgrade=MINIMAL 選項啟動伺服器。

    若要強制執行表格檢查,請使用 --upgrade=FORCE 選項啟動伺服器。

  • 步驟 2 會將所有已檢查和修復的表格標記為目前的 MySQL 版本號碼。這樣可確保下次使用相同版本的伺服器進行升級檢查時,可以判斷是否需要再次檢查或修復給定的表格。