资讯 yum update 偷偷把你的 MySQL 主版本换成 9.7?mysql-community.repo 的 Bug #120315

2026-09-01 21:02:46

升级前先冷静:yum update 居然会偷偷把你的 MySQL 主版本换掉

事故现场

2026-04-21,MySQL 9.7.0 LTS 发布。按官方口径,9.7 属于 LTS 序列,比 9.5/9.6 这种短期版本更值得生产环境关注。

但真正让运维人捏把汗的,不是版本号,而是 Peter Zaitsev(Percona 创始人)在发布后立刻点名的一个坑:

常规 yum/dnf update 会把服务器所遵循的主版本切到 9.7。

不是你在 yum install mysql-server-9.7,也不是你在 my.cnf 里改了版本配置,而是包管理器静默帮你换了主版本

这是最反直觉的地方:你只是做了日常安全更新,结果升级完成后 MySQL 主版本可能已经不是 8.4 LTS 了。

根因:mysql-community.repo 包更新踩中了 Bug #120315

MySQL 官方仓库通过 mysql-community.repo 这个 RPM 包来管理各个 Yum 源的定义。正常情况下:

  • 8.4 LTS 仓库是默认启用的;
  • 9.7 LTS 仓库是默认禁用的。

但在 9.7.0 发布后,mysql-community.repo 包更新里出现了一个错误,编号 MySQL Bug #120315。该错误的影响是:

  • 静默禁用 8.4 LTS 仓库
  • 自动启用 9.7 LTS 仓库

也就是说,当你执行:

yum update

或:

dnf update

如果这个 repo 包本身也被一起更新了,那么 MySQL 的 Yum 仓库指向会事后变成“只有 9.7 LTS 可用、8.4 LTS 不可用”。此时再执行任何安装/升级 MySQL 相关包的操作,依赖解析就会把你拉到 9.7 这条主版本线上。

坑就坑在“静默”两个字上:update 过程不会提示你“主版本已切换”,也不会弹 warning,只有更新完重启 MySQL 后,你才发现跑的是 9.7 全家桶。

认证方式迁移:9.7 已经移除 mysql_native_password

主版本被切到 9.7,另一个连带伤害就是认证插件兼容性。

  • 9.7.0 起,mysql_native_password 认证插件已彻底移除
  • 旧的客户端如果只支持 mysql_native_password,且不具备 CLIENT_PLUGIN_AUTH 能力,将无法连接 9.7 服务器。
  • 8.4.9 LTS 中,mysql_native_password 仍然是默认禁用的,但可以通过参数 mysql_native_password=ON 手动开启。

言外之意:8.4 至少给了你一个过渡期;9.7 则没有退路。

官方路径:8.0 → 8.4 LTS → 9.7 LTS

官方推荐的升级路径是:

8.0.x → 8.4.9 LTS → 9.7.0 LTS

不建议从 8.0 直接跳 9.7。原因在于:

  • 主版本跨越过大,认证方式、默认参数、数据字典行为都可能出现兼容问题;
  • 8.4 作为过渡版本,可以提前验证认证插件迁移是否完成;
  • 如果直接跳 9.7,mysql_native_password 用户连登录的机会都没有,必须先处理账号的认证插件。

换句话说,9.7 不是不能上,而是要先过 8.4 这一关做“兼容性验证 + 认证方式迁移”,而不是让 repo 包 Bug 帮你做决定。

运维建议:升级前先核对 repo 状态

以下所有命令均在升级执行前做,且建议单独执行 yum update mysql-community.repo 后再次核验。

1. 查看当前 repo 指向

cat /etc/yum.repos.d/mysql-community.repo

重点关注:

  • mysql-8.4-lts-communityenabled 是否为 1
  • mysql-9.7-lts-communityenabled 是否为 0

如果发现 8.4 LTS 被禁用、9.7 LTS 被启用,这就是 Bug #120315 的典型表现。

2. 用 dnf repolist / yum repolist 核对

dnf repolist --all | grep mysql

或:

yum repolist --all | grep mysql

正常情况下,8.4 LTS 仓库标记为 enabled,9.7 LTS 仓库标记为 disabled

3. 临时固定版本

如果暂时不想上 9.7,可以用包管理器锁定 MySQL 服务包版本:

dnf versionlock add mysql-server* mysql-community-server*

或直接在 repo 文件中强制固定 8.4 LTS:

[mysql-8.4-lts-community]
enabled=1

[mysql-9.7-lts-community]
enabled=0

固定后再次 dnf update mysql-server 时应停留在 8.4.9 LTS 版本。

建议:每次做通用 yum update 前后,都把上面三步重跑一遍。这不是例行公事——在 Bug #120315 存在的阶段,仓库状态可能随时被 repo 包更新篡改。

小结

事项结论
触发场景常规 yum/dnf update 更新 mysql-community.repo
错误编号MySQL Bug #120315
影响行为静默禁用 8.4 LTS 仓库、自动启用 9.7 LTS 仓库
直接后果MySQL 主版本被切到 9.7(LTS)
最大风险9.7 已移除 mysql_native_password,旧客户端无法连接
8.4.9默认禁用,可手动 mysql_native_password=ON
官方路径8.0.x → 8.4.9 LTS → 9.7.0 LTS
升级前检查dnf repolist / yum repolist 核对 enabled 状态
临时固定versionlock 或修改 repo 的 enabled 标志

包的 Bug 可以修,但被 repo 静默拉高主版本这件事,不是靠自觉就能避免的——每次跑 update 前多看一眼 repolist 输出,成本比回滚低得多。

复制全文 生成海报 MySQL 运维 yum 安全

推荐文章

程序员茄子在线接单