MySQL 升級到8.4版本的完整流程及操作方法
本指南詳細介紹了將 MySQL 升級到 8.4 版本的完整流程、注意事項和操作方法。
一、升級前準備 (3.1 Before You Begin)
在開始升級之前,必須仔細審閱本節(jié)信息并執(zhí)行所有推薦的操作:
- 理解升級過程:了解升級期間可能發(fā)生的情況。請參閱第 3.4 節(jié)“MySQL 升級過程升級的內(nèi)容”。
- 備份數(shù)據(jù):創(chuàng)建完整的數(shù)據(jù)庫備份以保護您的數(shù)據(jù)。此備份必須包含
mysql系統(tǒng)數(shù)據(jù)庫,該數(shù)據(jù)庫存儲了 MySQL 數(shù)據(jù)字典表和其他系統(tǒng)表。
- 備份數(shù)據(jù):創(chuàng)建完整的數(shù)據(jù)庫備份以保護您的數(shù)據(jù)。此備份必須包含
- 重要提示:
- 不支持從 MySQL 8.4 降級到 MySQL 8.3,或從一個 MySQL 8.4 版本降級到更早的 MySQL 8.4 版本。
- 唯一支持的降級替代方案是恢復(fù)升級前創(chuàng)建的備份。
- 因此,在啟動升級過程之前備份數(shù)據(jù)是絕對必要的。
- 檢查升級路徑:審閱第 3.2 節(jié)“升級路徑”,確保您計劃的升級路徑是受支持的。
- 審閱變更:審閱第 3.5 節(jié)“MySQL 8.4 中的變更”,了解升級前需要注意的變更。某些變更可能需要您采取行動。
- 審閱廢棄和移除功能:審閱第 1.4 節(jié)“自 MySQL 8.0 以來 MySQL 8.4 的新變化”中關(guān)于廢棄和移除功能的信息。如果您使用了這些功能中的任何一項,升級可能需要相應(yīng)更改。
- 審閱配置變量變更:審閱第 1.5 節(jié)“自 8.0 以來 MySQL 8.4 中新增、廢棄或移除的服務(wù)器和狀態(tài)變量及選項”。如果您使用了廢棄或已移除的變量,升級可能需要更改配置。
- 查閱發(fā)行說明:查閱 MySQL 8.4 的發(fā)行說明,了解修復(fù)、變更和新功能信息。
- 復(fù)制環(huán)境:如果使用了復(fù)制,審閱第 19.5.3 節(jié)“升級或降級復(fù)制拓撲”。
- 遵循最佳實踐:審閱第 3.3 節(jié)“升級最佳實踐”并相應(yīng)地進行規(guī)劃。
二、升級路徑 (3.2 Upgrade Paths)
注意:
- 在嘗試降級之前,請確保了解 MySQL 長期支持 (LTS) 和創(chuàng)新版本的發(fā)布模型。
- 建議在執(zhí)行升級之前,使用 MySQL Shell 的升級檢查器工具 (
util.checkForServerUpgrade()) 檢查升級兼容性。 - 復(fù)制拓撲的升級遵循第 19.5.3 節(jié)“升級或降級復(fù)制拓撲”中描述的滾動升級方案,該方案使用支持的單一服務(wù)器升級方法之一來升級每個單獨的服務(wù)器。
- 月度快速更新 (MRU) 和熱修復(fù)在此文檔中也視為發(fā)布。
表:MySQL 服務(wù)器的升級路徑
| 升級路徑 | 路徑示例 | 支持的升級方法 |
|---|---|---|
| 在同一個 LTS 或 Bugfix 系列內(nèi) | 8.0.37 到 8.0.41 或 8.4.0 到 8.4.4 | 原地升級、邏輯導(dǎo)出導(dǎo)入、復(fù)制、MySQL 克隆 |
| 從 LTS/Bugfix 系列到下一個 LTS 系列 | 8.0.37 到 8.4.x LTS | 原地升級、邏輯導(dǎo)出導(dǎo)入、復(fù)制 |
| 從 LTS/Bugfix 到下一個 LTS 系列之前的創(chuàng)新版 | 8.0.34 到 8.3.0 或 8.4.0 到 9.0.0 | 原地升級、邏輯導(dǎo)出導(dǎo)入、復(fù)制 |
| 從創(chuàng)新系列到下一個 LTS 系列 | 8.3.0 到 8.4 LTS | 原地升級、邏輯導(dǎo)出導(dǎo)入、復(fù)制 |
| 從創(chuàng)新系列到下一個 LTS 系列之后的創(chuàng)新版 | 不允許 | 需要兩步:8.3.0 到 8.4 LTS,然后 8.4 LTS 到 9.x 創(chuàng)新版 |
| 在同一個創(chuàng)新系列內(nèi) | 8.1.0 到 8.3.0 | 原地升級、邏輯導(dǎo)出導(dǎo)入、復(fù)制 |
| 從 MySQL 5.7 到 LTS 或創(chuàng)新版 | MySQL 5.7 到 8.4 | 不能跳過 Bugfix 或 LTS 系列。例如,需先將 MySQL 5.7 升級到 MySQL 8.0,再將 MySQL 8.0 升級到 MySQL 8.4。 |
三、升級最佳實踐 (3.3 Upgrade Best Practices)
MySQL 支持在次要版本之間(LTS 系列內(nèi))升級和跨主版本(跨 LTS 系列)升級。升級可提供最新的功能、性能和安全性修復(fù)。
為確保成功升級到最新的 MySQL 8.4 版本,我們推薦以下最佳實踐:
- 決定升級的主版本或次版本:
- 了解 MySQL 發(fā)布模型中 LTS(長期支持)和創(chuàng)新版本的區(qū)別。LTS 版本提供 8 年以上的支持,適用于生產(chǎn)環(huán)境。創(chuàng)新版本為用戶提供最新的功能和能力。
- 次要版本升級通常較簡單,而主版本升級需要戰(zhàn)略規(guī)劃和額外的升級前測試。本指南對主版本升級尤其有用。
- 決定升級類型:
- 原地升級 (In-place):替換 MySQL 服務(wù)器軟件包。
- 邏輯升級 (Logical):將 SQL 從舊的 MySQL 實例導(dǎo)出并導(dǎo)入到新的實例。
- 復(fù)制拓撲升級 (Replication):考慮每個服務(wù)器在拓撲中的角色。
- 審查支持的平臺:
- 如果您的當前操作系統(tǒng)不被新版本的 MySQL 支持,則計劃升級操作系統(tǒng),否則不支持原地升級。
- 查看當前支持的平臺列表:https://www.mysql.com/support/supportedplatforms/database.html
- 了解 MySQL 服務(wù)器變更:
- 每個主版本都會帶來新功能、行為變更、廢棄項和移除項。了解這些變更對現(xiàn)有應(yīng)用的影響至關(guān)重要。
- 參閱:第 3.5 節(jié) “MySQL 8.4 中的變更”。
- 運行升級檢查器并修復(fù)不兼容問題:
- 使用 MySQL Shell 的升級檢查器工具 (
util.checkForServerUpgrade()) 檢測數(shù)據(jù)庫版本之間必須解決的升級前不兼容問題。 - 連接到現(xiàn)有的 MySQL 服務(wù)器,并選擇計劃升級到的目標 MySQL 服務(wù)器版本。該工具將報告升級前需要解決的問題(例如數(shù)據(jù)類型、存儲引擎等的不兼容性)。
- 當升級檢查器不再報告任何問題時,您已準備好升級。
- 使用 MySQL Shell 的升級檢查器工具 (
- 在測試環(huán)境中運行應(yīng)用程序:
- 完成升級檢查器的要求后,下一步在目標 MySQL 服務(wù)器上測試您的應(yīng)用程序。
- 檢查 MySQL 錯誤日志和應(yīng)用程序日志中的錯誤和警告。
- 對應(yīng)用程序和工作負載進行基準測試:
- 建議通過比較應(yīng)用程序和工作負載在 MySQL 新舊版本上的性能表現(xiàn)來進行基準測試。通常,較新的 MySQL 版本會增加功能并提高性能,但在某些情況下,特定查詢在升級后可能會變慢。
- 可能導(dǎo)致性能下降的原因包括:
- 先前的服務(wù)器配置對新版本不是最優(yōu)的
- 數(shù)據(jù)類型變更
- 多字節(jié)字符集支持需要更多存儲空間
- 存儲引擎變更
- 索引被刪除或更改
- 更強的加密
- 更強的認證
- SQL 優(yōu)化器變更
- 新版本的 MySQL 需要更多內(nèi)存
- 物理或虛擬硬件變慢(計算或存儲)
- 有關(guān)信息及可能的緩解技術(shù),請參閱 驗證性能下降。
- 并行運行新舊 MySQL 版本:
- 為最小化風(fēng)險,最好在運行升級系統(tǒng)的同時保持當前系統(tǒng)運行(并行運行)。
- 進行最終的測試升級:
- 在升級生產(chǎn)系統(tǒng)之前,進行練習(xí)和全面測試升級流程。
- 檢查 MySQL 備份:
- 在執(zhí)行升級之前,確認存在完整的備份并且可用。
- 升級生產(chǎn)服務(wù)器:
- 完成上述步驟后,即可進行生產(chǎn)環(huán)境升級。
- 企業(yè)支持:
- 如果您是 MySQL 企業(yè)版客戶,還可以聯(lián)系 MySQL 支持團隊專家咨詢?nèi)魏螁栴}。
四、MySQL 升級過程升級的內(nèi)容 (3.4 What the MySQL Upgrade Process Upgrades)
安裝新版本的 MySQL 可能需要升級現(xiàn)有安裝的以下部分:
mysql系統(tǒng)模式:包含存儲 MySQL 服務(wù)器運行時所需信息的表(參見第 7.3 節(jié) “mysql系統(tǒng)模式”)。mysql模式表分為兩大類:- 數(shù)據(jù)字典表:存儲數(shù)據(jù)庫對象元數(shù)據(jù)。
- 系統(tǒng)表(即剩余的非數(shù)據(jù)字典表):用于其他操作目的。
- 其他模式:包括一些內(nèi)置的、可視為服務(wù)器“擁有”的模式,以及其他用戶模式:
performance_schema、INFORMATION_SCHEMA、ndbinfo和sys模式。- 用戶模式。
有兩個不同的版本號與可能需要升級的部分相關(guān)聯(lián):
- 數(shù)據(jù)字典版本:適用于數(shù)據(jù)字典表。
- 服務(wù)器版本(又稱 MySQL 版本):適用于系統(tǒng)表和其他模式中的對象。
升級過程發(fā)生在兩個步驟:
- 步驟 1:數(shù)據(jù)字典升級:
- 升級
mysql模式中的數(shù)據(jù)字典表、Performance Schema、INFORMATION_SCHEMA和ndbinfo。 - 由服務(wù)器在啟動時自動執(zhí)行(除非使用
--upgrade=NONE選項禁止)。 - 如果數(shù)據(jù)字典過期但被禁止升級,服務(wù)器將無法啟動并報錯退出。
- 使用
--upgrade服務(wù)器選項控制自動升級行為:--upgrade=AUTO(或無選項):升級所有過期的內(nèi)容(步驟 1 和 2)。--upgrade=NONE:不升級任何內(nèi)容,但如果數(shù)據(jù)字典必須升級則退出報錯。--upgrade=MINIMAL:僅升級數(shù)據(jù)字典、Performance Schema 和INFORMATION_SCHEMA(步驟 1)。注意:此選項后無法啟動組復(fù)制,且其他功能可能受限。--upgrade=FORCE:升級步驟 1 的內(nèi)容,并強制升級其他所有內(nèi)容(步驟 2)。啟動時間可能較長。
- 升級
- 步驟 2:服務(wù)器升級:
- 升級
mysql模式中的系統(tǒng)表(剩余的非數(shù)據(jù)字典表)、sys模式和用戶模式。 - 安裝或升級
sys模式(如果存在同名用戶模式會報錯)。 - 將系統(tǒng)表升級到當前結(jié)構(gòu)(包括幫助表,不包括時區(qū)表)。
- 更改
mysql.db,mysql.tables_priv,mysql.columns_priv,mysql.procs_priv表主鍵列順序以提升性能(對擁有大量用戶和權(quán)限的系統(tǒng)可能耗時)。 - 使用
CHECK TABLE ... FOR UPGRADE檢查并處理所有用戶模式中的所有表(可能耗時且鎖表)。 - 將所有檢查和修復(fù)過的表標記為當前的 MySQL 版本號。
- 注意:升級過程不會升級時區(qū)表的內(nèi)容。升級時區(qū)表需手動操作,參見第 7.1.15 節(jié) “MySQL 服務(wù)器時區(qū)支持”。
- 升級
五、MySQL 8.4 中的變更 (3.5 Changes in MySQL 8.4)
在升級到 MySQL 8.4 之前,請審閱以下部分描述的變更,以識別適用于您當前 MySQL 安裝和應(yīng)用程序的變更:
- MySQL 8.4 中的不兼容變更:
- 空間索引:升級到 MySQL 8.4.4 或更高版本時,建議在升級前刪除所有空間索引,升級完成后再重新創(chuàng)建它們?;蛘?,您也可以在升級后立即(但在使用包含這些索引的表之前)刪除并重新創(chuàng)建此類索引。更多信息參見第 13.4.10 節(jié) “創(chuàng)建空間索引”。
- 移除
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()函數(shù):MySQL 8.0 中已廢棄的WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()SQL 函數(shù)在 8.4 中已移除;嘗試調(diào)用它現(xiàn)在會導(dǎo)致語法錯誤。請改用WAIT_FOR_EXECUTED_GTID_SET()。 authentication_fido和authentication_fido_client在某些平臺上不再可用:由于服務(wù)器捆綁的libfido2庫升級到需要 OpenSSL 1.1.1 或更高版本的 1.13.0,authentication_fido和authentication_fido_client認證插件在 Enterprise Linux 6, Enterprise Linux 7, Solaris 11 或 SUSE Enterprise Linux 12 上不再可用。- 命令行選項禁止設(shè)置為
NULL:在命令行上將服務(wù)器變量設(shè)置為 SQLNULL是不支持的。在 MySQL 8.4 中,明確禁止將任何此類變量設(shè)置為NULL,嘗試這樣做將被拒絕并報錯。特定變量(如basedir,datadir,plugin_dir等)除外。參見第 7.1.8 節(jié) “服務(wù)器系統(tǒng)變量”。 - 更多變更信息請參閱第 1.4 節(jié) “自 MySQL 8.0 以來 MySQL 8.4 的新變化”。
- 變更的服務(wù)器默認值:
- 下表列出了 MySQL 8.4 與 MySQL 8.0 相比,系統(tǒng)變量默認值發(fā)生變化的項目。雖然新默認值適用于大多數(shù)用例,但在特定場景或需要兼容舊配置時可能需要調(diào)整。
| 分類 | 系統(tǒng)變量 | 舊默認值 | 新默認值 |
|---|---|---|---|
| InnoDB 變更 | innodb_adaptive_hash_index | ON | OFF |
innodb_buffer_pool_in_core_file | ON | OFF | |
innodb_buffer_pool_instances | innodb_buffer_pool_size < 1GB: 1; 否則: 8 | innodb_buffer_pool_size <= 1GB: 1; 否則: MIN( 0.5 * (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size), 0.25 * number_of_cpus) | |
innodb_change_buffering | all | none | |
innodb_doublewrite_files | innodb_buffer_pool_instances * 2 | 2 | |
innodb_doublewrite_pages | innodb_write_io_threads 的值 | 128 | |
innodb_flush_method | fsync | 支持則 O_DIRECT,否則 fsync | |
innodb_io_capacity | 200 | 10000 | |
innodb_io_capacity_max | MIN(2 * innodb_io_capacity, 2000) | 2 * innodb_io_capacity | |
innodb_log_buffer_size | 16777216 (16MB) | 67108864 (64MB) | |
innodb_numa_interleave | OFF | ON | |
innodb_page_cleaners | 4 | innodb_buffer_pool_instances 的值 | |
innodb_parallel_read_threads | 4 | MIN(number_of_cpus / 8, 4) | |
innodb_purge_threads | 4 | 如果 number_of_cpus <= 16: 1; 否則: 4 | |
innodb_use_fdatasync | OFF | ON | |
| 組復(fù)制變更 | group_replication_consistency | EVENTUAL | BEFORE_ON_PRIMARY_FAILOVER |
group_replication_exit_state_action | READ_ONLY | OFFLINE_MODE | |
| 臨時表變更 | temptable_max_mmap | 1073741824 (1GB) | 0 |
temptable_max_ram | 1073741824 (1GB) | 總內(nèi)存的 3% (范圍 1-4 GB) | |
temptable_use_mmap | ON | OFF |
- 有關(guān) MySQL 8.4 中新增的選項或變量,請參閱 MySQL 服務(wù)器版本參考中的“MySQL 8.4 的選項和變量變更”。
- 性能模式
variables_info表顯示了每個系統(tǒng)變量的設(shè)置來源及其取值范圍。
六、準備安裝進行升級 (3.6 Preparing Your Installation for Upgrade)
在升級到最新的 MySQL 8.4 版本之前,通過執(zhí)行以下初步檢查,確保您當前的 MySQL 8.3 或 MySQL 8.4 服務(wù)器實例已做好升級準備:
提示: 考慮使用 MySQL Shell 升級檢查器工具 (util.checkForServerUpgrade()) 來驗證 MySQL 服務(wù)器實例是否已準備好升級。您可以指定計劃升級到的目標 MySQL 服務(wù)器版本(從 MySQL Server 8.0.11 到與當前 MySQL Shell 版本號匹配的 MySQL Server 版本號)。該工具執(zhí)行與指定目標版本相關(guān)的自動檢查,并建議您應(yīng)手動進行的其他相關(guān)檢查。升級檢查器適用于 MySQL 的所有 Bugfix、Innovation 和 LTS 版本。MySQL Shell 安裝說明請參閱 此處。
初步檢查(必須不存在以下問題):
- 運行升級兼容性檢查:
如果
mysqlcheck -u root -p --all-databases --check-upgrade
mysqlcheck報告任何錯誤,請糾正這些問題。具體包括:- 沒有使用廢棄數(shù)據(jù)類型或函數(shù)的表。
- 沒有孤立的
.frm文件。 - 觸發(fā)器沒有缺失或空的定義者 (
DEFINER) 或無效的創(chuàng)建上下文(由SHOW TRIGGERS或INFORMATION_SCHEMA.TRIGGERS表中的character_set_client,collation_connection,Database Collation屬性指示)。任何此類觸發(fā)器必須導(dǎo)出并重新導(dǎo)入以修復(fù)問題。
- 檢查不支持分區(qū)的存儲引擎:查詢報告的任何表必須更改為使用 InnoDB 或使其變?yōu)榉欠謪^(qū)表:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';- 更改存儲引擎:
ALTER TABLE table_name ENGINE = INNODB;(參見第 17.6.1.5 節(jié) “將表從 MyISAM 轉(zhuǎn)換到 InnoDB”)。 - 移除分區(qū):
ALTER TABLE table_name REMOVE PARTITIONING;
- 更改存儲引擎:
- 檢查保留關(guān)鍵字沖突:MySQL 8.4 中的一些新保留關(guān)鍵字可能使之前用作標識符的詞變得非法。修復(fù)方法是使用反引號
`引用標識符。參見第 11.2 節(jié) “模式對象名稱” 和第 11.3 節(jié) “關(guān)鍵字和保留詞”。 - 檢查與數(shù)據(jù)字典表沖突的用戶表:查詢報告的任何表必須刪除或重命名 (
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql' AND LOWER(TABLE_NAME) IN ( 'catalogs', 'character_sets', 'check_constraints', 'collations', 'column_statistics', 'column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata', 'st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats', 'tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage' );RENAME TABLE)。這也可能需要更改使用這些受影響表的應(yīng)用程序。 - 檢查過長的外鍵約束名 (超過 64 字符):對于約束名超過 64 字符的表,刪除該約束并使用不超過 64 字符的約束名重新添加 (
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1), INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);ALTER TABLE ... DROP FOREIGN KEY ..., ADD CONSTRAINT ... FOREIGN KEY ...)。 - 檢查 SQL 模式:
sql_mode系統(tǒng)變量中不能定義已廢棄的 SQL 模式。嘗試使用已廢棄的 SQL 模式會阻止 MySQL 8.4 啟動。應(yīng)修改使用已廢棄 SQL 模式的應(yīng)用程序以避免它們。參見服務(wù)器變更中移除的 SQL 模式。 - 確保正常關(guān)機:僅升級已正確關(guān)閉的 MySQL 服務(wù)器實例。如果實例意外關(guān)閉,請重啟該實例并使用
innodb_fast_shutdown=0關(guān)閉它后再進行升級。 - 檢查視圖列名長度:不能有顯式定義列名超過 64 字符的視圖(MySQL 5.7 允許最多 255 字符)。為避免升級錯誤,應(yīng)在升級前修改此類視圖。識別方法:使用
SHOW CREATE VIEW或查詢INFORMATION_SCHEMA.VIEWS表檢查視圖定義。 - 檢查 ENUM/SET 元素長度:不能有單個
ENUM或SET列元素超過 255 字符或 1020 字節(jié)長度的表或存儲過程。在 MySQL 8.4 之前,ENUM或SET列元素的最大組合長度為 64K。在 MySQL 8.4 中,單個ENUM或SET列元素的最大字符長度為 255,最大字節(jié)長度為 1020(支持多字節(jié)字符集)。在升級到 MySQL 8.4 之前,修改任何超出新限制的ENUM或SET列元素。否則會導(dǎo)致升級失敗。 - 移除廢棄功能:您的 MySQL 8.3 安裝不能使用 MySQL 8.4 不支持的功能。例如:
- 審閱 MySQL 8.4 中移除的功能和已移除的服務(wù)器啟動選項及系統(tǒng)變量(參見第 1.5 節(jié))。如果使用了其中任何一項,升級需要更改配置。
lower_case_table_names變更注意事項:- 如果您打算在升級時將
lower_case_table_names設(shè)置更改為1,請確保在升級前模式和表名都是小寫的。否則,由于模式或表名字母大小寫不匹配,可能會導(dǎo)致失敗。 - 使用以下查詢檢查包含大寫字符的模式和表名:
SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME COLLATE utf8mb4_bin <> LOWER(TABLE_NAME) COLLATE utf8mb4_bin;
- 注意:不建議在升級時更改
lower_case_table_names設(shè)置。如果lower_case_table_names=1,升級過程會檢查表和模式名是否全為小寫字符。如果發(fā)現(xiàn)包含大寫字符的表或模式名,升級過程將因錯誤而失敗。
- 如果您打算在升級時將
升級失敗處理:
如果升級到 MySQL 8.4 因上述任何問題失敗,服務(wù)器將回滾對數(shù)據(jù)目錄的所有更改。在這種情況下,應(yīng)刪除所有重做日志文件 (ib_logfile*),在現(xiàn)有數(shù)據(jù)目錄上重新啟動 MySQL 8.3 服務(wù)器以解決錯誤。修復(fù)錯誤后,執(zhí)行慢速關(guān)閉 (innodb_fast_shutdown=0),然后再次嘗試升級。
七、Unix/Linux 上基于二進制或軟件包的安裝升級 (3.7)
升級方法取決于平臺和初始安裝方式:
1. 原地升級 (In-Place Upgrade)
原地升級涉及關(guān)閉舊服務(wù)器,用新的二進制文件或軟件包替換舊的,然后在現(xiàn)有數(shù)據(jù)目錄上重啟新服務(wù)器。
步驟:
- 審閱第 3.1 節(jié)信息。
- 按照第 3.6 節(jié)完成安裝準備檢查。
- XA 事務(wù):如果使用 InnoDB 的 XA 事務(wù),升級前運行
XA RECOVER檢查未提交的 XA 事務(wù)。如果有結(jié)果,使用XA COMMIT或XA ROLLBACK提交或回滾這些事務(wù)。 - 關(guān)機設(shè)置:如果通常配置
innodb_fast_shutdown=2(冷關(guān)機),請配置為執(zhí)行快速或慢速關(guān)機:SET GLOBAL innodb_fast_shutdown = 1; -- 快速關(guān)機 SET GLOBAL innodb_fast_shutdown = 0; -- 慢速關(guān)機 (推薦用于跨版本升級)
- 關(guān)閉舊服務(wù)器:
mysqladmin -u root -p shutdown
- 升級 MySQL 二進制文件或軟件包:
- 二進制安裝:解壓新的 MySQL 二進制分發(fā)包 (參見 獲取并解壓分發(fā)版)。
- 軟件包安裝:安裝新軟件包 (注意:如果最初安裝了多個 RPM 包,需升級所有包,而不僅僅是服務(wù)器包)。對于 Yum/APT/SLES 倉庫安裝,請使用相應(yīng)的包管理器命令 (如
sudo yum update mysql-server,sudo apt-get install mysql-server)。 - 注意:對于使用 systemd 的平臺 (RPM/Debian 包安裝),使用
systemctl管理服務(wù) (systemctl stop mysqld,systemctl start mysqld),而不是mysqld_safe。
- 啟動 MySQL 8.4 服務(wù)器 (使用現(xiàn)有數(shù)據(jù)目錄):
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir & # 或者對于 systemd 系統(tǒng) sudo systemctl start mysqld
- 如果有加密的 InnoDB 表空間,使用
--early-plugin-load選項加載密鑰環(huán)插件。
- 如果有加密的 InnoDB 表空間,使用
- 自動升級:
- 服務(wù)器啟動時自動檢測數(shù)據(jù)字典表是否存在。如果不存在,則在數(shù)據(jù)目錄中創(chuàng)建它們,用元數(shù)據(jù)填充,然后繼續(xù)正常啟動序列。
- 此過程升級所有數(shù)據(jù)庫對象的元數(shù)據(jù)(數(shù)據(jù)庫、表空間、系統(tǒng)和用戶表、視圖、存儲程序)并移除以前用于元數(shù)據(jù)存儲的文件(如
.frm文件)。 - 失敗處理:如果此步驟失敗,服務(wù)器回滾更改。需刪除重做日志文件,重啟舊版服務(wù)器修復(fù)錯誤,慢速關(guān)機后重試升級。
- 此步驟還根據(jù)需要升級
mysql系統(tǒng)數(shù)據(jù)庫,更新 Performance Schema、INFORMATION_SCHEMA、sys數(shù)據(jù)庫,并檢查所有用戶數(shù)據(jù)庫與當前 MySQL 版本的兼容性。 - 注意:此過程不會升級時區(qū)表。升級時區(qū)表需手動操作,參見第 7.1.15 節(jié)。
2. 邏輯升級 (Logical Upgrade)
邏輯升級涉及使用 mysqldump 等工具從舊實例導(dǎo)出 SQL,安裝新服務(wù)器,然后將 SQL 導(dǎo)入到新實例。
步驟:
- 審閱第 3.1 節(jié)信息。
- 從舊安裝導(dǎo)出數(shù)據(jù):重要提示: 如果表包含生成列,請使用 MySQL 5.7.9 或更高版本附帶的
mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
mysqldump??梢允褂?INFORMATION_SCHEMA.COLUMNS表識別帶有生成列的表。 - 關(guān)閉舊服務(wù)器:
mysqladmin -u root -p shutdown
- 安裝 MySQL 8.4:參見第 2 章 “安裝 MySQL”。
- 初始化新數(shù)據(jù)目錄:記下屏幕上顯示或?qū)懭脲e誤日志的臨時 ‘root’@‘localhost’ 密碼。
mysqld --initialize --datadir=/path/to/8.4-datadir
- 啟動 MySQL 8.4 服務(wù)器 (使用新數(shù)據(jù)目錄):
mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir & # 或者對于 systemd 系統(tǒng) sudo systemctl start mysqld
- 重置 root 密碼:
mysql -u root -p Enter password: **** <- 輸入臨時 root 密碼 mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
- 將導(dǎo)出的 SQL 導(dǎo)入新服務(wù)器:注意:如果啟用了 GTID (
mysql -u root -p --force < data-for-upgrade.sql
gtid_mode=ON) 且轉(zhuǎn)儲文件包含系統(tǒng)表,不建議加載轉(zhuǎn)儲文件。mysqldump為非事務(wù)性的 MyISAM 系統(tǒng)表發(fā)出 DML 指令,這在啟用 GTID 時是不允許的。另外,將啟用 GTID 的服務(wù)器轉(zhuǎn)儲加載到另一個啟用 GTID 的服務(wù)器會生成不同的事務(wù) ID。 - 執(zhí)行剩余升級操作:
- 關(guān)閉服務(wù)器,然后使用
--upgrade=FORCE選項重啟以執(zhí)行剩余的升級任務(wù):
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE & # 或者對于 systemd 系統(tǒng) (需在配置文件中設(shè)置 upgrade=FORCE 或命令行傳遞) sudo systemctl stop mysqld sudo mysqld --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
- 使用
--upgrade=FORCE重啟會強制進行步驟 2 的升級任務(wù)(升級系統(tǒng)表、sys模式、檢查用戶模式中的所有對象)。 - 注意:此過程不會升級時區(qū)表。
- 關(guān)閉服務(wù)器,然后使用
3. MySQL 集群升級 (MySQL Cluster Upgrade)
MySQL 集群升級遵循常規(guī)滾動升級方案 (MGM 節(jié)點 -> 數(shù)據(jù)節(jié)點 -> API 節(jié)點/MySQL 服務(wù)器)。升級每個 mysqld 有兩個步驟:
- 導(dǎo)入數(shù)據(jù)字典:使用
--upgrade=MINIMAL選項啟動新的mysqld以升級數(shù)據(jù)字典但不升級系統(tǒng)表。服務(wù)器必須能連接到 NDB 集群才能完成此階段。 - 升級系統(tǒng)表:不使用
--upgrade=MINIMAL選項重啟每個mysqld。
八、使用 MySQL Yum 倉庫升級 (3.8)
適用于支持的 Yum-based 平臺 (參見第 2.5.1 節(jié))。
- 選擇目標系列:
- 默認情況下,MySQL Yum 倉庫會將 MySQL 更新到您安裝時選擇的發(fā)布軌道中的最新版本(例如,8.0.x 安裝不會自動更新到 8.4.x)。
- 要更新到另一個發(fā)布系列,必須首先禁用當前選定的子倉庫,并為目標系列啟用子倉庫。編輯
/etc/yum.repos.d/mysql-community.repo文件中的子倉庫條目。 - 一般規(guī)則:從一個 Bugfix 系列升級到另一個時,應(yīng)升級到下一個 Bugfix 系列,而不是跳過一個。例如,從 MySQL 5.7 升級到 8.4,應(yīng)先升級到 MySQL 8.0,再升級到 8.4。
- MySQL Yum 倉庫不支持原地降級。降級請參見第 4 章。
- 升級 MySQL:注意:MySQL 服務(wù)器在通過 Yum 更新后總是會重啟。
sudo yum update mysql-server # 非 dnf 系統(tǒng) sudo dnf upgrade mysql-server # dnf 系統(tǒng) # 或者更新整個系統(tǒng) sudo yum update # 非 dnf 系統(tǒng) sudo dnf upgrade # dnf 系統(tǒng) # 升級特定組件 (先列出:`sudo yum list installed | grep "^mysql"`) sudo yum update package-name # 非 dnf 系統(tǒng) sudo dnf upgrade package-name # dnf 系統(tǒng)
- 升級共享客戶端庫:
- 使用舊的共享客戶端庫編譯的應(yīng)用程序在更新后應(yīng)繼續(xù)工作。
- 如果重新編譯應(yīng)用程序并動態(tài)鏈接到更新后的庫,則需要在部署這些應(yīng)用程序的系統(tǒng)上也部署 MySQL 提供的新共享庫包。為此,請在這些系統(tǒng)上添加 MySQL Yum 倉庫并安裝最新的共享庫。
九、使用 MySQL APT 倉庫升級 (3.9)
在 Debian 和 Ubuntu 平臺上,使用 MySQL APT 倉庫執(zhí)行原地升級。具體步驟參見 使用 MySQL APT 倉庫升級 MySQL。
十、使用 MySQL SLES 倉庫升級 (3.10)
在 SUSE Linux Enterprise Server (SLES) 平臺上,使用 MySQL SLES 倉庫執(zhí)行原地升級。具體步驟參見 使用 MySQL SLES 倉庫升級 MySQL。
十一、在 Windows 上升級 (3.11)
升級方法取決于現(xiàn)有安裝方式:
1. 使用 MSI 安裝程序升級
- 下載并執(zhí)行最新的 MySQL Server MSI。
- 雖然不支持直接跨系列升級,但“自定義安裝”選項允許指定安裝位置(否則默認安裝到
C:\Program Files\MySQL\MySQL Server 8.4\)。 - 運行捆綁的 MySQL 配置器 (MySQL Configurator) 來配置新安裝。
參考鏈接:https://dev.mysql.com/doc/refman/8.4/en/upgrading.html
到此這篇關(guān)于MySQL 升級到8.4版本的完整流程及操作方法的文章就介紹到這了,更多相關(guān)mysql8.4版本升級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL之information_schema數(shù)據(jù)庫詳細講解
這篇文章主要介紹了MySQL之information_schema數(shù)據(jù)庫詳細講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
MySQL登錄時出現(xiàn) Access denied for user ‘
今天打開mysql的時候突然提示:Access denied for user 'root'@'localhost' (using password: YES) 在網(wǎng)上搜索了很多文章,本文就來做一下總結(jié),介紹了幾種場景的解決方法,感興趣的可以了解一下2024-03-03
MySQL如何查詢數(shù)據(jù)庫中所有表名及注釋等信息
這篇文章主要介紹了MySQL如何查詢數(shù)據(jù)庫中所有表名及注釋等信息問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

