Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL 7升级到MySQL 8

从MySQL 7升级到MySQL 8的避坑指南与实操指南

作者:qq_29757467

MySQL 8 作为里程碑式的版本,带来了诸多重磅特性,但从 MySQL 7升级并非一键无脑更,涉及语法、配置、权限、数据类型等多维度兼容问题,本文结合实战经验,梳理升级核心注意事项、实操步骤与常见坑点,需要的朋友可以参考下

前言

MySQL 8 作为里程碑式的版本,带来了诸多重磅特性(如窗口函数、CTE、更强的 JSON 支持、默认 UTF8MB4 编码、性能优化等),但从 MySQL 7(注:MySQL 官方无 “7” 正式版,通常指 5.7,下文统一以 5.7 代指)升级并非 “一键无脑更”,涉及语法、配置、权限、数据类型等多维度兼容问题。本文结合实战经验,梳理升级核心注意事项、实操步骤与常见坑点,帮你平稳完成升级。

一、升级前必看:核心兼容性差异

1. 默认字符集与排序规则变更

2. 认证插件与密码策略变更

3. 系统表与数据字典重构

4. SQL 模式与语法兼容性

5. 存储引擎与功能移除

二、升级实操:分步执行(推荐离线升级)

步骤 1:升级前准备

  1. 全量备份:使用mysqldump或物理备份工具(如 xtrabackup)备份整个数据库,命令示例:
# 全量备份(包含存储过程、触发器、事件)
mysqldump -uroot -p --all-databases --routines --triggers --events > mysql57_full_backup.sql
  1. 环境检查
  1. 兼容性检测:使用 MySQL 官方工具mysqlcheck或第三方工具(如 Percona Toolkit)扫描 SQL 兼容性:
# 检查单库语法兼容性
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:停止旧库,安装 MySQL 8

1.停止 MySQL 5.7 服务:

systemctl stop mysqld

2.卸载旧版本(保留数据目录):

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
# 安装服务
yum install mysql-community-server -y

步骤 3:初始化与升级数据

1.启动 MySQL 8 并强制升级数据字典:

# 启动并执行升级
mysqld --upgrade=FORCE --user=mysql &

2.检查升级日志(/var/log/mysqld.log),确认无报错:

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

3.重置 root 密码(MySQL 8 初始密码在日志中,且默认要求强密码):

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

步骤 4:验证与适配

  1. 检查数据库连接:验证业务程序、客户端工具能否正常连接;
  2. 执行核心 SQL:运行业务关键 SQL(如查询、插入、更新),检查是否有语法报错;
  3. 性能监控:观察 CPU、内存、IO 使用率,对比升级前性能,若有下降需优化配置(如调整innodb_buffer_pool_size)。

三、常见坑点与解决方案

坑点现象原因解决方案
客户端连接报错 “caching_sha2_password auth failed”客户端不支持新认证插件1. 改用户认证插件为 mysql_native_password;2. 升级客户端(如 PHP 升级到 7.4+)
GROUP BY 查询报错 “Expression #1 of SELECT list is not in GROUP BY”8.0 默认启用 ONLY_FULL_GROUP_BY1. 优化 SQL,GROUP BY 包含所有非聚合字段;2. 临时关闭该模式(不推荐)
启动报错 “unknown variable ‘query_cache_size’”8.0 移除查询缓存参数删除 my.cnf 中所有 query_cache_* 相关配置
授权报错 “ERROR 1064 (42000): You have an error in your SQL syntax”8.0 不支持 GRANT 自动创建用户先执行 CREATE USER,再执行 GRANT

四、总结

MySQL 5.7 升级到 8.0 的核心是 “先兼容检查,再分步升级,最后验证适配”

核心注意点回顾

1.兼容性核心:MySQL 8 的字符集(utf8mb4 默认)、认证插件(caching_sha2_password)、SQL 模式是最易出问题的三大点,需提前适配;

2.操作关键:升级前必须全量备份,测试环境验证是避坑的核心,禁止直接在生产环境 “裸升”;

3.适配重点:移除废弃配置(如查询缓存)、优化不规范 SQL(如 GROUP BY)、升级老旧客户端,确保连接和执行正常。

以上就是从MySQL 7升级到MySQL 8的避坑指南与实操指南的详细内容,更多关于MySQL 7升级到MySQL 8的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文