MySQL 8.0升级至MySQL 8.4 LTS注意事项

作者:技术拾光时间:2026-08-18 08:55:14浏览:278

升级 MySQL 8.0 到 MySQL 8.4 LTS 之前,需要先确认几项硬性前提:操作系统版本至少为 CentOS 7.9、Ubuntu 18.04 或 Debian 10;当前 MySQL 8.0 版本不能低于 8.0.37;执行 XA RECOVER 时返回结果必须为空。此外,还需要将所有

升级 MySQL 8.0 到 MySQL 8.4 LTS 之前,需要先确认几项硬性前提:操作系统版本至少为 CentOS 7.9、Ubuntu 18.04 或 Debian 10;当前 MySQL 8.0 版本不能低于 8.0.37;执行 XA RECOVER 时返回结果必须为空。此外,还需要将所有 MASTER_ 参数统一替换为 SOURCE_,并同步调整 innodb_log_buffer_size 的默认值。

MySQL 8.0升级至MySQL 8.4 LTS注意事项

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

如果跳过其中任意一项,升级完成后很可能会卡在启动或连接阶段,这并非普通配置错误,而是服务本身无法正常启动:

  • 操作系统版本需满足 CentOS 7.9、Ubuntu 18.04 或 Debian 10 及以上,EL6、Debian 9 以及更早版本已不再受 MySQL 8.4 支持。
  • 当前 MySQL 8.0 版本需不低于 8.0.37,低于该版本存在元数据升级 bug,已被明确列为不支持升级。
  • 执行 XA RECOVER 后必须返回空结果;如果存在未提交的 XA 事务,mysqld 在启动时可能会静默挂起,不报错也不退出。

my.cnf 配置项不调整可能导致启动失败

MySQL 8.4 已不再兼容部分旧配置写法,以下内容必须手动修改,否则会直接报错并拒绝启动:

  • 将 MASTER_HOST、MASTER_USER 等所有 MASTER_* 复制参数全部改为 SOURCE_*,例如改为 SOURCE_HOST,否则会报 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 及以上版本,否则握手仍可能失败。

容易被忽视的驱动问题与性能默认变更

以下问题通常不会立即报错,但很容易在上线后才暴露,并且排查过程较为复杂:

  • mysql-connector-j 8.4.0 已确认存在 Bug #115736:在 ARM64 环境下连接初始化会固定卡顿 30 秒,在 x86_64 Linux 上普遍超过 2 秒,高并发场景下还可能频繁触发 SQLNonTransientConnectionException: Got an error writing communication packets。应避免使用该版本,改用 8.4.1 或更高版本。
  • innodb_change_buffering 默认值已从 all 调整为 none。在高频二级索引写入场景中,例如日志归档或 ETL 导入,延迟波动可能增多,QPS 也可能下降。如果旧配置中未显式设置,该功能实际上已经关闭。
  • innodb_buffer_pool_instances 等参数的默认值已改为动态计算,实际行为不再固定,因此生产环境中应显式配置,避免依赖默认值。

MySQL 8.0 升级到 MySQL 8.4 LTS 并不只是替换二进制文件。升级前必须确认 XA RECOVER 返回是否为空、innodb_log_buffer_size 是否与内存规格匹配,以及驱动是否命中 Bug #115736。若这些关键点未提前验证,故障往往会在最不希望出现问题的阶段暴露。