MySQL 5.7 到 9.7.0 LTS 升级核心指南

MySQL 5.7 到 9.7.0 LTS 升级核心指南

MySQL5.7 → 9.7.0 LTS 核心须知(官方不能直接跨级原地升级,必须三段分步:5.7→8.0→8.4→9.7)

一、官方强制升级路径(重中之重)

禁止 5.7 直接 in-place 原地升级 9.7,仅两种稳妥方案:

  1. 分步原地升级(物理文件)
    5.7.44(最终版) → 8.0.46(8.0最终GA) → 8.4.9 LTS → 9.7.0 LTS
  1. 逻辑全量导出导入(最稳妥,生产推荐)
    5.7 全库 mysqldump → 新装 9.7 空实例导入,规避所有底层数据字典兼容坑

|-----------------------------|
| 生产优先逻辑迁移;单机小库、测试环境可选分步原地升级。 |

二、升级前必做前置检查(5.7 环境整改,不整改升级必报错)

1、账号密码插件(9.7 彻底删除 mysql_native_password,致命坑)

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sql -- 查出老密码插件用户 SELECT user,host,plugin FROM mysql.user WHERE plugin='mysql_native_password'; -- 全部改成caching_sha2_password(9.7唯一支持) ALTER USER '账号'@'host' IDENTIFIED WITH caching_sha2_password BY '新密码'; |

|-----------------------------------------------------|
| 老旧 JDBC5.x、PHP5、老 Navicat 连不上都是这个原因,要么改账号要么升级客户端驱动。 |

2、存储引擎整改(8.0 + 废弃 MyISAM 分区)

  1. 所有分区表不能是 MyISAM,MyISAM 分区必须删分区或转 InnoDB

|----------------------------------------------------------------------------------------------------------------------------------------|
| sql SELECT TABLE_SCHEMA,TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%partition%' AND ENGINE!='InnoDB'; |

  1. 废弃 ARCHIVE、CSV 分区,全量改成 InnoDB;系统表、业务表杜绝 MyISAM

3、SQL_MODE 兼容(5.7→8.0→9.x mode 持续删减旧模式)

  • 5.7 默认 mode 宽松,8.0 默认开启ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES等严格模式
  • 9.7 移除老旧 sql_mode(NO_AUTO_CREATE_USER 等),my.cnf 删掉废弃 mode
  • 提前在 5.7 改成新版 mode,全量跑一遍业务 SQL 排查报错。

4、视图、字段限制(9.7 硬性约束)

  • 视图别名不能超过 64 字符(5.7 允许 255),超长视图提前改名重建
  • ENUM/SET 单元素不能超 255 字符,超长字段整改

|------------------------------------------------------------------|
| sql SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS; -- 逐个检查视图定义 |

5、字符集变化

  1. 5.7utf8=utf8mb3;8.0/9.7 utf8=utf8mb4,全库统一 utf8mb4、utf8mb4_unicode_ci,避免中文 /emoji 乱码。
  1. 废弃utf8_general_ci默认排序,配置统一更换。

6、用 MySQL Shell 预检(官方升级检查工具)

|------------------------------------------------------------------------------------------------------|
| js # shell连接5.7,校验能否升级到9.7 util.checkForServerUpgrade('root@localhost:3306',{targetVersion:"9.7.0"}) |

出现 ERROR 项必须全部修复再升级,WARNING 按需整改

三、配置文件 my.cnf/my.ini 大改动(5.7 参数大量废弃)

1、彻底删除废弃参数(9.7 启动报错根源)

|----------------------------------------------------------------------------------------------------------------------------------|
| ini # 5.7废弃、8.4/9.7移除,全部删掉 query_cache_size、query_cache_type、innodb_file_format、innodb_large_prefix、skip-name-resolve、sql_mode旧值 |

2、9.7 默认参数变化

  • default_authentication_plugin=caching_sha2_password(固定,不可改回 native)
  • innodb 默认页面、缓冲池规则微调,不要照搬 5.7 全套配置,只保留必要参数。

四、两种升级实操方案

方案 A:逻辑迁移(生产首选,零底层兼容故障)

  1. 5.7 全量冷备导出(业务停机 / 只读)

|----------------------------------------------------------------------------------------------------------------------------|
| bash mysqldump -uroot -p --all-databases --routines --triggers --events --single-transaction --master-data=2 > all_57.sql |

  1. 全新安装 MySQL9.7,初始化空实例
  1. 导入 sql:mysql -uroot -p < all_57.sql
  1. 导入完成后执行:ALTER USER ...改密码插件,应用切新库。

方案 B:分步原地升级(节省空间,多轮停机)

  1. 5.7 升级至 5.7.44 最终版 → 备份全库
  1. 替换二进制升级 8.0.46,启动自动升级数据字典
  1. 8.0→8.4.9,再次校验启动
  1. 8.4→9.7.0(官方支持 8.4 原地升 9.7)

|-----------------------------|
| 每一步升级后观察业务 2~3 天无异常再升下一版本。 |

五、应用侧提前改造(上线必测)

  1. 驱动升级:JDBC 升级 8.0 + 驱动、PHP pdo_mysql 新版、Navicat15+,老驱动不支持 caching_sha2_password。
  1. SQL 语法:
  • GROUP BY 非标准写法(5.7 允许,8/9 报错 ONLY_FULL_GROUP_BY)
  • 废弃ORDER BY NULL、老旧存储过程语法
  1. 定时事件、触发器、自定义函数:升级后重新编译,9.x 校验规则更严格。

六、上线回滚预案

  1. 升级前全量物理备份(data 目录打包 + 逻辑 dump 双备份)
  1. 原地升级出错:退回旧版本二进制 + 恢复原 data 目录
  1. 逻辑导入异常:切回原 5.7 实例,回滚应用连接。

七、可选:先 8.4 过渡再上 9.7

业务老旧、改造量大:5.7→8.4 长期运行,后续择机 9.7;8.4 生命周期到 2032 年,兼容性远优于 9.7。

相关推荐
-SOLO-2 小时前
TraceFix 自动添加trace信息
android
yuananyun2 小时前
APP 图标规范与设计全攻略:iOS/Android/Web 一次设计多端合规,快速出图
android·前端·ios
sun0077003 小时前
dns命令排查解析nslookup
android
问心无愧05133 小时前
ctf show web入门99
android·前端·笔记
plainGeekDev3 小时前
Handler/Looper → Coroutines
android·java·kotlin
awu的Android笔记3 小时前
限速/丢包/乱序/重复/篡改:Android 弱网模拟的 5 把利刃
android·tcp/ip
niech_cn3 小时前
uniapp开发App(iOS、Android、鸿蒙Next)之配置pages.json 页面路由(三)
android·ios·uni-app
杊页4 小时前
系列二:MVVM 深度实战与项目重构 | 第5篇 ViewModel 核心原理与实战避坑:它是如何“死而复生”的?
android
17715574314 小时前
unity6国际版安装及android SDK ,JDK,NDK安装
android