本指南詳細介紹了將 MySQL 升級到 8.4 版本的完整流程、注意事項和操作方法。
一、升級前準備 (3.1 Before You Begin)
在開始升級之前,必須仔細審閱本節信息并執行所有推薦的操作:
-
理解升級過程:了解升級期間可能發生的情況。請參閱第 3.4 節“MySQL 升級過程升級的內容”。
-
備份數據:創建完整的數據庫備份以保護您的數據。此備份必須包含
mysql
系統數據庫,該數據庫存儲了 MySQL 數據字典表和其他系統表。重要提示:
- 不支持從 MySQL 8.4 降級到 MySQL 8.3,或從一個 MySQL 8.4 版本降級到更早的 MySQL 8.4 版本。
- 唯一支持的降級替代方案是恢復升級前創建的備份。
- 因此,在啟動升級過程之前備份數據是絕對必要的。
-
檢查升級路徑:審閱第 3.2 節“升級路徑”,確保您計劃的升級路徑是受支持的。
-
審閱變更:審閱第 3.5 節“MySQL 8.4 中的變更”,了解升級前需要注意的變更。某些變更可能需要您采取行動。
-
審閱廢棄和移除功能:審閱第 1.4 節“自 MySQL 8.0 以來 MySQL 8.4 的新變化”中關于廢棄和移除功能的信息。如果您使用了這些功能中的任何一項,升級可能需要相應更改。
-
審閱配置變量變更:審閱第 1.5 節“自 8.0 以來 MySQL 8.4 中新增、廢棄或移除的服務器和狀態變量及選項”。如果您使用了廢棄或已移除的變量,升級可能需要更改配置。
-
查閱發行說明:查閱 MySQL 8.4 的發行說明,了解修復、變更和新功能信息。
-
復制環境:如果使用了復制,審閱第 19.5.3 節“升級或降級復制拓撲”。
-
遵循最佳實踐:審閱第 3.3 節“升級最佳實踐”并相應地進行規劃。
二、升級路徑 (3.2 Upgrade Paths)
注意:
- 在嘗試降級之前,請確保了解 MySQL 長期支持 (LTS) 和創新版本的發布模型。
- 建議在執行升級之前,使用 MySQL Shell 的升級檢查器工具 (
util.checkForServerUpgrade()
) 檢查升級兼容性。 - 復制拓撲的升級遵循第 19.5.3 節“升級或降級復制拓撲”中描述的滾動升級方案,該方案使用支持的單一服務器升級方法之一來升級每個單獨的服務器。
- 月度快速更新 (MRU) 和熱修復在此文檔中也視為發布。
表:MySQL 服務器的升級路徑
升級路徑 | 路徑示例 | 支持的升級方法 |
---|---|---|
在同一個 LTS 或 Bugfix 系列內 | 8.0.37 到 8.0.41 或 8.4.0 到 8.4.4 | 原地升級、邏輯導出導入、復制、MySQL 克隆 |
從 LTS/Bugfix 系列到下一個 LTS 系列 | 8.0.37 到 8.4.x LTS | 原地升級、邏輯導出導入、復制 |
從 LTS/Bugfix 到下一個 LTS 系列之前的創新版 | 8.0.34 到 8.3.0 或 8.4.0 到 9.0.0 | 原地升級、邏輯導出導入、復制 |
從創新系列到下一個 LTS 系列 | 8.3.0 到 8.4 LTS | 原地升級、邏輯導出導入、復制 |
從創新系列到下一個 LTS 系列之后的創新版 | 不允許 | 需要兩步:8.3.0 到 8.4 LTS,然后 8.4 LTS 到 9.x 創新版 |
在同一個創新系列內 | 8.1.0 到 8.3.0 | 原地升級、邏輯導出導入、復制 |
從 MySQL 5.7 到 LTS 或創新版 | 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 系列內)升級和跨主版本(跨 LTS 系列)升級。升級可提供最新的功能、性能和安全性修復。
為確保成功升級到最新的 MySQL 8.4 版本,我們推薦以下最佳實踐:
- 決定升級的主版本或次版本:
- 了解 MySQL 發布模型中 LTS(長期支持)和創新版本的區別。LTS 版本提供 8 年以上的支持,適用于生產環境。創新版本為用戶提供最新的功能和能力。
- 次要版本升級通常較簡單,而主版本升級需要戰略規劃和額外的升級前測試。本指南對主版本升級尤其有用。
- 決定升級類型:
- 原地升級 (In-place):替換 MySQL 服務器軟件包。
- 邏輯升級 (Logical):將 SQL 從舊的 MySQL 實例導出并導入到新的實例。
- 復制拓撲升級 (Replication):考慮每個服務器在拓撲中的角色。
- 審查支持的平臺:
- 如果您的當前操作系統不被新版本的 MySQL 支持,則計劃升級操作系統,否則不支持原地升級。
- 查看當前支持的平臺列表:https://www.mysql.com/support/supportedplatforms/database.html
- 了解 MySQL 服務器變更:
- 每個主版本都會帶來新功能、行為變更、廢棄項和移除項。了解這些變更對現有應用的影響至關重要。
- 參閱:第 3.5 節 “MySQL 8.4 中的變更”。
- 運行升級檢查器并修復不兼容問題:
- 使用 MySQL Shell 的升級檢查器工具 (
util.checkForServerUpgrade()
) 檢測數據庫版本之間必須解決的升級前不兼容問題。 - 連接到現有的 MySQL 服務器,并選擇計劃升級到的目標 MySQL 服務器版本。該工具將報告升級前需要解決的問題(例如數據類型、存儲引擎等的不兼容性)。
- 當升級檢查器不再報告任何問題時,您已準備好升級。
- 使用 MySQL Shell 的升級檢查器工具 (
- 在測試環境中運行應用程序:
- 完成升級檢查器的要求后,下一步在目標 MySQL 服務器上測試您的應用程序。
- 檢查 MySQL 錯誤日志和應用程序日志中的錯誤和警告。
- 對應用程序和工作負載進行基準測試:
- 建議通過比較應用程序和工作負載在 MySQL 新舊版本上的性能表現來進行基準測試。通常,較新的 MySQL 版本會增加功能并提高性能,但在某些情況下,特定查詢在升級后可能會變慢。
- 可能導致性能下降的原因包括:
- 先前的服務器配置對新版本不是最優的
- 數據類型變更
- 多字節字符集支持需要更多存儲空間
- 存儲引擎變更
- 索引被刪除或更改
- 更強的加密
- 更強的認證
- SQL 優化器變更
- 新版本的 MySQL 需要更多內存
- 物理或虛擬硬件變慢(計算或存儲)
- 有關信息及可能的緩解技術,請參閱 驗證性能下降。
- 并行運行新舊 MySQL 版本:
- 為最小化風險,最好在運行升級系統的同時保持當前系統運行(并行運行)。
- 進行最終的測試升級:
- 在升級生產系統之前,進行練習和全面測試升級流程。
- 檢查 MySQL 備份:
- 在執行升級之前,確認存在完整的備份并且可用。
- 升級生產服務器:
- 完成上述步驟后,即可進行生產環境升級。
- 企業支持:
- 如果您是 MySQL 企業版客戶,還可以聯系 MySQL 支持團隊專家咨詢任何問題。
四、MySQL 升級過程升級的內容 (3.4 What the MySQL Upgrade Process Upgrades)
安裝新版本的 MySQL 可能需要升級現有安裝的以下部分:
mysql
系統模式:包含存儲 MySQL 服務器運行時所需信息的表(參見第 7.3 節 “mysql
系統模式”)。mysql
模式表分為兩大類:- 數據字典表:存儲數據庫對象元數據。
- 系統表(即剩余的非數據字典表):用于其他操作目的。
- 其他模式:包括一些內置的、可視為服務器“擁有”的模式,以及其他用戶模式:
performance_schema
、INFORMATION_SCHEMA
、ndbinfo
和sys
模式。- 用戶模式。
有兩個不同的版本號與可能需要升級的部分相關聯:
- 數據字典版本:適用于數據字典表。
- 服務器版本(又稱 MySQL 版本):適用于系統表和其他模式中的對象。
升級過程發生在兩個步驟:
- 步驟 1:數據字典升級:
- 升級
mysql
模式中的數據字典表、Performance Schema、INFORMATION_SCHEMA
和ndbinfo
。 - 由服務器在啟動時自動執行(除非使用
--upgrade=NONE
選項禁止)。 - 如果數據字典過期但被禁止升級,服務器將無法啟動并報錯退出。
- 使用
--upgrade
服務器選項控制自動升級行為:--upgrade=AUTO
(或無選項):升級所有過期的內容(步驟 1 和 2)。--upgrade=NONE
:不升級任何內容,但如果數據字典必須升級則退出報錯。--upgrade=MINIMAL
:僅升級數據字典、Performance Schema 和INFORMATION_SCHEMA
(步驟 1)。注意:此選項后無法啟動組復制,且其他功能可能受限。--upgrade=FORCE
:升級步驟 1 的內容,并強制升級其他所有內容(步驟 2)。啟動時間可能較長。
- 升級
- 步驟 2:服務器升級:
- 升級
mysql
模式中的系統表(剩余的非數據字典表)、sys
模式和用戶模式。 - 安裝或升級
sys
模式(如果存在同名用戶模式會報錯)。 - 將系統表升級到當前結構(包括幫助表,不包括時區表)。
- 更改
mysql.db
,mysql.tables_priv
,mysql.columns_priv
,mysql.procs_priv
表主鍵列順序以提升性能(對擁有大量用戶和權限的系統可能耗時)。 - 使用
CHECK TABLE ... FOR UPGRADE
檢查并處理所有用戶模式中的所有表(可能耗時且鎖表)。 - 將所有檢查和修復過的表標記為當前的 MySQL 版本號。
- 注意:升級過程不會升級時區表的內容。升級時區表需手動操作,參見第 7.1.15 節 “MySQL 服務器時區支持”。
- 升級
五、MySQL 8.4 中的變更 (3.5 Changes in MySQL 8.4)
在升級到 MySQL 8.4 之前,請審閱以下部分描述的變更,以識別適用于您當前 MySQL 安裝和應用程序的變更:
-
MySQL 8.4 中的不兼容變更:
- 空間索引:升級到 MySQL 8.4.4 或更高版本時,建議在升級前刪除所有空間索引,升級完成后再重新創建它們。或者,您也可以在升級后立即(但在使用包含這些索引的表之前)刪除并重新創建此類索引。更多信息參見第 13.4.10 節 “創建空間索引”。
- 移除
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
函數:MySQL 8.0 中已廢棄的WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
SQL 函數在 8.4 中已移除;嘗試調用它現在會導致語法錯誤。請改用WAIT_FOR_EXECUTED_GTID_SET()
。 authentication_fido
和authentication_fido_client
在某些平臺上不再可用:由于服務器捆綁的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 上不再可用。- 命令行選項禁止設置為
NULL
:在命令行上將服務器變量設置為 SQLNULL
是不支持的。在 MySQL 8.4 中,明確禁止將任何此類變量設置為NULL
,嘗試這樣做將被拒絕并報錯。特定變量(如basedir
,datadir
,plugin_dir
等)除外。參見第 7.1.8 節 “服務器系統變量”。 - 更多變更信息請參閱第 1.4 節 “自 MySQL 8.0 以來 MySQL 8.4 的新變化”。
-
變更的服務器默認值:
- 下表列出了 MySQL 8.4 與 MySQL 8.0 相比,系統變量默認值發生變化的項目。雖然新默認值適用于大多數用例,但在特定場景或需要兼容舊配置時可能需要調整。
分類 系統變量 舊默認值 新默認值 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; 否則: 8innodb_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; 否則: 4innodb_use_fdatasync
OFF ON 組復制變更 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) 總內存的 3% (范圍 1-4 GB) temptable_use_mmap
ON OFF - 有關 MySQL 8.4 中新增的選項或變量,請參閱 MySQL 服務器版本參考中的“MySQL 8.4 的選項和變量變更”。
- 性能模式
variables_info
表顯示了每個系統變量的設置來源及其取值范圍。
六、準備安裝進行升級 (3.6 Preparing Your Installation for Upgrade)
在升級到最新的 MySQL 8.4 版本之前,通過執行以下初步檢查,確保您當前的 MySQL 8.3 或 MySQL 8.4 服務器實例已做好升級準備:
提示: 考慮使用 MySQL Shell 升級檢查器工具 (util.checkForServerUpgrade()
) 來驗證 MySQL 服務器實例是否已準備好升級。您可以指定計劃升級到的目標 MySQL 服務器版本(從 MySQL Server 8.0.11 到與當前 MySQL Shell 版本號匹配的 MySQL Server 版本號)。該工具執行與指定目標版本相關的自動檢查,并建議您應手動進行的其他相關檢查。升級檢查器適用于 MySQL 的所有 Bugfix、Innovation 和 LTS 版本。MySQL Shell 安裝說明請參閱 此處。
初步檢查(必須不存在以下問題):
- 運行升級兼容性檢查:
如果mysqlcheck -u root -p --all-databases --check-upgrade
mysqlcheck
報告任何錯誤,請糾正這些問題。具體包括:- 沒有使用廢棄數據類型或函數的表。
- 沒有孤立的
.frm
文件。 - 觸發器沒有缺失或空的定義者 (
DEFINER
) 或無效的創建上下文(由SHOW TRIGGERS
或INFORMATION_SCHEMA.TRIGGERS
表中的character_set_client
,collation_connection
,Database Collation
屬性指示)。任何此類觸發器必須導出并重新導入以修復問題。
- 檢查不支持分區的存儲引擎:
查詢報告的任何表必須更改為使用 InnoDB 或使其變為非分區表:SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE ENGINE NOT IN ('innodb', 'ndbcluster')AND CREATE_OPTIONS LIKE '%partitioned%';
- 更改存儲引擎:
ALTER TABLE table_name ENGINE = INNODB;
(參見第 17.6.1.5 節 “將表從 MyISAM 轉換到 InnoDB”)。 - 移除分區:
ALTER TABLE table_name REMOVE PARTITIONING;
- 更改存儲引擎:
- 檢查保留關鍵字沖突:MySQL 8.4 中的一些新保留關鍵字可能使之前用作標識符的詞變得非法。修復方法是使用反引號
`
引用標識符。參見第 11.2 節 “模式對象名稱” 和第 11.3 節 “關鍵字和保留詞”。 - 檢查與數據字典表沖突的用戶表:
查詢報告的任何表必須刪除或重命名 (SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERELOWER(TABLE_SCHEMA) = 'mysql'ANDLOWER(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
)。這也可能需要更改使用這些受影響表的應用程序。 - 檢查過長的外鍵約束名 (超過 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_FOREIGNWHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
ALTER TABLE ... DROP FOREIGN KEY ..., ADD CONSTRAINT ... FOREIGN KEY ...
)。 - 檢查 SQL 模式:
sql_mode
系統變量中不能定義已廢棄的 SQL 模式。嘗試使用已廢棄的 SQL 模式會阻止 MySQL 8.4 啟動。應修改使用已廢棄 SQL 模式的應用程序以避免它們。參見服務器變更中移除的 SQL 模式。 - 確保正常關機:僅升級已正確關閉的 MySQL 服務器實例。如果實例意外關閉,請重啟該實例并使用
innodb_fast_shutdown=0
關閉它后再進行升級。 - 檢查視圖列名長度:不能有顯式定義列名超過 64 字符的視圖(MySQL 5.7 允許最多 255 字符)。為避免升級錯誤,應在升級前修改此類視圖。識別方法:使用
SHOW CREATE VIEW
或查詢INFORMATION_SCHEMA.VIEWS
表檢查視圖定義。 - 檢查 ENUM/SET 元素長度:不能有單個
ENUM
或SET
列元素超過 255 字符或 1020 字節長度的表或存儲過程。在 MySQL 8.4 之前,ENUM
或SET
列元素的最大組合長度為 64K。在 MySQL 8.4 中,單個ENUM
或SET
列元素的最大字符長度為 255,最大字節長度為 1020(支持多字節字符集)。在升級到 MySQL 8.4 之前,修改任何超出新限制的ENUM
或SET
列元素。否則會導致升級失敗。 - 移除廢棄功能:您的 MySQL 8.3 安裝不能使用 MySQL 8.4 不支持的功能。例如:
- 審閱 MySQL 8.4 中移除的功能和已移除的服務器啟動選項及系統變量(參見第 1.5 節)。如果使用了其中任何一項,升級需要更改配置。
lower_case_table_names
變更注意事項:- 如果您打算在升級時將
lower_case_table_names
設置更改為1
,請確保在升級前模式和表名都是小寫的。否則,由于模式或表名字母大小寫不匹配,可能會導致失敗。 - 使用以下查詢檢查包含大寫字符的模式和表名:
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
設置。如果lower_case_table_names=1
,升級過程會檢查表和模式名是否全為小寫字符。如果發現包含大寫字符的表或模式名,升級過程將因錯誤而失敗。
- 如果您打算在升級時將
升級失敗處理:
如果升級到 MySQL 8.4 因上述任何問題失敗,服務器將回滾對數據目錄的所有更改。在這種情況下,應刪除所有重做日志文件 (ib_logfile*
),在現有數據目錄上重新啟動 MySQL 8.3 服務器以解決錯誤。修復錯誤后,執行慢速關閉 (innodb_fast_shutdown=0
),然后再次嘗試升級。
七、Unix/Linux 上基于二進制或軟件包的安裝升級 (3.7)
升級方法取決于平臺和初始安裝方式:
1. 原地升級 (In-Place Upgrade)
原地升級涉及關閉舊服務器,用新的二進制文件或軟件包替換舊的,然后在現有數據目錄上重啟新服務器。
步驟:
- 審閱第 3.1 節信息。
- 按照第 3.6 節完成安裝準備檢查。
- XA 事務:如果使用 InnoDB 的 XA 事務,升級前運行
XA RECOVER
檢查未提交的 XA 事務。如果有結果,使用XA COMMIT
或XA ROLLBACK
提交或回滾這些事務。 - 關機設置:如果通常配置
innodb_fast_shutdown=2
(冷關機),請配置為執行快速或慢速關機:SET GLOBAL innodb_fast_shutdown = 1; -- 快速關機 SET GLOBAL innodb_fast_shutdown = 0; -- 慢速關機 (推薦用于跨版本升級)
- 關閉舊服務器:
mysqladmin -u root -p shutdown
- 升級 MySQL 二進制文件或軟件包:
- 二進制安裝:解壓新的 MySQL 二進制分發包 (參見 獲取并解壓分發版)。
- 軟件包安裝:安裝新軟件包 (注意:如果最初安裝了多個 RPM 包,需升級所有包,而不僅僅是服務器包)。對于 Yum/APT/SLES 倉庫安裝,請使用相應的包管理器命令 (如
sudo yum update mysql-server
,sudo apt-get install mysql-server
)。 - 注意:對于使用 systemd 的平臺 (RPM/Debian 包安裝),使用
systemctl
管理服務 (systemctl stop mysqld
,systemctl start mysqld
),而不是mysqld_safe
。
- 啟動 MySQL 8.4 服務器 (使用現有數據目錄):
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir & # 或者對于 systemd 系統 sudo systemctl start mysqld
- 如果有加密的 InnoDB 表空間,使用
--early-plugin-load
選項加載密鑰環插件。
- 如果有加密的 InnoDB 表空間,使用
- 自動升級:
- 服務器啟動時自動檢測數據字典表是否存在。如果不存在,則在數據目錄中創建它們,用元數據填充,然后繼續正常啟動序列。
- 此過程升級所有數據庫對象的元數據(數據庫、表空間、系統和用戶表、視圖、存儲程序)并移除以前用于元數據存儲的文件(如
.frm
文件)。 - 失敗處理:如果此步驟失敗,服務器回滾更改。需刪除重做日志文件,重啟舊版服務器修復錯誤,慢速關機后重試升級。
- 此步驟還根據需要升級
mysql
系統數據庫,更新 Performance Schema、INFORMATION_SCHEMA
、sys
數據庫,并檢查所有用戶數據庫與當前 MySQL 版本的兼容性。 - 注意:此過程不會升級時區表。升級時區表需手動操作,參見第 7.1.15 節。
2. 邏輯升級 (Logical Upgrade)
邏輯升級涉及使用 mysqldump
等工具從舊實例導出 SQL,安裝新服務器,然后將 SQL 導入到新實例。
步驟:
- 審閱第 3.1 節信息。
- 從舊安裝導出數據:
重要提示: 如果表包含生成列,請使用 MySQL 5.7.9 或更高版本附帶的mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
mysqldump
。可以使用INFORMATION_SCHEMA.COLUMNS
表識別帶有生成列的表。 - 關閉舊服務器:
mysqladmin -u root -p shutdown
- 安裝 MySQL 8.4:參見第 2 章 “安裝 MySQL”。
- 初始化新數據目錄:
記下屏幕上顯示或寫入錯誤日志的臨時 ‘root’@‘localhost’ 密碼。mysqld --initialize --datadir=/path/to/8.4-datadir
- 啟動 MySQL 8.4 服務器 (使用新數據目錄):
mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir & # 或者對于 systemd 系統 sudo systemctl start mysqld
- 重置 root 密碼:
mysql -u root -p Enter password: **** <- 輸入臨時 root 密碼 mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
- 將導出的 SQL 導入新服務器:
注意:如果啟用了 GTID (mysql -u root -p --force < data-for-upgrade.sql
gtid_mode=ON
) 且轉儲文件包含系統表,不建議加載轉儲文件。mysqldump
為非事務性的 MyISAM 系統表發出 DML 指令,這在啟用 GTID 時是不允許的。另外,將啟用 GTID 的服務器轉儲加載到另一個啟用 GTID 的服務器會生成不同的事務 ID。 - 執行剩余升級操作:
- 關閉服務器,然后使用
--upgrade=FORCE
選項重啟以執行剩余的升級任務:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE & # 或者對于 systemd 系統 (需在配置文件中設置 upgrade=FORCE 或命令行傳遞) sudo systemctl stop mysqld sudo mysqld --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
- 使用
--upgrade=FORCE
重啟會強制進行步驟 2 的升級任務(升級系統表、sys
模式、檢查用戶模式中的所有對象)。 - 注意:此過程不會升級時區表。
- 關閉服務器,然后使用
3. MySQL 集群升級 (MySQL Cluster Upgrade)
MySQL 集群升級遵循常規滾動升級方案 (MGM 節點 -> 數據節點 -> API 節點/MySQL 服務器)。升級每個 mysqld
有兩個步驟:
- 導入數據字典:使用
--upgrade=MINIMAL
選項啟動新的mysqld
以升級數據字典但不升級系統表。服務器必須能連接到 NDB 集群才能完成此階段。 - 升級系統表:不使用
--upgrade=MINIMAL
選項重啟每個mysqld
。
八、使用 MySQL Yum 倉庫升級 (3.8)
適用于支持的 Yum-based 平臺 (參見第 2.5.1 節)。
- 選擇目標系列:
- 默認情況下,MySQL Yum 倉庫會將 MySQL 更新到您安裝時選擇的發布軌道中的最新版本(例如,8.0.x 安裝不會自動更新到 8.4.x)。
- 要更新到另一個發布系列,必須首先禁用當前選定的子倉庫,并為目標系列啟用子倉庫。編輯
/etc/yum.repos.d/mysql-community.repo
文件中的子倉庫條目。 - 一般規則:從一個 Bugfix 系列升級到另一個時,應升級到下一個 Bugfix 系列,而不是跳過一個。例如,從 MySQL 5.7 升級到 8.4,應先升級到 MySQL 8.0,再升級到 8.4。
- MySQL Yum 倉庫不支持原地降級。降級請參見第 4 章。
- 升級 MySQL:
注意:MySQL 服務器在通過 Yum 更新后總是會重啟。sudo yum update mysql-server # 非 dnf 系統 sudo dnf upgrade mysql-server # dnf 系統 # 或者更新整個系統 sudo yum update # 非 dnf 系統 sudo dnf upgrade # dnf 系統 # 升級特定組件 (先列出:`sudo yum list installed | grep "^mysql"`) sudo yum update package-name # 非 dnf 系統 sudo dnf upgrade package-name # dnf 系統
- 升級共享客戶端庫:
- 使用舊的共享客戶端庫編譯的應用程序在更新后應繼續工作。
- 如果重新編譯應用程序并動態鏈接到更新后的庫,則需要在部署這些應用程序的系統上也部署 MySQL 提供的新共享庫包。為此,請在這些系統上添加 MySQL Yum 倉庫并安裝最新的共享庫。
九、使用 MySQL APT 倉庫升級 (3.9)
在 Debian 和 Ubuntu 平臺上,使用 MySQL APT 倉庫執行原地升級。具體步驟參見 使用 MySQL APT 倉庫升級 MySQL。
十、使用 MySQL SLES 倉庫升級 (3.10)
在 SUSE Linux Enterprise Server (SLES) 平臺上,使用 MySQL SLES 倉庫執行原地升級。具體步驟參見 使用 MySQL SLES 倉庫升級 MySQL。
十一、在 Windows 上升級 (3.11)
升級方法取決于現有安裝方式:
1. 使用 MSI 安裝程序升級
- 下載并執行最新的 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