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

從MySQL 7升級(jí)到MySQL 8的避坑指南與實(shí)操指南

 更新時(shí)間:2026年03月01日 16:20:45   作者:qq_29757467  
MySQL 8 作為里程碑式的版本,帶來了諸多重磅特性,但從 MySQL 7升級(jí)并非一鍵無腦更,涉及語(yǔ)法、配置、權(quán)限、數(shù)據(jù)類型等多維度兼容問題,本文結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),梳理升級(jí)核心注意事項(xiàng)、實(shí)操步驟與常見坑點(diǎn),需要的朋友可以參考下

前言

MySQL 8 作為里程碑式的版本,帶來了諸多重磅特性(如窗口函數(shù)、CTE、更強(qiáng)的 JSON 支持、默認(rèn) UTF8MB4 編碼、性能優(yōu)化等),但從 MySQL 7(注:MySQL 官方無 “7” 正式版,通常指 5.7,下文統(tǒng)一以 5.7 代指)升級(jí)并非 “一鍵無腦更”,涉及語(yǔ)法、配置、權(quán)限、數(shù)據(jù)類型等多維度兼容問題。本文結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),梳理升級(jí)核心注意事項(xiàng)、實(shí)操步驟與常見坑點(diǎn),幫你平穩(wěn)完成升級(jí)。

一、升級(jí)前必看:核心兼容性差異

1. 默認(rèn)字符集與排序規(guī)則變更

  • MySQL 5.7:默認(rèn)字符集為latin1,排序規(guī)則latin1_swedish_ci;
  • MySQL 8.0:默認(rèn)字符集改為utf8mb4,排序規(guī)則utf8mb4_0900_ai_ci(基于 Unicode 9.0,區(qū)分語(yǔ)言特性)。
  • 風(fēng)險(xiǎn)點(diǎn):若原庫(kù)未顯式指定字符集,升級(jí)后可能出現(xiàn)亂碼、排序異常;若業(yè)務(wù)依賴latin1,需提前規(guī)劃字符集遷移。
  • 建議:升級(jí)前全庫(kù)檢查字符集,執(zhí)行SELECT table_schema, table_name, column_name, character_set_name FROM INFORMATION_SCHEMA.COLUMNS WHERE character_set_name != ‘utf8mb4’;,提前將核心表字段改為utf8mb4。

2. 認(rèn)證插件與密碼策略變更

  • MySQL 5.7:默認(rèn)認(rèn)證插件為mysql_native_password;
  • MySQL 8.0:默認(rèn)改為caching_sha2_password,且強(qiáng)化了密碼策略(默認(rèn)要求密碼長(zhǎng)度≥8、包含大小寫 / 數(shù)字 / 特殊字符)。
  • 風(fēng)險(xiǎn)點(diǎn):
    舊客戶端(如 PHP5.x、Python2.x)不支持caching_sha2_password,會(huì)導(dǎo)致連接失?。?br />原弱密碼用戶升級(jí)后可能無法登錄。
  • 建議:
    若需兼容舊客戶端,可臨時(shí)改回舊認(rèn)證插件:ALTER USER ‘user’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘new_password’;;
    升級(jí)前梳理所有數(shù)據(jù)庫(kù)用戶,提前更新弱密碼,避免升級(jí)后登錄失敗。

3. 系統(tǒng)表與數(shù)據(jù)字典重構(gòu)

  • MySQL 8 徹底移除了 MyISAM 存儲(chǔ)的系統(tǒng)表,改用 InnoDB 的事務(wù)型數(shù)據(jù)字典,mysql庫(kù)結(jié)構(gòu)大幅調(diào)整:
  • 原mysql.user/mysql.db等權(quán)限表變?yōu)橐晥D,直接修改表的操作(如INSERT INTO mysql.user)失效;
  • 不再支持mysql_upgrade(5.7 升級(jí) 8.0 需用mysqld --upgrade=FORCE);
  • 移除information_schema中部分冗余表(如INNODB_SYS_*)。
  • 建議:檢查業(yè)務(wù)中是否有直接操作系統(tǒng)表的 SQL,改為官方推薦的CREATE USER/GRANT等語(yǔ)法。

4. SQL 模式與語(yǔ)法兼容性

  • 默認(rèn) SQL 模式增強(qiáng):MySQL 8 默認(rèn)啟用ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES等,5.7 中未開啟的嚴(yán)格模式可能導(dǎo)致原有 “不規(guī)范 SQL” 執(zhí)行失敗(如 GROUP BY 中未包含非聚合字段);
  • 關(guān)鍵字新增:MySQL 8 新增ROLE、WINDOW、CTE等關(guān)鍵字,若表名 / 字段名與這些關(guān)鍵字重名(如CREATE TABLE role (id INT);),需加反引號(hào)`包裹;
  • 函數(shù)行為變更:NOW()、SYSDATE()等函數(shù)精度提升,JSON_EXTRACT語(yǔ)法更嚴(yán)格,舊 JSON 操作 SQL 可能報(bào)錯(cuò)。

5. 存儲(chǔ)引擎與功能移除

  • 移除QUERY_CACHE(查詢緩存):MySQL 8 徹底刪除查詢緩存功能,若 my.cnf 中配置了query_cache_type、query_cache_size等參數(shù),啟動(dòng)會(huì)報(bào)錯(cuò);
  • 移除NO_AUTO_CREATE_USER SQL 模式:5.7 中GRANT語(yǔ)句若未指定密碼會(huì)自動(dòng)創(chuàng)建用戶,8.0 中此行為被禁止,需先CREATE USER再授權(quán);
  • 不支持MYSQL40密碼格式:僅保留MYSQL56和caching_sha2_password,極舊的用戶密碼需重置。

二、升級(jí)實(shí)操:分步執(zhí)行(推薦離線升級(jí))

步驟 1:升級(jí)前準(zhǔn)備

  1. 全量備份:使用mysqldump或物理備份工具(如 xtrabackup)備份整個(gè)數(shù)據(jù)庫(kù),命令示例:
# 全量備份(包含存儲(chǔ)過程、觸發(fā)器、事件)
mysqldump -uroot -p --all-databases --routines --triggers --events > mysql57_full_backup.sql
  1. 環(huán)境檢查
  • 確認(rèn)服務(wù)器系統(tǒng)滿足 MySQL 8 要求(如 glibc≥2.17、libaio≥0.3.109);
  • 檢查 my.cnf 配置文件,刪除query_cache_*、innodb_large_prefix等 8.0 廢棄的參數(shù);
  1. 兼容性檢測(cè):使用 MySQL 官方工具mysqlcheck或第三方工具(如 Percona Toolkit)掃描 SQL 兼容性:
# 檢查單庫(kù)語(yǔ)法兼容性
pt-upgrade --source h=127.0.0.1,P=3306,u=root,p=xxx,D=test --dest h=127.0.0.1,P=3307,u=root,p=xxx

步驟 2:停止舊庫(kù),安裝 MySQL 8

1.停止 MySQL 5.7 服務(wù):

systemctl stop mysqld

2.卸載舊版本(保留數(shù)據(jù)目錄):

yum remove mysql-community-server-5.7*

3.安裝 MySQL 8(以 CentOS 為例):

# 配置yum源
wget https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm
rpm -ivh mysql80-community-release-el8-3.noarch.rpm
# 安裝服務(wù)
yum install mysql-community-server -y

步驟 3:初始化與升級(jí)數(shù)據(jù)

1.啟動(dòng) MySQL 8 并強(qiáng)制升級(jí)數(shù)據(jù)字典:

# 啟動(dòng)并執(zhí)行升級(jí)
mysqld --upgrade=FORCE --user=mysql &

2.檢查升級(jí)日志(/var/log/mysqld.log),確認(rèn)無報(bào)錯(cuò):

grep "upgrade" /var/log/mysqld.log

3.重置 root 密碼(MySQL 8 初始密碼在日志中,且默認(rèn)要求強(qiáng)密碼):

# 查看初始密碼
grep "temporary password" /var/log/mysqld.log
# 登錄后重置
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';

步驟 4:驗(yàn)證與適配

  1. 檢查數(shù)據(jù)庫(kù)連接:驗(yàn)證業(yè)務(wù)程序、客戶端工具能否正常連接;
  2. 執(zhí)行核心 SQL:運(yùn)行業(yè)務(wù)關(guān)鍵 SQL(如查詢、插入、更新),檢查是否有語(yǔ)法報(bào)錯(cuò);
  3. 性能監(jiān)控:觀察 CPU、內(nèi)存、IO 使用率,對(duì)比升級(jí)前性能,若有下降需優(yōu)化配置(如調(diào)整innodb_buffer_pool_size)。

三、常見坑點(diǎn)與解決方案

坑點(diǎn)現(xiàn)象原因解決方案
客戶端連接報(bào)錯(cuò) “caching_sha2_password auth failed”客戶端不支持新認(rèn)證插件1. 改用戶認(rèn)證插件為 mysql_native_password;2. 升級(jí)客戶端(如 PHP 升級(jí)到 7.4+)
GROUP BY 查詢報(bào)錯(cuò) “Expression #1 of SELECT list is not in GROUP BY”8.0 默認(rèn)啟用 ONLY_FULL_GROUP_BY1. 優(yōu)化 SQL,GROUP BY 包含所有非聚合字段;2. 臨時(shí)關(guān)閉該模式(不推薦)
啟動(dòng)報(bào)錯(cuò) “unknown variable ‘query_cache_size’”8.0 移除查詢緩存參數(shù)刪除 my.cnf 中所有 query_cache_* 相關(guān)配置
授權(quán)報(bào)錯(cuò) “ERROR 1064 (42000): You have an error in your SQL syntax”8.0 不支持 GRANT 自動(dòng)創(chuàng)建用戶先執(zhí)行 CREATE USER,再執(zhí)行 GRANT

四、總結(jié)

MySQL 5.7 升級(jí)到 8.0 的核心是 “先兼容檢查,再分步升級(jí),最后驗(yàn)證適配”

  • 升級(jí)前重點(diǎn)關(guān)注字符集、認(rèn)證插件、SQL 語(yǔ)法、廢棄參數(shù)四大兼容性問題;
  • 務(wù)必全量備份,推薦先在測(cè)試環(huán)境驗(yàn)證,再落地生產(chǎn);
  • 升級(jí)后優(yōu)先檢查核心業(yè)務(wù) SQL 執(zhí)行情況,及時(shí)調(diào)整配置和代碼適配新特性。
  • MySQL 8 的新特性能顯著提升業(yè)務(wù)性能和開發(fā)效率,只要做好充分的兼容性評(píng)估,就能平穩(wěn)完成升級(jí),享受新版本帶來的紅利。

核心注意點(diǎn)回顧

1.兼容性核心:MySQL 8 的字符集(utf8mb4 默認(rèn))、認(rèn)證插件(caching_sha2_password)、SQL 模式是最易出問題的三大點(diǎn),需提前適配;

2.操作關(guān)鍵:升級(jí)前必須全量備份,測(cè)試環(huán)境驗(yàn)證是避坑的核心,禁止直接在生產(chǎn)環(huán)境 “裸升”;

3.適配重點(diǎn):移除廢棄配置(如查詢緩存)、優(yōu)化不規(guī)范 SQL(如 GROUP BY)、升級(jí)老舊客戶端,確保連接和執(zhí)行正常。

以上就是從MySQL 7升級(jí)到MySQL 8的避坑指南與實(shí)操指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL 7升級(jí)到MySQL 8的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL 8.0.26版本升級(jí)32版本查詢數(shù)據(jù)為空的解決方案

    MySQL 8.0.26版本升級(jí)32版本查詢數(shù)據(jù)為空的解決方案

    這篇文章主要介紹了MySQL 8.0.26版本升級(jí)32版本查詢數(shù)據(jù)為空的跟蹤,本文給大家分享兩種解決方法,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-03-03
  • Mysql8.0壓縮包安裝方法(詳細(xì)教程一步步安裝)

    Mysql8.0壓縮包安裝方法(詳細(xì)教程一步步安裝)

    這篇文章主要給大家介紹了關(guān)于Mysql8.0壓縮包安裝方法,文中介紹的非常詳細(xì),Mysql安裝的時(shí)候可以有msi安裝和zip解壓縮兩種安裝方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 深入探究MySQL中使用where 1=1是否存在性能影響

    深入探究MySQL中使用where 1=1是否存在性能影響

    最近在項(xiàng)目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡(jiǎn)化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下
    2024-02-02
  • Mac系統(tǒng)下MySql下載MySQL5.7及詳細(xì)安裝圖解

    Mac系統(tǒng)下MySql下載MySQL5.7及詳細(xì)安裝圖解

    這篇文章主要介紹了Mac系統(tǒng)下MySql下載MySQL5.7及詳細(xì)安裝圖解,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-11-11
  • MySQL單表記錄數(shù)過大的優(yōu)化方法

    MySQL單表記錄數(shù)過大的優(yōu)化方法

    當(dāng)MySQL單表記錄數(shù)過大時(shí),采取合理的優(yōu)化策略是保障系統(tǒng)高性能的關(guān)鍵,本博客詳細(xì)介紹了索引優(yōu)化、分區(qū)表、垂直拆分、水平拆分等多種優(yōu)化手段,并提供了詳細(xì)的代碼示例,感興趣的朋友一起看看吧
    2024-01-01
  • MySQL主從復(fù)制的兩種方式詳解

    MySQL主從復(fù)制的兩種方式詳解

    主從復(fù)制是指將主數(shù)據(jù)庫(kù)的?DDL?和?DML?操作通過二進(jìn)制日志傳到從庫(kù)服務(wù)器中,然后在從庫(kù)上對(duì)這?些日志重新執(zhí)行(也叫重做),從而使得從庫(kù)和主庫(kù)的數(shù)據(jù)保持同步,本文給大家詳細(xì)介紹了MySQL主從復(fù)制的兩種方式,需要的朋友可以參考下
    2025-09-09
  • MySQL中between and的基本用法、范圍查詢示例詳解

    MySQL中between and的基本用法、范圍查詢示例詳解

    BETWEEN AND 操作符在 MySQL 中用于選擇在兩個(gè)值之間的數(shù)據(jù),包括邊界值,它支持?jǐn)?shù)值和日期類型,示例展示了如何使用 BETWEEN AND 和 NOT BETWEEN AND 進(jìn)行查詢,并特別注意日期類型查詢時(shí)的時(shí)間精度問題,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 101個(gè)MySQL優(yōu)化技巧和提示

    101個(gè)MySQL優(yōu)化技巧和提示

    人們一直在推動(dòng)MySQL發(fā)展到它的極限。這里是101條調(diào)節(jié)和優(yōu)化MySQL安裝的技巧。一些技巧是針對(duì)特定的安裝環(huán)境的,但這些思路是通用的。我已經(jīng)把他們分成幾類,來幫助你掌握更多MySQL的調(diào)節(jié)和優(yōu)化技巧。
    2014-02-02
  • MySQL數(shù)據(jù)庫(kù)查詢案例分析

    MySQL數(shù)據(jù)庫(kù)查詢案例分析

    文章系統(tǒng)講解MySQL查詢方法,涵蓋簡(jiǎn)單查詢、多表聯(lián)接(需n-1條件避免笛卡爾積)、排序、分組、子查詢(any/all關(guān)鍵字)及分頁(yè)技術(shù),結(jié)合實(shí)際案例說明不同查詢類型的使用場(chǎng)景與注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù)

    如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù)

    這篇文章主要介紹了如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

伊宁市| 安龙县| 普定县| 晋宁县| 桐庐县| 三门峡市| 兴文县| 鲁甸县| 丹阳市| 玉屏| 阳朔县| 鄱阳县| 宁明县| 富裕县| 盐津县| 额尔古纳市| 西盟| 临桂县| 旬阳县| 济宁市| 南通市| 达尔| 临桂县| 石门县| 蒙自县| 保德县| 平山县| 大荔县| 中卫市| 隆化县| 泰州市| 靖州| 乌海市| 闸北区| 托克托县| 萨嘎县| 阿拉善右旗| 新绛县| 舒城县| 桑植县| 霍州市|