最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 升級(jí)到8.4版本的完整流程及操作方法

 更新時(shí)間:2025年08月06日 14:50:40   作者:我科絕倫  
本文詳細(xì)說明了MySQL升級(jí)至8.4的完整流程,涵蓋升級(jí)前準(zhǔn)備(備份、兼容性檢查)、支持路徑(原地、邏輯導(dǎo)出、復(fù)制)、關(guān)鍵變更(空間索引、保留關(guān)鍵字、ENUM/SET限制)及平臺(tái)特定方法,強(qiáng)調(diào)不可降級(jí)并需謹(jǐn)慎處理數(shù)據(jù)字典和系統(tǒng)表升級(jí),感興趣的朋友跟隨小編一起看看吧

本指南詳細(xì)介紹了將 MySQL 升級(jí)到 8.4 版本的完整流程、注意事項(xiàng)和操作方法。

一、升級(jí)前準(zhǔn)備 (3.1 Before You Begin)

在開始升級(jí)之前,必須仔細(xì)審閱本節(jié)信息并執(zhí)行所有推薦的操作:

  • 理解升級(jí)過程:了解升級(jí)期間可能發(fā)生的情況。請(qǐng)參閱第 3.4 節(jié)“MySQL 升級(jí)過程升級(jí)的內(nèi)容”。
    • 備份數(shù)據(jù):創(chuàng)建完整的數(shù)據(jù)庫備份以保護(hù)您的數(shù)據(jù)。此備份必須包含 mysql 系統(tǒng)數(shù)據(jù)庫,該數(shù)據(jù)庫存儲(chǔ)了 MySQL 數(shù)據(jù)字典表和其他系統(tǒng)表。
  • 重要提示:
  • 不支持從 MySQL 8.4 降級(jí)到 MySQL 8.3,或從一個(gè) MySQL 8.4 版本降級(jí)到更早的 MySQL 8.4 版本。
    • 唯一支持的降級(jí)替代方案是恢復(fù)升級(jí)前創(chuàng)建的備份。
    • 因此,在啟動(dòng)升級(jí)過程之前備份數(shù)據(jù)是絕對(duì)必要的。
  • 檢查升級(jí)路徑:審閱第 3.2 節(jié)“升級(jí)路徑”,確保您計(jì)劃的升級(jí)路徑是受支持的。
  • 審閱變更:審閱第 3.5 節(jié)“MySQL 8.4 中的變更”,了解升級(jí)前需要注意的變更。某些變更可能需要您采取行動(dòng)。
  • 審閱廢棄和移除功能:審閱第 1.4 節(jié)“自 MySQL 8.0 以來 MySQL 8.4 的新變化”中關(guān)于廢棄和移除功能的信息。如果您使用了這些功能中的任何一項(xiàng),升級(jí)可能需要相應(yīng)更改。
  • 審閱配置變量變更:審閱第 1.5 節(jié)“自 8.0 以來 MySQL 8.4 中新增、廢棄或移除的服務(wù)器和狀態(tài)變量及選項(xiàng)”。如果您使用了廢棄或已移除的變量,升級(jí)可能需要更改配置。
  • 查閱發(fā)行說明:查閱 MySQL 8.4 的發(fā)行說明,了解修復(fù)、變更和新功能信息。
  • 復(fù)制環(huán)境:如果使用了復(fù)制,審閱第 19.5.3 節(jié)“升級(jí)或降級(jí)復(fù)制拓?fù)?rdquo;。
  • 遵循最佳實(shí)踐:審閱第 3.3 節(jié)“升級(jí)最佳實(shí)踐”并相應(yīng)地進(jìn)行規(guī)劃。

二、升級(jí)路徑 (3.2 Upgrade Paths)

注意:

  • 在嘗試降級(jí)之前,請(qǐng)確保了解 MySQL 長(zhǎng)期支持 (LTS) 和創(chuàng)新版本的發(fā)布模型。
  • 建議在執(zhí)行升級(jí)之前,使用 MySQL Shell 的升級(jí)檢查器工具 (util.checkForServerUpgrade()) 檢查升級(jí)兼容性。
  • 復(fù)制拓?fù)涞纳?jí)遵循第 19.5.3 節(jié)“升級(jí)或降級(jí)復(fù)制拓?fù)?rdquo;中描述的滾動(dòng)升級(jí)方案,該方案使用支持的單一服務(wù)器升級(jí)方法之一來升級(jí)每個(gè)單獨(dú)的服務(wù)器。
  • 月度快速更新 (MRU) 和熱修復(fù)在此文檔中也視為發(fā)布。

表:MySQL 服務(wù)器的升級(jí)路徑

升級(jí)路徑路徑示例支持的升級(jí)方法
在同一個(gè) LTS 或 Bugfix 系列內(nèi)8.0.37 到 8.0.41 或 8.4.0 到 8.4.4原地升級(jí)、邏輯導(dǎo)出導(dǎo)入、復(fù)制、MySQL 克隆
從 LTS/Bugfix 系列到下一個(gè) LTS 系列8.0.37 到 8.4.x LTS原地升級(jí)、邏輯導(dǎo)出導(dǎo)入、復(fù)制
從 LTS/Bugfix 到下一個(gè) LTS 系列之前的創(chuàng)新版8.0.34 到 8.3.0 或 8.4.0 到 9.0.0原地升級(jí)、邏輯導(dǎo)出導(dǎo)入、復(fù)制
從創(chuàng)新系列到下一個(gè) LTS 系列8.3.0 到 8.4 LTS原地升級(jí)、邏輯導(dǎo)出導(dǎo)入、復(fù)制
從創(chuàng)新系列到下一個(gè) LTS 系列之后的創(chuàng)新版不允許需要兩步:8.3.0 到 8.4 LTS,然后 8.4 LTS 到 9.x 創(chuàng)新版
在同一個(gè)創(chuàng)新系列內(nèi)8.1.0 到 8.3.0原地升級(jí)、邏輯導(dǎo)出導(dǎo)入、復(fù)制
從 MySQL 5.7 到 LTS 或創(chuàng)新版MySQL 5.7 到 8.4不能跳過 Bugfix 或 LTS 系列。例如,需先將 MySQL 5.7 升級(jí)到 MySQL 8.0,再將 MySQL 8.0 升級(jí)到 MySQL 8.4。

三、升級(jí)最佳實(shí)踐 (3.3 Upgrade Best Practices)

MySQL 支持在次要版本之間(LTS 系列內(nèi))升級(jí)和跨主版本(跨 LTS 系列)升級(jí)。升級(jí)可提供最新的功能、性能和安全性修復(fù)。

為確保成功升級(jí)到最新的 MySQL 8.4 版本,我們推薦以下最佳實(shí)踐:

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

四、MySQL 升級(jí)過程升級(jí)的內(nèi)容 (3.4 What the MySQL Upgrade Process Upgrades)

安裝新版本的 MySQL 可能需要升級(jí)現(xiàn)有安裝的以下部分:

  1. mysql 系統(tǒng)模式:包含存儲(chǔ) MySQL 服務(wù)器運(yùn)行時(shí)所需信息的表(參見第 7.3 節(jié) “mysql 系統(tǒng)模式”)。mysql 模式表分為兩大類:
    • 數(shù)據(jù)字典表:存儲(chǔ)數(shù)據(jù)庫對(duì)象元數(shù)據(jù)。
    • 系統(tǒng)表(即剩余的非數(shù)據(jù)字典表):用于其他操作目的。
  2. 其他模式:包括一些內(nèi)置的、可視為服務(wù)器“擁有”的模式,以及其他用戶模式:
    • performance_schema、INFORMATION_SCHEMAndbinfosys 模式。
    • 用戶模式。

有兩個(gè)不同的版本號(hào)與可能需要升級(jí)的部分相關(guān)聯(lián):

  • 數(shù)據(jù)字典版本:適用于數(shù)據(jù)字典表。
  • 服務(wù)器版本(又稱 MySQL 版本):適用于系統(tǒng)表和其他模式中的對(duì)象。

升級(jí)過程發(fā)生在兩個(gè)步驟:

  1. 步驟 1:數(shù)據(jù)字典升級(jí)
    • 升級(jí) mysql 模式中的數(shù)據(jù)字典表、Performance Schema、INFORMATION_SCHEMAndbinfo。
    • 由服務(wù)器在啟動(dòng)時(shí)自動(dòng)執(zhí)行(除非使用 --upgrade=NONE 選項(xiàng)禁止)。
    • 如果數(shù)據(jù)字典過期但被禁止升級(jí),服務(wù)器將無法啟動(dòng)并報(bào)錯(cuò)退出。
    • 使用 --upgrade 服務(wù)器選項(xiàng)控制自動(dòng)升級(jí)行為:
      • --upgrade=AUTO (或無選項(xiàng)):升級(jí)所有過期的內(nèi)容(步驟 1 和 2)。
      • --upgrade=NONE:不升級(jí)任何內(nèi)容,但如果數(shù)據(jù)字典必須升級(jí)則退出報(bào)錯(cuò)。
      • --upgrade=MINIMAL:僅升級(jí)數(shù)據(jù)字典、Performance Schema 和 INFORMATION_SCHEMA(步驟 1)。注意:此選項(xiàng)后無法啟動(dòng)組復(fù)制,且其他功能可能受限。
      • --upgrade=FORCE:升級(jí)步驟 1 的內(nèi)容,并強(qiáng)制升級(jí)其他所有內(nèi)容(步驟 2)。啟動(dòng)時(shí)間可能較長(zhǎng)。
  2. 步驟 2:服務(wù)器升級(jí)
    • 升級(jí) mysql 模式中的系統(tǒng)表(剩余的非數(shù)據(jù)字典表)、sys 模式和用戶模式。
    • 安裝或升級(jí) sys 模式(如果存在同名用戶模式會(huì)報(bào)錯(cuò))。
    • 將系統(tǒng)表升級(jí)到當(dāng)前結(jié)構(gòu)(包括幫助表,不包括時(shí)區(qū)表)。
    • 更改 mysql.db, mysql.tables_priv, mysql.columns_priv, mysql.procs_priv 表主鍵列順序以提升性能(對(duì)擁有大量用戶和權(quán)限的系統(tǒng)可能耗時(shí))。
    • 使用 CHECK TABLE ... FOR UPGRADE 檢查并處理所有用戶模式中的所有表(可能耗時(shí)且鎖表)。
    • 將所有檢查和修復(fù)過的表標(biāo)記為當(dāng)前的 MySQL 版本號(hào)。
    • 注意:升級(jí)過程不會(huì)升級(jí)時(shí)區(qū)表的內(nèi)容。升級(jí)時(shí)區(qū)表需手動(dòng)操作,參見第 7.1.15 節(jié) “MySQL 服務(wù)器時(shí)區(qū)支持”。

五、MySQL 8.4 中的變更 (3.5 Changes in MySQL 8.4)

在升級(jí)到 MySQL 8.4 之前,請(qǐng)審閱以下部分描述的變更,以識(shí)別適用于您當(dāng)前 MySQL 安裝和應(yīng)用程序的變更:

  • MySQL 8.4 中的不兼容變更
    • 空間索引:升級(jí)到 MySQL 8.4.4 或更高版本時(shí),建議在升級(jí)前刪除所有空間索引,升級(jí)完成后再重新創(chuàng)建它們?;蛘?,您也可以在升級(jí)后立即(但在使用包含這些索引的表之前)刪除并重新創(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)在會(huì)導(dǎo)致語法錯(cuò)誤。請(qǐng)改用 WAIT_FOR_EXECUTED_GTID_SET()。
    • authentication_fidoauthentication_fido_client 在某些平臺(tái)上不再可用:由于服務(wù)器捆綁的 libfido2 庫升級(jí)到需要 OpenSSL 1.1.1 或更高版本的 1.13.0,authentication_fidoauthentication_fido_client 認(rèn)證插件在 Enterprise Linux 6, Enterprise Linux 7, Solaris 11 或 SUSE Enterprise Linux 12 上不再可用。
    • 命令行選項(xiàng)禁止設(shè)置為 NULL:在命令行上將服務(wù)器變量設(shè)置為 SQL NULL 是不支持的。在 MySQL 8.4 中,明確禁止將任何此類變量設(shè)置為 NULL,嘗試這樣做將被拒絕并報(bào)錯(cuò)。特定變量(如 basedir, datadir, plugin_dir 等)除外。參見第 7.1.8 節(jié) “服務(wù)器系統(tǒng)變量”。
    • 更多變更信息請(qǐng)參閱第 1.4 節(jié) “自 MySQL 8.0 以來 MySQL 8.4 的新變化”。
  • 變更的服務(wù)器默認(rèn)值
    • 下表列出了 MySQL 8.4 與 MySQL 8.0 相比,系統(tǒng)變量默認(rèn)值發(fā)生變化的項(xiàng)目。雖然新默認(rèn)值適用于大多數(shù)用例,但在特定場(chǎng)景或需要兼容舊配置時(shí)可能需要調(diào)整。
分類系統(tǒng)變量舊默認(rèn)值新默認(rèn)值
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
組復(fù)制變更group_replication_consistencyEVENTUALBEFORE_ON_PRIMARY_FAILOVER
group_replication_exit_state_actionREAD_ONLYOFFLINE_MODE
臨時(shí)表變更temptable_max_mmap1073741824 (1GB)0
temptable_max_ram1073741824 (1GB)總內(nèi)存的 3% (范圍 1-4 GB)
temptable_use_mmapONOFF
  • 有關(guān) MySQL 8.4 中新增的選項(xiàng)或變量,請(qǐng)參閱 MySQL 服務(wù)器版本參考中的“MySQL 8.4 的選項(xiàng)和變量變更”。
  • 性能模式 variables_info 表顯示了每個(gè)系統(tǒng)變量的設(shè)置來源及其取值范圍。

六、準(zhǔn)備安裝進(jìn)行升級(jí) (3.6 Preparing Your Installation for Upgrade)

在升級(jí)到最新的 MySQL 8.4 版本之前,通過執(zhí)行以下初步檢查,確保您當(dāng)前的 MySQL 8.3 或 MySQL 8.4 服務(wù)器實(shí)例已做好升級(jí)準(zhǔn)備:

提示: 考慮使用 MySQL Shell 升級(jí)檢查器工具 (util.checkForServerUpgrade()) 來驗(yàn)證 MySQL 服務(wù)器實(shí)例是否已準(zhǔn)備好升級(jí)。您可以指定計(jì)劃升級(jí)到的目標(biāo) MySQL 服務(wù)器版本(從 MySQL Server 8.0.11 到與當(dāng)前 MySQL Shell 版本號(hào)匹配的 MySQL Server 版本號(hào))。該工具執(zhí)行與指定目標(biāo)版本相關(guān)的自動(dòng)檢查,并建議您應(yīng)手動(dòng)進(jìn)行的其他相關(guān)檢查。升級(jí)檢查器適用于 MySQL 的所有 Bugfix、Innovation 和 LTS 版本。MySQL Shell 安裝說明請(qǐng)參閱 此處。

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

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

升級(jí)失敗處理:
如果升級(jí)到 MySQL 8.4 因上述任何問題失敗,服務(wù)器將回滾對(duì)數(shù)據(jù)目錄的所有更改。在這種情況下,應(yīng)刪除所有重做日志文件 (ib_logfile*),在現(xiàn)有數(shù)據(jù)目錄上重新啟動(dòng) MySQL 8.3 服務(wù)器以解決錯(cuò)誤。修復(fù)錯(cuò)誤后,執(zhí)行慢速關(guān)閉 (innodb_fast_shutdown=0),然后再次嘗試升級(jí)。

七、Unix/Linux 上基于二進(jìn)制或軟件包的安裝升級(jí) (3.7)

升級(jí)方法取決于平臺(tái)和初始安裝方式:

1. 原地升級(jí) (In-Place Upgrade)

原地升級(jí)涉及關(guān)閉舊服務(wù)器,用新的二進(jìn)制文件或軟件包替換舊的,然后在現(xiàn)有數(shù)據(jù)目錄上重啟新服務(wù)器。

步驟:

  1. 審閱第 3.1 節(jié)信息。
  2. 按照第 3.6 節(jié)完成安裝準(zhǔn)備檢查。
  3. XA 事務(wù):如果使用 InnoDB 的 XA 事務(wù),升級(jí)前運(yùn)行 XA RECOVER 檢查未提交的 XA 事務(wù)。如果有結(jié)果,使用 XA COMMITXA ROLLBACK 提交或回滾這些事務(wù)。
  4. 關(guān)機(jī)設(shè)置:如果通常配置 innodb_fast_shutdown=2 (冷關(guān)機(jī)),請(qǐng)配置為執(zhí)行快速或慢速關(guān)機(jī):
    SET GLOBAL innodb_fast_shutdown = 1; -- 快速關(guān)機(jī)
    SET GLOBAL innodb_fast_shutdown = 0; -- 慢速關(guān)機(jī) (推薦用于跨版本升級(jí))
  5. 關(guān)閉舊服務(wù)器
    mysqladmin -u root -p shutdown
    
  6. 升級(jí) MySQL 二進(jìn)制文件或軟件包
    • 二進(jìn)制安裝:解壓新的 MySQL 二進(jìn)制分發(fā)包 (參見 獲取并解壓分發(fā)版)。
    • 軟件包安裝:安裝新軟件包 (注意:如果最初安裝了多個(gè) RPM 包,需升級(jí)所有包,而不僅僅是服務(wù)器包)。對(duì)于 Yum/APT/SLES 倉庫安裝,請(qǐng)使用相應(yīng)的包管理器命令 (如 sudo yum update mysql-server, sudo apt-get install mysql-server)。
    • 注意:對(duì)于使用 systemd 的平臺(tái) (RPM/Debian 包安裝),使用 systemctl 管理服務(wù) (systemctl stop mysqld, systemctl start mysqld),而不是 mysqld_safe
  7. 啟動(dòng) MySQL 8.4 服務(wù)器 (使用現(xiàn)有數(shù)據(jù)目錄):
    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
    # 或者對(duì)于 systemd 系統(tǒng)
    sudo systemctl start mysqld
    • 如果有加密的 InnoDB 表空間,使用 --early-plugin-load 選項(xiàng)加載密鑰環(huán)插件。
  8. 自動(dòng)升級(jí)
    • 服務(wù)器啟動(dòng)時(shí)自動(dòng)檢測(cè)數(shù)據(jù)字典表是否存在。如果不存在,則在數(shù)據(jù)目錄中創(chuàng)建它們,用元數(shù)據(jù)填充,然后繼續(xù)正常啟動(dòng)序列。
    • 此過程升級(jí)所有數(shù)據(jù)庫對(duì)象的元數(shù)據(jù)(數(shù)據(jù)庫、表空間、系統(tǒng)和用戶表、視圖、存儲(chǔ)程序)并移除以前用于元數(shù)據(jù)存儲(chǔ)的文件(如 .frm 文件)。
    • 失敗處理:如果此步驟失敗,服務(wù)器回滾更改。需刪除重做日志文件,重啟舊版服務(wù)器修復(fù)錯(cuò)誤,慢速關(guān)機(jī)后重試升級(jí)。
    • 此步驟還根據(jù)需要升級(jí) mysql 系統(tǒng)數(shù)據(jù)庫,更新 Performance Schema、INFORMATION_SCHEMAsys 數(shù)據(jù)庫,并檢查所有用戶數(shù)據(jù)庫與當(dāng)前 MySQL 版本的兼容性。
    • 注意:此過程不會(huì)升級(jí)時(shí)區(qū)表。升級(jí)時(shí)區(qū)表需手動(dòng)操作,參見第 7.1.15 節(jié)。

2. 邏輯升級(jí) (Logical Upgrade)

邏輯升級(jí)涉及使用 mysqldump 等工具從舊實(shí)例導(dǎo)出 SQL,安裝新服務(wù)器,然后將 SQL 導(dǎo)入到新實(shí)例。

步驟:

  1. 審閱第 3.1 節(jié)信息。
  2. 從舊安裝導(dǎo)出數(shù)據(jù)
    mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
    重要提示: 如果表包含生成列,請(qǐng)使用 MySQL 5.7.9 或更高版本附帶的 mysqldump??梢允褂?INFORMATION_SCHEMA.COLUMNS 表識(shí)別帶有生成列的表。
  3. 關(guān)閉舊服務(wù)器
    mysqladmin -u root -p shutdown
  4. 安裝 MySQL 8.4:參見第 2 章 “安裝 MySQL”。
  5. 初始化新數(shù)據(jù)目錄
    mysqld --initialize --datadir=/path/to/8.4-datadir
    記下屏幕上顯示或?qū)懭脲e(cuò)誤日志的臨時(shí) ‘root’@‘localhost’ 密碼。
  6. 啟動(dòng) MySQL 8.4 服務(wù)器 (使用新數(shù)據(jù)目錄):
    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
    # 或者對(duì)于 systemd 系統(tǒng)
    sudo systemctl start mysqld
  7. 重置 root 密碼
    mysql -u root -p
    Enter password: ****  <- 輸入臨時(shí) root 密碼
    mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
  8. 將導(dǎo)出的 SQL 導(dǎo)入新服務(wù)器
    mysql -u root -p --force < data-for-upgrade.sql
    注意:如果啟用了 GTID (gtid_mode=ON) 且轉(zhuǎn)儲(chǔ)文件包含系統(tǒng)表,不建議加載轉(zhuǎn)儲(chǔ)文件。mysqldump 為非事務(wù)性的 MyISAM 系統(tǒng)表發(fā)出 DML 指令,這在啟用 GTID 時(shí)是不允許的。另外,將啟用 GTID 的服務(wù)器轉(zhuǎn)儲(chǔ)加載到另一個(gè)啟用 GTID 的服務(wù)器會(huì)生成不同的事務(wù) ID。
  9. 執(zhí)行剩余升級(jí)操作
    • 關(guān)閉服務(wù)器,然后使用 --upgrade=FORCE 選項(xiàng)重啟以執(zhí)行剩余的升級(jí)任務(wù):
    mysqladmin -u root -p shutdown
    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
    # 或者對(duì)于 systemd 系統(tǒng) (需在配置文件中設(shè)置 upgrade=FORCE 或命令行傳遞)
    sudo systemctl stop mysqld
    sudo mysqld --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
    • 使用 --upgrade=FORCE 重啟會(huì)強(qiáng)制進(jìn)行步驟 2 的升級(jí)任務(wù)(升級(jí)系統(tǒng)表、sys 模式、檢查用戶模式中的所有對(duì)象)。
    • 注意:此過程不會(huì)升級(jí)時(shí)區(qū)表。

3. MySQL 集群升級(jí) (MySQL Cluster Upgrade)

MySQL 集群升級(jí)遵循常規(guī)滾動(dòng)升級(jí)方案 (MGM 節(jié)點(diǎn) -> 數(shù)據(jù)節(jié)點(diǎn) -> API 節(jié)點(diǎn)/MySQL 服務(wù)器)。升級(jí)每個(gè) mysqld 有兩個(gè)步驟:

  1. 導(dǎo)入數(shù)據(jù)字典:使用 --upgrade=MINIMAL 選項(xiàng)啟動(dòng)新的 mysqld 以升級(jí)數(shù)據(jù)字典但不升級(jí)系統(tǒng)表。服務(wù)器必須能連接到 NDB 集群才能完成此階段。
  2. 升級(jí)系統(tǒng)表:不使用 --upgrade=MINIMAL 選項(xiàng)重啟每個(gè) mysqld

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

適用于支持的 Yum-based 平臺(tái) (參見第 2.5.1 節(jié))。

  1. 選擇目標(biāo)系列
    • 默認(rèn)情況下,MySQL Yum 倉庫會(huì)將 MySQL 更新到您安裝時(shí)選擇的發(fā)布軌道中的最新版本(例如,8.0.x 安裝不會(huì)自動(dòng)更新到 8.4.x)。
    • 要更新到另一個(gè)發(fā)布系列,必須首先禁用當(dāng)前選定的子倉庫,并為目標(biāo)系列啟用子倉庫。編輯 /etc/yum.repos.d/mysql-community.repo 文件中的子倉庫條目。
    • 一般規(guī)則:從一個(gè) Bugfix 系列升級(jí)到另一個(gè)時(shí),應(yīng)升級(jí)到下一個(gè) Bugfix 系列,而不是跳過一個(gè)。例如,從 MySQL 5.7 升級(jí)到 8.4,應(yīng)先升級(jí)到 MySQL 8.0,再升級(jí)到 8.4。
    • MySQL Yum 倉庫不支持原地降級(jí)。降級(jí)請(qǐng)參見第 4 章。
  2. 升級(jí) MySQL
    sudo yum update mysql-server   # 非 dnf 系統(tǒng)
    sudo dnf upgrade mysql-server  # dnf 系統(tǒng)
    # 或者更新整個(gè)系統(tǒng)
    sudo yum update               # 非 dnf 系統(tǒng)
    sudo dnf upgrade              # dnf 系統(tǒng)
    # 升級(jí)特定組件 (先列出:`sudo yum list installed | grep "^mysql"`)
    sudo yum update package-name  # 非 dnf 系統(tǒng)
    sudo dnf upgrade package-name # dnf 系統(tǒng)
    注意:MySQL 服務(wù)器在通過 Yum 更新后總是會(huì)重啟。
  3. 升級(jí)共享客戶端庫
    • 使用舊的共享客戶端庫編譯的應(yīng)用程序在更新后應(yīng)繼續(xù)工作。
    • 如果重新編譯應(yīng)用程序并動(dòng)態(tài)鏈接到更新后的庫,則需要在部署這些應(yīng)用程序的系統(tǒng)上也部署 MySQL 提供的新共享庫包。為此,請(qǐng)?jiān)谶@些系統(tǒng)上添加 MySQL Yum 倉庫并安裝最新的共享庫。

九、使用 MySQL APT 倉庫升級(jí) (3.9)

在 Debian 和 Ubuntu 平臺(tái)上,使用 MySQL APT 倉庫執(zhí)行原地升級(jí)。具體步驟參見 使用 MySQL APT 倉庫升級(jí) MySQL。

十、使用 MySQL SLES 倉庫升級(jí) (3.10)

在 SUSE Linux Enterprise Server (SLES) 平臺(tái)上,使用 MySQL SLES 倉庫執(zhí)行原地升級(jí)。具體步驟參見 使用 MySQL SLES 倉庫升級(jí) MySQL。

十一、在 Windows 上升級(jí) (3.11)

升級(jí)方法取決于現(xiàn)有安裝方式:

1. 使用 MSI 安裝程序升級(jí)

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

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

到此這篇關(guān)于MySQL 升級(jí)到8.4版本的完整流程及操作方法的文章就介紹到這了,更多相關(guān)mysql8.4版本升級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在linux系統(tǒng)中使用通用包安裝Mysql的步驟

    在linux系統(tǒng)中使用通用包安裝Mysql的步驟

    本文詳細(xì)介紹了在Linux系統(tǒng)上安裝MySQL 8.0的完整流程,包括下載校驗(yàn)安裝包、解壓部署、創(chuàng)建用戶與數(shù)據(jù)目錄、初始化數(shù)據(jù)庫、配置系統(tǒng)服務(wù)等步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-10-10
  • mysql數(shù)據(jù)庫如何求時(shí)間差

    mysql數(shù)據(jù)庫如何求時(shí)間差

    這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫如何求時(shí)間差的相關(guān)資料,MySQL提供了許多用于計(jì)算時(shí)間差的函數(shù),可以方便地計(jì)算兩個(gè)時(shí)間之間的時(shí)間差、取出時(shí)間段中的時(shí)間間隔等,需要的朋友可以參考下
    2023-08-08
  • MySQL中EXPLAIN命令的使用場(chǎng)景及作用解讀

    MySQL中EXPLAIN命令的使用場(chǎng)景及作用解讀

    這篇文章主要介紹了MySQL中EXPLAIN命令的使用場(chǎng)景及作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-08-08
  • MySQL中的redo log和undo log日志詳解

    MySQL中的redo log和undo log日志詳解

    MySQL日志系統(tǒng)中最重要的日志為重做日志redo log和歸檔日志bin log,后者為MySQL Server層的日志,前者為InnoDB存儲(chǔ)引擎層的日志。今天通過本文給大家介紹MySQL中的redo log和undo log日志,感興趣的朋友一起看看吧
    2021-07-07
  • MySQL數(shù)據(jù)庫中外鍵(foreign?key)用法詳解

    MySQL數(shù)據(jù)庫中外鍵(foreign?key)用法詳解

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫中外鍵(foreign?key)的相關(guān)資料,MySQL 外鍵約束可以用來保證表與表之間的關(guān)系完整性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • MySQL表設(shè)計(jì)和聚合函數(shù)以及正則表達(dá)式示例詳解

    MySQL表設(shè)計(jì)和聚合函數(shù)以及正則表達(dá)式示例詳解

    聚合函數(shù)在數(shù)據(jù)庫管理和分析中有著廣泛的應(yīng)用場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于MySQL表設(shè)計(jì)和聚合函數(shù)以及正則表達(dá)式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • mysql判斷表是否存在然后批量刪除的操作

    mysql判斷表是否存在然后批量刪除的操作

    這篇文章主要介紹了mysql判斷表是否存在然后批量刪除操作,具有很好的參考價(jià)值,希望對(duì)有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SQL筆記之?dāng)?shù)據(jù)庫結(jié)構(gòu)優(yōu)化方式

    SQL筆記之?dāng)?shù)據(jù)庫結(jié)構(gòu)優(yōu)化方式

    這篇文章主要介紹了SQL筆記之?dāng)?shù)據(jù)庫結(jié)構(gòu)優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySql中 is Null段判斷無效和IFNULL()失效的解決方案

    MySql中 is Null段判斷無效和IFNULL()失效的解決方案

    這篇文章主要介紹了MySql中 is Null段判斷無效和IFNULL()失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL全文索引在數(shù)據(jù)庫中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    MySQL全文索引在數(shù)據(jù)庫中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    全文索引技術(shù)可以有效地從大量文本中檢索信息,適用于搜索引擎和電商平臺(tái)等場(chǎng)景,InnoDB從MySQL5.6開始支持全文索引,使用倒排索引實(shí)現(xiàn),全文檢索分為自然語言搜索、布爾搜索和查詢擴(kuò)展搜索三種模式,全文索引提高了模糊查詢的效率,優(yōu)化了基于文本的搜索查詢
    2024-09-09

最新評(píng)論

永春县| 射阳县| 双桥区| 承德市| 长寿区| 绥棱县| 天水市| 凤凰县| 金湖县| 城步| 江津市| 博客| 巴彦县| 开阳县| 竹北市| 井冈山市| 新巴尔虎左旗| 武威市| 湛江市| 星座| 琼结县| 宝鸡市| 灵山县| 兴业县| 凤山市| 大足县| 招远市| 山阴县| 海丰县| 邯郸市| 自贡市| 牡丹江市| 宝坻区| 长岛县| 于都县| 巴青县| 南皮县| 塔河县| 三门峡市| 三河市| 宁陕县|