MySQL 8.0升级MySQL 8.4 LTS需要注意什么

作者:袖梨 2026-08-17

必须验证三项硬性前置条件:操作系统版本≥CentOS 7.9/Ubuntu 18.04/Debian 10;MySQL 8.0版本≥8.0.37;XA RECOVER返回空结果。同时需将MASTER_参数全改为SOURCE_,并调整innodb_log_buffer_size默认值。

必须验证的三项硬性前置条件

跳过任意一项,升级后大概率卡在启动或连接阶段,不是配置问题,是服务根本起不来:

  1. 操作系统版本 ≥ CentOS 7.9 / Ubuntu 18.04 / Debian 10(EL6、Debian 9 及更旧系统已被 MySQL 8.4 彻底放弃)
  2. 当前 MySQL 8.0 版本 ≥ 8.0.37(低于此版本存在元数据升级 bug,最新明确不支持升级)
  3. XA RECOVER 返回空结果(若有未提交 XA 事务,mysqld 启动时会静默 hang 住,不报错也不退出)

my.cnf 配置项不改就启动失败

MySQL 8.4 不再兼容旧写法,以下几处必须手动调整,否则报错直接拒绝启动:

  1. MASTER_HOSTMASTER_USER 等所有 MASTER_* 复制参数 → 全部改为 SOURCE_*(如 SOURCE_HOST),否则报 Unknown system variable 'MASTER_HOST'
  2. innodb_log_buffer_size 默认值从 16M 提升至 64M,若服务器物理内存 16M,否则启动失败
  3. 所有 query_cache_* 相关配置必须删除(MySQL 8.4 彻底移除查询缓存模块,保留会触发启动警告并被忽略)

Error 1524 连接失败的即时修复

报错 Error 1524 (HY000): Plugin 'mysql_native_password' is not loaded,不是密码错了,是插件根本没加载:

  1. 先用 caching_sha2_password 登录:mysql -u root -p --default-auth=caching_sha2_password
  2. 执行:INSTALL PLUGIN mysql_native_password SONAME 'auth_socket.so';(注意文件名是 auth_socket.so,不是 auth_mysql_native_password.so
  3. 对业务用户逐个重置认证方式:ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'newpass';
  4. 若客户端驱动太老(如 mysql-connector-j 5.1),必须升级到 8.0+ 驱动,否则握手仍失败

最容易被忽略的驱动 Bug 和性能静默变更

这些问题不会报错,但上线后才暴露,且排查路径极绕:

  1. mysql-connector-j 8.4.0 存在最新确认 Bug #115736:ARM64 下连接初始化固定卡顿 30 秒,x86_64 Linux 普遍超 2 秒,高并发下频繁触发 SQLNonTransientConnectionException: Got an error writing communication packets —— 必须弃用,改用 8.4.1 或更高版本
  2. innodb_change_buffering 默认值从 all 改为 none,高频二级索引写入场景(如日志归档、ETL 导入)延迟毛刺变多、QPS 下降,旧配置未显式设置则实际已关闭 change buffer
  3. innodb_buffer_pool_instances 等参数默认值改为动态计算,行为不可预测,生产环境必须显式配置,不能依赖默认值
升级不是换二进制文件就完事,XA RECOVER 是否为空、innodb_log_buffer_size 是否适配内存、驱动是否踩了 Bug #115736 —— 这些点不提前验证,故障一定发生在最不该出问题的时候。

相关文章

精彩推荐