mysql 8.0升级至8.4必须硬性验证三项条件:xa recover返回空结果、当前版本≥8.0.37、操作系统≥centos 7.9/ubuntu 18.04/debian 10,缺一不可;同时需将master_参数全改为source_,并调整innodb_log_buffer_size默认值。

mysql_native_password 插件缺失、caching_sha2_password 认证不兼容、系统表升级失败——这三类问题占 MySQL 8.0 → 8.4 升级故障的 90% 以上。跳过任一校验,大概率卡在启动或连接阶段。
升级前必须硬性验证的三项条件
缺一不可,否则后续操作全是徒劳:
-
XA RECOVER返回空结果:若有未提交 XA 事务,mysqld启动时会静默 hang 住,不报错也不响应 - 当前 MySQL 版本 ≥
8.0.37:低于此版本存在元数据升级 bug,官方明确拒绝支持升级路径 - 操作系统版本 ≥
CentOS 7.9/Ubuntu 18.04/Debian 10:MySQL 8.4 已彻底放弃对 EL6、Debian 9 及更旧系统的支持
my.cnf 中必须手动调整的配置项
MySQL 8.4 启动时会直接报错退出,不是警告,是硬性拒绝:
- 所有
MASTER_*复制参数(如MASTER_HOST、MASTER_USER)必须改为SOURCE_*(如SOURCE_HOST、SOURCE_USER),否则报错Unknown system variable 'MASTER_HOST' -
innodb_log_buffer_size默认值从 16M 提升至 64M;若物理内存 16M,否则启动失败 - 所有
query_cache_*配置必须删除:模块已彻底移除,保留会导致启动警告并被忽略,但可能掩盖真实错误
连接报错 Error 1524 (HY000): Plugin 'mysql_native_password' is not loaded 的修复步骤
这不是配置写错,是插件根本没加载。老客户端连不上,核心原因是 MySQL 8.4 默认不加载该插件:
- 先用
caching_sha2_password方式登录:mysql -u root -p --default-auth=caching_sha2_password - 执行:
INSTALL PLUGIN mysql_native_password SONAME 'auth_socket.so';(注意文件名是auth_socket.so,不是auth_mysql_native_password.so) - 对每个业务用户重置认证方式:
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'newpass'; - 检查客户端驱动:MySQL Connector/J 5.1 等旧驱动无法完成握手,必须升级到 8.0+ 版本
升级后最容易被跳过的验证点
只测 SELECT 和 INSERT 不够,这些隐性依赖点一旦漏检,上线后可能突然失效:
-
SELECT COUNT(*) FROM performance_schema.replication_connection_status;:8.4 新增字段,若报错说明系统表升级未完成 -
SHOW VARIABLES LIKE 'binlog_format';:确认仍是ROW,避免复制链路异常 - 检查
information_schema.INNODB_METRICS是否可查:部分监控脚本强依赖该视图,8.4 中字段结构有微调
XA RECOVER 没清、my.cnf 里残留 query_cache_type=1、或者忘了改 MASTER_HOST。这些地方不显眼,但一出错就停机。











