全部
常见问题
产品动态
精选推荐
功能建议

分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
MySQL5.7如何升级 MySQL 8.0

管理 管理 编辑 删除

「MySQL 5.7 → MySQL 8.0」生产级升级指南,按 宝塔 / Linux 常见环境来写,可直接照做,同时我会把 坑点、是否必须升级、回滚方案一次讲清楚。

重要结论先说:MySQL 8.0 不是平滑升级,一定要 完整备份 + 验证兼容性尤其是 老项目(如 CRMEB / 老 Java / PHP 框架)

一、升级前必须确认的 6 件事(非常重要)

是否真的需要升级?

建议升级到 8.0 的情况

  • 数据量大(> 500W 行)
  • 并发高、慢 SQL 多
  • 需要:窗口函数CTE(WITH)更好的 JSON更强索引 / 优化器

暂不建议升级

  • 老项目 + 老 SQL(大量 0000-00-00)
  • 使用 GROUP BY 非全字段
  • 使用旧 JDBC / PDO 版本

确认 MySQL 5.7 版本

SELECT VERSION();

要求:

>= 5.7.9   (你的 5.7.44 ✔)

检查字符集

SHOW VARIABLES LIKE 'character_set_server';

MySQL 8.0 默认 utf8mb4_0900_ai_ci
老系统可能是:

utf8 / utf8_general_ci

建议升级前统一为 utf8mb4

检查 sql_mode(升级最大坑)

SELECT @@sql_mode;

8.0 默认是:

STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,...

常见爆雷 SQL:

SELECT id, name FROM user GROUP BY id;

升级前必须改 SQL 或关闭 ONLY_FULL_GROUP_BY

检查保留关键字(8.0 新增很多)

重点字段名:

rank
system
window
groups
recursive

检查:

SELECT TABLE_NAME,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('rank','system','window');


完整备份(必须)

mysqldump \
  --all-databases \
  --single-transaction \
  --routines \
  --events \
  --triggers \
  > /backup/mysql57_full.sql


二、升级方案选择(强烈推荐方案 A)

方案说明推荐
A直接升级(原数据目录)❌ 不推荐
B全量导出 → 安装 8.0 → 导入推荐
C新服务器迁移⭐⭐⭐⭐⭐

宝塔 / 生产环境:一定选 B 或 C

三、方案 B:5.7 → 8.0 标准升级步骤(推荐)

Step 1:停止 MySQL 5.7

service mysqld stop
# 或
systemctl stop mysqld


Step 2:卸载 MySQL 5.7(不删数据)

rpm -qa | grep mysql
yum remove mysql-community-server

不要删 /var/lib/mysql

Step 3:安装 MySQL 8.0

CentOS / Rocky

yum install mysql-community-server-8.0*

Ubuntu

apt install mysql-server-8.0


Step 4:修改 MySQL 8.0 配置(关键)

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

# 兼容 5.7(非常关键)
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

default_authentication_plugin=mysql_native_password

 不加最后一行,老 PHP / Java 客户端会连不上


Step 5:启动 MySQL 8.0

systemctl start mysqld


Step 6:执行升级检查

mysql_upgrade -uroot -p

8.0.16+ 会自动执行,但建议手动跑一次


Step 7:导入数据

mysql -uroot -p < /backup/mysql57_full.sql


四、升级后必做检查清单

查看错误日志

/var/log/mysqld.log

重点看:

  • deprecated
  • sql_mode
  • auth_plugin


检查用户登录方式

SELECT user,host,plugin FROM mysql.user;

如果是:

caching_sha2_password

老客户端需要改:

ALTER USER 'user'@'%' 
IDENTIFIED WITH mysql_native_password BY 'password';


检查慢 SQL

SET GLOBAL slow_query_log=ON;


是否可以回滚?(一定要知道)

可以回滚,前提:

  • 你保留了:原 MySQL 5.7原数据目录完整 SQL 备份

8.0 启动过的数据目录不能再给 5.7 用


七、宝塔用户特别说明

宝塔面板:

软件商店 → MySQL → 升级版本(不推荐)

推荐做法

  • 新装 MySQL 8.0
  • 手动导入


{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

小码二开 最后编辑于2025-12-16 10:25:15

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
36
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服