安裝新版本的 MySQL 可能需要升級現有安裝的這些部分
mysql
系統綱要,其中包含 MySQL 伺服器執行時所需的資訊表格(請參閱第 7.3 節,「mysql 系統綱要」)。mysql
綱要表格分為兩大類資料字典表格,儲存資料庫物件的元資料。
系統表格(即,其餘非資料字典表格),用於其他操作目的。
其他綱要,其中一些是內建的,可以視為伺服器「擁有」,而其他則不是
使用者綱要。
與可能需要升級的安裝部分相關聯的兩個不同版本號
資料字典版本。這適用於資料字典表格。
伺服器版本,也稱為 MySQL 版本。這適用於系統表格和其他綱要中的物件。
在這兩種情況下,適用於現有 MySQL 安裝的實際版本都儲存在資料字典中,而目前預期的版本則編譯到新版本的 MySQL 中。當實際版本低於目前預期的版本時,必須將與該版本相關聯的安裝部分升級到目前版本。如果兩個版本都表示需要升級,則必須先進行資料字典升級。
為了反映剛才提到的兩個不同版本,升級分為兩個步驟
步驟 1:資料字典升級。
此步驟會升級
mysql
綱要中的資料字典表格。如果實際資料字典版本低於目前預期的版本,則伺服器會建立具有更新定義的資料字典表格,將持久化的元資料複製到新表格,以原子方式將舊表格替換為新表格,並重新初始化資料字典。效能綱要、
INFORMATION_SCHEMA
和ndbinfo
。
步驟 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 動作。 FORCE
與 AUTO
的不同之處在於,使用 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.db
、mysql.tables_priv
、mysql.columns_priv
和mysql.procs_priv
表格的主要索引鍵中的欄順序會變更,以將主機名稱和使用者名稱欄放在一起。將主機名稱和使用者名稱放在一起表示可以使用索引查詢,這可提升CREATE USER
、DROP USER
和RENAME USER
陳述式以及具有多個權限的多個使用者的 ACL 檢查效能。刪除並重新建立索引是必要的,如果系統有大量使用者和權限,可能需要一些時間。步驟 2 會根據需要處理所有使用者綱要中的所有表格。表格檢查可能需要很長時間才能完成。在處理期間,每個表格都會被鎖定,因此其他連線將無法使用。檢查和修復操作可能很耗時,特別是對於大型表格。表格檢查會使用
CHECK TABLE
陳述式的FOR UPGRADE
選項。關於此選項的詳細資訊,請參閱第 15.7.3.2 節,「CHECK TABLE 陳述式」。若要防止表格檢查,請使用
--upgrade=NONE
或--upgrade=MINIMAL
選項啟動伺服器。若要強制執行表格檢查,請使用
--upgrade=FORCE
選項啟動伺服器。步驟 2 會將所有已檢查和修復的表格標記為目前的 MySQL 版本號碼。這樣可確保下次使用相同版本的伺服器進行升級檢查時,可以判斷是否需要再次檢查或修復給定的表格。