MySQL 升級到8.4版本的詳細指南

本指南詳細介紹了將 MySQL 升級到 8.4 版本的完整流程、注意事項和操作方法。

一、升級前準備 (3.1 Before You Begin)

在開始升級之前,必須仔細審閱本節信息并執行所有推薦的操作:

  1. 理解升級過程:了解升級期間可能發生的情況。請參閱第 3.4 節“MySQL 升級過程升級的內容”。

  2. 備份數據:創建完整的數據庫備份以保護您的數據。此備份必須包含 mysql 系統數據庫,該數據庫存儲了 MySQL 數據字典表和其他系統表。

    重要提示:

    • 不支持從 MySQL 8.4 降級到 MySQL 8.3,或從一個 MySQL 8.4 版本降級到更早的 MySQL 8.4 版本。
    • 唯一支持的降級替代方案是恢復升級前創建的備份
    • 因此,在啟動升級過程之前備份數據是絕對必要的
  3. 檢查升級路徑:審閱第 3.2 節“升級路徑”,確保您計劃的升級路徑是受支持的。

  4. 審閱變更:審閱第 3.5 節“MySQL 8.4 中的變更”,了解升級前需要注意的變更。某些變更可能需要您采取行動。

  5. 審閱廢棄和移除功能:審閱第 1.4 節“自 MySQL 8.0 以來 MySQL 8.4 的新變化”中關于廢棄和移除功能的信息。如果您使用了這些功能中的任何一項,升級可能需要相應更改。

  6. 審閱配置變量變更:審閱第 1.5 節“自 8.0 以來 MySQL 8.4 中新增、廢棄或移除的服務器和狀態變量及選項”。如果您使用了廢棄或已移除的變量,升級可能需要更改配置。

  7. 查閱發行說明:查閱 MySQL 8.4 的發行說明,了解修復、變更和新功能信息。

  8. 復制環境:如果使用了復制,審閱第 19.5.3 節“升級或降級復制拓撲”。

  9. 遵循最佳實踐:審閱第 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 版本,我們推薦以下最佳實踐:

  1. 決定升級的主版本或次版本
    • 了解 MySQL 發布模型中 LTS(長期支持)和創新版本的區別。LTS 版本提供 8 年以上的支持,適用于生產環境。創新版本為用戶提供最新的功能和能力。
    • 次要版本升級通常較簡單,而主版本升級需要戰略規劃和額外的升級前測試。本指南對主版本升級尤其有用。
  2. 決定升級類型
    • 原地升級 (In-place):替換 MySQL 服務器軟件包。
    • 邏輯升級 (Logical):將 SQL 從舊的 MySQL 實例導出并導入到新的實例。
    • 復制拓撲升級 (Replication):考慮每個服務器在拓撲中的角色。
  3. 審查支持的平臺
    • 如果您的當前操作系統不被新版本的 MySQL 支持,則計劃升級操作系統,否則不支持原地升級。
    • 查看當前支持的平臺列表:https://www.mysql.com/support/supportedplatforms/database.html
  4. 了解 MySQL 服務器變更
    • 每個主版本都會帶來新功能、行為變更、廢棄項和移除項。了解這些變更對現有應用的影響至關重要。
    • 參閱:第 3.5 節 “MySQL 8.4 中的變更”。
  5. 運行升級檢查器并修復不兼容問題
    • 使用 MySQL Shell 的升級檢查器工具 (util.checkForServerUpgrade()) 檢測數據庫版本之間必須解決的升級前不兼容問題。
    • 連接到現有的 MySQL 服務器,并選擇計劃升級到的目標 MySQL 服務器版本。該工具將報告升級前需要解決的問題(例如數據類型、存儲引擎等的不兼容性)。
    • 當升級檢查器不再報告任何問題時,您已準備好升級。
  6. 在測試環境中運行應用程序
    • 完成升級檢查器的要求后,下一步在目標 MySQL 服務器上測試您的應用程序。
    • 檢查 MySQL 錯誤日志和應用程序日志中的錯誤和警告。
  7. 對應用程序和工作負載進行基準測試
    • 建議通過比較應用程序和工作負載在 MySQL 新舊版本上的性能表現來進行基準測試。通常,較新的 MySQL 版本會增加功能并提高性能,但在某些情況下,特定查詢在升級后可能會變慢。
    • 可能導致性能下降的原因包括:
      • 先前的服務器配置對新版本不是最優的
      • 數據類型變更
      • 多字節字符集支持需要更多存儲空間
      • 存儲引擎變更
      • 索引被刪除或更改
      • 更強的加密
      • 更強的認證
      • SQL 優化器變更
      • 新版本的 MySQL 需要更多內存
      • 物理或虛擬硬件變慢(計算或存儲)
    • 有關信息及可能的緩解技術,請參閱 驗證性能下降。
  8. 并行運行新舊 MySQL 版本
    • 為最小化風險,最好在運行升級系統的同時保持當前系統運行(并行運行)。
  9. 進行最終的測試升級
    • 在升級生產系統之前,進行練習和全面測試升級流程。
  10. 檢查 MySQL 備份
    • 在執行升級之前,確認存在完整的備份并且可用。
  11. 升級生產服務器
    • 完成上述步驟后,即可進行生產環境升級。
  12. 企業支持
    • 如果您是 MySQL 企業版客戶,還可以聯系 MySQL 支持團隊專家咨詢任何問題。

四、MySQL 升級過程升級的內容 (3.4 What the MySQL Upgrade Process Upgrades)

安裝新版本的 MySQL 可能需要升級現有安裝的以下部分:

  1. mysql 系統模式:包含存儲 MySQL 服務器運行時所需信息的表(參見第 7.3 節 “mysql 系統模式”)。mysql 模式表分為兩大類:
    • 數據字典表:存儲數據庫對象元數據。
    • 系統表(即剩余的非數據字典表):用于其他操作目的。
  2. 其他模式:包括一些內置的、可視為服務器“擁有”的模式,以及其他用戶模式:
    • performance_schemaINFORMATION_SCHEMAndbinfosys 模式。
    • 用戶模式。

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

  • 數據字典版本:適用于數據字典表。
  • 服務器版本(又稱 MySQL 版本):適用于系統表和其他模式中的對象。

升級過程發生在兩個步驟:

  1. 步驟 1:數據字典升級
    • 升級 mysql 模式中的數據字典表、Performance Schema、INFORMATION_SCHEMAndbinfo
    • 由服務器在啟動時自動執行(除非使用 --upgrade=NONE 選項禁止)。
    • 如果數據字典過期但被禁止升級,服務器將無法啟動并報錯退出。
    • 使用 --upgrade 服務器選項控制自動升級行為:
      • --upgrade=AUTO (或無選項):升級所有過期的內容(步驟 1 和 2)。
      • --upgrade=NONE:不升級任何內容,但如果數據字典必須升級則退出報錯。
      • --upgrade=MINIMAL:僅升級數據字典、Performance Schema 和 INFORMATION_SCHEMA(步驟 1)。注意:此選項后無法啟動組復制,且其他功能可能受限。
      • --upgrade=FORCE:升級步驟 1 的內容,并強制升級其他所有內容(步驟 2)。啟動時間可能較長。
  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 安裝和應用程序的變更:

  1. 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_fidoauthentication_fido_client 在某些平臺上不再可用:由于服務器捆綁的 libfido2 庫升級到需要 OpenSSL 1.1.1 或更高版本的 1.13.0,authentication_fidoauthentication_fido_client 認證插件在 Enterprise Linux 6, Enterprise Linux 7, Solaris 11 或 SUSE Enterprise Linux 12 上不再可用。
    • 命令行選項禁止設置為 NULL:在命令行上將服務器變量設置為 SQL NULL 是不支持的。在 MySQL 8.4 中,明確禁止將任何此類變量設置為 NULL,嘗試這樣做將被拒絕并報錯。特定變量(如 basedir, datadir, plugin_dir 等)除外。參見第 7.1.8 節 “服務器系統變量”。
    • 更多變更信息請參閱第 1.4 節 “自 MySQL 8.0 以來 MySQL 8.4 的新變化”。
  2. 變更的服務器默認值

    • 下表列出了 MySQL 8.4 與 MySQL 8.0 相比,系統變量默認值發生變化的項目。雖然新默認值適用于大多數用例,但在特定場景或需要兼容舊配置時可能需要調整。
    分類系統變量舊默認值新默認值
    InnoDB 變更innodb_adaptive_hash_indexONOFF
    innodb_buffer_pool_in_core_fileONOFF
    innodb_buffer_pool_instancesinnodb_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_bufferingallnone
    innodb_doublewrite_filesinnodb_buffer_pool_instances * 22
    innodb_doublewrite_pagesinnodb_write_io_threads 的值128
    innodb_flush_methodfsync支持則 O_DIRECT,否則 fsync
    innodb_io_capacity20010000
    innodb_io_capacity_maxMIN(2 * innodb_io_capacity, 2000)2 * innodb_io_capacity
    innodb_log_buffer_size16777216 (16MB)67108864 (64MB)
    innodb_numa_interleaveOFFON
    innodb_page_cleaners4innodb_buffer_pool_instances 的值
    innodb_parallel_read_threads4MIN(number_of_cpus / 8, 4)
    innodb_purge_threads4如果 number_of_cpus <= 16: 1; 否則: 4
    innodb_use_fdatasyncOFFON
    組復制變更group_replication_consistencyEVENTUALBEFORE_ON_PRIMARY_FAILOVER
    group_replication_exit_state_actionREAD_ONLYOFFLINE_MODE
    臨時表變更temptable_max_mmap1073741824 (1GB)0
    temptable_max_ram1073741824 (1GB)總內存的 3% (范圍 1-4 GB)
    temptable_use_mmapONOFF
    • 有關 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 安裝說明請參閱 此處。

初步檢查(必須不存在以下問題):

  1. 運行升級兼容性檢查
    mysqlcheck -u root -p --all-databases --check-upgrade
    
    如果 mysqlcheck 報告任何錯誤,請糾正這些問題。具體包括:
    • 沒有使用廢棄數據類型或函數的表。
    • 沒有孤立的 .frm 文件。
    • 觸發器沒有缺失或空的定義者 (DEFINER) 或無效的創建上下文(由 SHOW TRIGGERSINFORMATION_SCHEMA.TRIGGERS 表中的 character_set_client, collation_connection, Database Collation 屬性指示)。任何此類觸發器必須導出并重新導入以修復問題。
  2. 檢查不支持分區的存儲引擎
    SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE ENGINE NOT IN ('innodb', 'ndbcluster')AND CREATE_OPTIONS LIKE '%partitioned%';
    
    查詢報告的任何表必須更改為使用 InnoDB 或使其變為非分區表:
    • 更改存儲引擎:ALTER TABLE table_name ENGINE = INNODB; (參見第 17.6.1.5 節 “將表從 MyISAM 轉換到 InnoDB”)。
    • 移除分區:ALTER TABLE table_name REMOVE PARTITIONING;
  3. 檢查保留關鍵字沖突:MySQL 8.4 中的一些新保留關鍵字可能使之前用作標識符的詞變得非法。修復方法是使用反引號 ` 引用標識符。參見第 11.2 節 “模式對象名稱” 和第 11.3 節 “關鍵字和保留詞”。
  4. 檢查與數據字典表沖突的用戶表
    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)。這也可能需要更改使用這些受影響表的應用程序。
  5. 檢查過長的外鍵約束名 (超過 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);
    
    對于約束名超過 64 字符的表,刪除該約束并使用不超過 64 字符的約束名重新添加 (ALTER TABLE ... DROP FOREIGN KEY ..., ADD CONSTRAINT ... FOREIGN KEY ...)。
  6. 檢查 SQL 模式sql_mode 系統變量中不能定義已廢棄的 SQL 模式。嘗試使用已廢棄的 SQL 模式會阻止 MySQL 8.4 啟動。應修改使用已廢棄 SQL 模式的應用程序以避免它們。參見服務器變更中移除的 SQL 模式。
  7. 確保正常關機:僅升級已正確關閉的 MySQL 服務器實例。如果實例意外關閉,請重啟該實例并使用 innodb_fast_shutdown=0 關閉它后再進行升級。
  8. 檢查視圖列名長度:不能有顯式定義列名超過 64 字符的視圖(MySQL 5.7 允許最多 255 字符)。為避免升級錯誤,應在升級前修改此類視圖。識別方法:使用 SHOW CREATE VIEW 或查詢 INFORMATION_SCHEMA.VIEWS 表檢查視圖定義。
  9. 檢查 ENUM/SET 元素長度:不能有單個 ENUMSET 列元素超過 255 字符或 1020 字節長度的表或存儲過程。在 MySQL 8.4 之前,ENUMSET 列元素的最大組合長度為 64K。在 MySQL 8.4 中,單個 ENUMSET 列元素的最大字符長度為 255,最大字節長度為 1020(支持多字節字符集)。在升級到 MySQL 8.4 之前,修改任何超出新限制的 ENUMSET 列元素。否則會導致升級失敗。
  10. 移除廢棄功能:您的 MySQL 8.3 安裝不能使用 MySQL 8.4 不支持的功能。例如:
    • 審閱 MySQL 8.4 中移除的功能和已移除的服務器啟動選項及系統變量(參見第 1.5 節)。如果使用了其中任何一項,升級需要更改配置。
  11. 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)

原地升級涉及關閉舊服務器,用新的二進制文件或軟件包替換舊的,然后在現有數據目錄上重啟新服務器。

步驟:

  1. 審閱第 3.1 節信息。
  2. 按照第 3.6 節完成安裝準備檢查。
  3. XA 事務:如果使用 InnoDB 的 XA 事務,升級前運行 XA RECOVER 檢查未提交的 XA 事務。如果有結果,使用 XA COMMITXA ROLLBACK 提交或回滾這些事務。
  4. 關機設置:如果通常配置 innodb_fast_shutdown=2 (冷關機),請配置為執行快速或慢速關機:
    SET GLOBAL innodb_fast_shutdown = 1; -- 快速關機
    SET GLOBAL innodb_fast_shutdown = 0; -- 慢速關機 (推薦用于跨版本升級)
    
  5. 關閉舊服務器
    mysqladmin -u root -p shutdown
    
  6. 升級 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
  7. 啟動 MySQL 8.4 服務器 (使用現有數據目錄):
    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
    # 或者對于 systemd 系統
    sudo systemctl start mysqld
    
    • 如果有加密的 InnoDB 表空間,使用 --early-plugin-load 選項加載密鑰環插件。
  8. 自動升級
    • 服務器啟動時自動檢測數據字典表是否存在。如果不存在,則在數據目錄中創建它們,用元數據填充,然后繼續正常啟動序列。
    • 此過程升級所有數據庫對象的元數據(數據庫、表空間、系統和用戶表、視圖、存儲程序)并移除以前用于元數據存儲的文件(如 .frm 文件)。
    • 失敗處理:如果此步驟失敗,服務器回滾更改。需刪除重做日志文件,重啟舊版服務器修復錯誤,慢速關機后重試升級。
    • 此步驟還根據需要升級 mysql 系統數據庫,更新 Performance Schema、INFORMATION_SCHEMAsys 數據庫,并檢查所有用戶數據庫與當前 MySQL 版本的兼容性。
    • 注意:此過程不會升級時區表。升級時區表需手動操作,參見第 7.1.15 節。

2. 邏輯升級 (Logical Upgrade)

邏輯升級涉及使用 mysqldump 等工具從舊實例導出 SQL,安裝新服務器,然后將 SQL 導入到新實例。

步驟:

  1. 審閱第 3.1 節信息。
  2. 從舊安裝導出數據
    mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
    
    重要提示: 如果表包含生成列,請使用 MySQL 5.7.9 或更高版本附帶的 mysqldump。可以使用 INFORMATION_SCHEMA.COLUMNS 表識別帶有生成列的表。
  3. 關閉舊服務器
    mysqladmin -u root -p shutdown
    
  4. 安裝 MySQL 8.4:參見第 2 章 “安裝 MySQL”。
  5. 初始化新數據目錄
    mysqld --initialize --datadir=/path/to/8.4-datadir
    
    記下屏幕上顯示或寫入錯誤日志的臨時 ‘root’@‘localhost’ 密碼。
  6. 啟動 MySQL 8.4 服務器 (使用新數據目錄):
    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
    # 或者對于 systemd 系統
    sudo systemctl start mysqld
    
  7. 重置 root 密碼
    mysql -u root -p
    Enter password: ****  <- 輸入臨時 root 密碼
    mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
    
  8. 將導出的 SQL 導入新服務器
    mysql -u root -p --force < data-for-upgrade.sql
    
    注意:如果啟用了 GTID (gtid_mode=ON) 且轉儲文件包含系統表,不建議加載轉儲文件。mysqldump 為非事務性的 MyISAM 系統表發出 DML 指令,這在啟用 GTID 時是不允許的。另外,將啟用 GTID 的服務器轉儲加載到另一個啟用 GTID 的服務器會生成不同的事務 ID。
  9. 執行剩余升級操作
    • 關閉服務器,然后使用 --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 有兩個步驟:

  1. 導入數據字典:使用 --upgrade=MINIMAL 選項啟動新的 mysqld 以升級數據字典但不升級系統表。服務器必須能連接到 NDB 集群才能完成此階段。
  2. 升級系統表:不使用 --upgrade=MINIMAL 選項重啟每個 mysqld

八、使用 MySQL Yum 倉庫升級 (3.8)

適用于支持的 Yum-based 平臺 (參見第 2.5.1 節)。

  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 章。
  2. 升級 MySQL
    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 服務器在通過 Yum 更新后總是會重啟。
  3. 升級共享客戶端庫
    • 使用舊的共享客戶端庫編譯的應用程序在更新后應繼續工作。
    • 如果重新編譯應用程序并動態鏈接到更新后的庫,則需要在部署這些應用程序的系統上也部署 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 安裝程序升級

  1. 下載并執行最新的 MySQL Server MSI。
  2. 雖然不支持直接跨系列升級,但“自定義安裝”選項允許指定安裝位置(否則默認安裝到 C:\Program Files\MySQL\MySQL Server 8.4\)。
  3. 運行捆綁的 MySQL 配置器 (MySQL Configurator) 來配置新安裝。

參考鏈接:https://dev.mysql.com/doc/refman/8.4/en/upgrading.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912829.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode427.建立四叉樹

區間x0到x1和區間y0到y1都是左閉右開的 解題基本思路是先判斷當前矩陣是不是全0或全1&#xff0c;如果是就直接返回新建的一個節點值(矩陣的統一值&#xff0c;葉子節點&#xff09;,如果不是那就新建一個節點值&#xff0c;非葉并且左上右上左下右下四個方向上遞歸創建節點 /…

醫學+AI教育實踐!南醫大探索數據挖掘人才培養,清華指導發布AI教育白皮書

教育數字化浪潮正以前所未有的力度重塑高等教育格局。今年4月&#xff0c;為貫徹落實《教育強國建設規劃綱要&#xff08;2024—2035 年&#xff09;》&#xff0c;教育部等九部門印發《關于加快推進教育數字化的意見》&#xff0c;表明將持續推動“人工智能教育”全方位發展&a…

PDF處理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平臺兼容性和安全穩定的格式特點&#xff0c;廣泛應用于企業文檔管理和電子資料傳輸中。隨著PDF文檔頁數和內容復雜度的增加&#xff0c;拆分PDF成為優化文檔處理流程、提升辦公效率的重要需求。通過編程方式實現PDF拆分&#xff0c;不僅能自動化處理海量文…

文心4.5開源模型部署實踐

文心4.5開源模型部署實踐 使用fastdeploy本地部署 執行命令&#xff1a; python -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-21B-A3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--m…

Python迭代器、生成器、閉包和裝飾器(三器一包)

return、continue、break區別&#xff1a; return只能用在函數里面&#xff0c;表示從函數中返回&#xff0c;函數體內的后續任何代碼都不執行continue只是跳出當前循環&#xff0c;進入下一循環break只是跳出全部循環&#xff0c;如果循環后面還有代碼&#xff0c;會進行執行…

【Java】Maven

一.Maven簡介 Maven的產生主要是為了解決Java項目中的兩個問題&#xff1a; 1.依賴管理&#xff1a; 傳統 Java 項目在引入第三方庫時&#xff0c;需要手動下載 JAR 包并維護復雜的依賴關系。Maven 提供了統一的依賴管理機制&#xff0c;通過簡單的配置即可自動從倉庫下載并引…

人臉活體識別3:C/C++實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測)

人臉活體識別3&#xff1a;C/C實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 目錄 人臉活體識別3&#xff1a;C/C實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 1. 前言 2.人臉活體識別方法 &#xff08;1&#xff09;基于人臉動作的檢測?? &#xff08;2&#xff09;?…

【ABAP】 從無到有 新建一個Webdynpro程序

、新建WDA 可從SE80在web dynpro 組件下 創建 并按例以下操作 2、插入窗口 3、相關功能 3-1、展示消息 DATA:lo_api_controller TYPE REF TO if_wd_controller,lo_message_handler TYPE REF TO if_wd_message_manager.lo_api_controller ? wd_this->wd_get_api( ).lo_mess…

ALV常用設置(更新中一)

之前設置了checkbox&#xff0c;但是觸發不了單擊事件&#xff0c;且alv自帶的復選&#xff0c;鼠標移動單擊別處就會自動取消。 **增加多選框到fieldcat&#xff0c;**這一點很重要&#xff0c;然后設置 IF gs_fcat-fieldname sel.gs_fcat-checkbox X. gs_fcat-edit X. …

NumPy 或 PyTorch/TensorFlow 中的張量理解

(2, 2, 3) 形狀的 3D 數組&#xff08;或張量&#xff09;的結構。 個人理解&#xff1a; 2個2維數組&#xff08;張量&#xff09;&#xff0c;2維數組&#xff08;張量&#xff09;里面有2個1維向量&#xff08;張量&#xff09;&#xff0c;1維向量&#xff08;張量&#x…

Linux環境下使用 C++ 與 OpenCV 實現 ONNX 分類模型推理

實驗環境&#xff1a;Ubuntu 20.0 推理模型&#xff1a;ONNX分類模型 1. 安裝依賴項 首先是需要安裝依賴庫&#xff0c;如g&#xff0c;cmake等&#xff0c;如果已經安裝的話可以忽略 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt i…

AJAX 安裝使用教程

一、AJAX 簡介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一種在無需重新加載整個網頁的情況下&#xff0c;能夠與服務器交換數據并更新部分網頁內容的技術。它不是一種新語言&#xff0c;而是使用現有的標準組合&#xff1a;JavaScript XMLHttpRequest…

【牛客算法】牛客網編程題解:小紅拼圖

一、題目介紹 1.1. 題目鏈接 &#xff1a;小紅拼圖 https://www.nowcoder.com/questionTerminal/08b54686f0d14bd784d9d148c68a268a 1.2 題目介紹 小紅正在玩一個拼圖游戲&#xff0c;她有一些完全相同的拼圖組件&#xff1a; 小紅準備用這些組件來拼成一些圖案。這些組件可…

買賣股票的最佳時機--js 算法

一、買賣股票的最佳時機 給定一個數組 prices ,它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。你只能選擇 某一天 買入這只股票,并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。返回你可以從這筆交易中獲取的最大利潤。…

C#基礎(WndProc)

WndProc 是操作系統與你的程序“對話”的通道??。當用戶點擊鼠標、按下鍵盤&#xff0c;或系統事件&#xff08;如窗口移動&#xff09;發生時&#xff0c;Windows 會將這些事件打包成“消息”&#xff0c;發送給你的窗口&#xff0c;而 WndProc 就是接收和處理這些消息的函數…

記錄一個 Linux中腳本無法執行的問題

問題描述&#xff1a; 在本地的window系統傳的云服務器上一個.sh結尾的安裝Java環境的腳本 上傳到云服務器后&#xff0c;使用命令賦予執行權限 chmod x 文件名然后看一下這個腳本變綠了就可以了 然后開始嘗試執行 ./腳本名 然后就報錯了 然后開始排查問題 1.檢查并修復 She…

Iceberg在圖靈落地應用

導讀 百度MEG上一代大數據產品存在平臺分散、易用性差等問題&#xff0c;導致開發效率低下、學習成本高&#xff0c;業務需求響應遲緩。為了解決這些問題&#xff0c;百度MEG內部開發了圖靈3.0生態系統&#xff0c;包括Turing Data Engine(TDE)計算&存儲引擎、Turing Data…

FPGA設計的用戶約束

FPGA設計的用戶約束 文章目錄 FPGA設計的用戶約束FPGA設計的用戶約束綜合約束管腳約束位置約束時序約束小總結 FPGA設計的用戶約束 至此&#xff0c;HDL到門級網表的轉化已經完成&#xff0c;對于編譯器來說&#xff0c;下一步的任務就是要將門級網表轉換并映射到具體的FPGA硬…

Spring 生態創新應用:微服務架構設計與前沿技術融合實踐

在數字化轉型的深水區&#xff0c;企業級應用正面臨從 “單體架構” 向 “分布式智能架構” 的根本性躍遷。Spring 生態以其二十年技術沉淀形成的生態壁壘&#xff0c;已成為支撐這場變革的核心基礎設施。從 2002 年 Rod Johnson 發布《Expert One-on-One J2EE Design and Deve…

車牌識別與標注:基于百度OCR與OpenCV的實現(一)

車牌識別與標注&#xff1a;基于百度OCR與OpenCV的實現 在計算機視覺領域&#xff0c;車牌識別是一項極具實用價值的技術&#xff0c;廣泛應用于交通監控、智能停車場管理等領域。本文將介紹如何在macOS系統下&#xff0c;利用百度OCR API進行車牌識別&#xff0c;并結合OpenC…