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。

相关推荐
传奇开心果编程39 分钟前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓3 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
supabc1233 小时前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium
Dovis(誓平步青云)4 小时前
导览音频切换太快,旧讲解不能覆盖新展品
android·前端·javascript·ecmascript·音视频·宠物
五彩小白20 小时前
自回归和上下文
android
事圆则缓1 天前
Android 多渠道打包实战:Product Flavors、签名、AAB 与发包校验
android