直接原地升级可行,但必须绕开三类高频故障:mysql_native_password插件缺失、caching_sha2_password认证兼容性问题、系统表升级失败;升级前硬性验证三项条件缺一不可:操作系统版本≥centos 7.9/ubuntu 18.04/debian 10、mysql 8.0版本≥8.0.37、xa recover返回空结果。

直接原地升级可行,但必须绕开三类高频故障:mysql_native_password插件缺失、caching_sha2_password认证兼容性问题、系统表升级失败。跳过任意一项验证,大概率卡在启动或连接阶段。
升级前必须硬性验证的三项条件
缺一不可,否则后续会静默失败:
- 操作系统版本 ≥ CentOS 7.9 / Ubuntu 18.04 / Debian 10(MySQL 8.4 已停止对 EL6/Debian 9 及更旧系统的支持)
- 当前 MySQL 8.0 版本 ≥
8.0.37(低于此版本存在已知元数据升级 bug,官方明确不支持升级) -
XA RECOVER返回空结果(如有未提交 XA 事务,mysqld启动时会 hang 住且不报错)
my.cnf 配置必须手动调整的几处
MySQL 8.4 不再兼容旧写法,不改就启动失败:
-
MASTER_HOST、MASTER_USER等所有MASTER_*复制参数必须改为SOURCE_HOST、SOURCE_USER等,否则报错Unknown system variable 'MASTER_HOST' -
innodb_log_buffer_size默认值从16M提升至64M,若物理内存不足 4GB,需显式设回16M,否则启动失败 - 所有
query_cache_*相关配置必须移除(MySQL 8.4 彻底移除了查询缓存模块,保留会触发启动警告并忽略)
连接失败 Error 1524 的即时修复
报错 Error 1524 (HY000): Plugin 'mysql_native_password' is not loaded 不是配置问题,是插件未启用:
- 先用
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,漏掉这些隐性依赖点:
- 检查
performance_schema表结构是否完成自动升级:SELECT COUNT(*) FROM performance_schema.replication_connection_status;(8.4 新增字段,若报错说明升级未完成) - 确认二进制日志格式仍是
ROW:SHOW VARIABLES LIKE 'binlog_format';(8.4 默认为ROW,但旧配置可能残留MIXED或STATEMENT) - 验证
parallel_query是否生效:EXPLAIN ANALYZE SELECT COUNT(*) FROM huge_table;,看Extra字段是否出现Using parallel scan (N workers)
最常被低估的是 XA RECOVER 检查和 performance_schema 表升级验证——这两项不报错、不中断启动,但会导致后续复制异常或监控失效,问题往往延后暴露。











