RPM升级MySQL失败主因是文件冲突、服务未停、补丁未生效及认证协议不兼容;需校验修改文件、停服升级、运行mysql_upgrade、检查权限与版本、调整认证插件。
rpm -Uvh 升级时提示 conflicts with file from package
这是最常见的阻塞点:旧包里某个文件(比如 /etc/my.cnf 或 /usr/bin/mysqld)被手动修改过,新 rpm 认为它“不该被覆盖”,直接拒绝升级。
根本原因不是权限或路径错,而是 rpm 的文件校验机制默认保护配置和可执行文件不被静默替换。
实操建议:
• 先用 rpm -V mysql-community-server 查哪些文件被改过(输出里带 c 标记的是配置文件,5 表示 md5 变了)
• 如果是 /etc/my.cnf 这类配置,备份后删掉,让新包安装默认版;后续再把自定义项 merge 进去
• 临时绕过冲突(仅限测试环境):加 --force --nodeps,但 --force 不解决文件内容冲突,必须配合 --replacefiles
• 生产环境别硬上 --replacefiles,先确认目标文件是否真可丢弃——比如 /var/lib/mysql 绝对不能被 RPM 覆盖
数据库服务没停,rpm 升级后 systemctl start mysqld 失败
RPM 升级本身不自动重启服务,更不会做 schema 兼容检查。MySQL 5.7 升 8.0 后首次启动失败,十有八九是 mysql_upgrade 没跑,或者 datadir 权限被重置。
实操建议:
• 升级前必须 systemctl stop mysqld,RPM 安装过程不感知服务状态
• 安装完不要直接 start,先运行 mysqld --upgrade(8.0.16+)或 mysql_upgrade(老版本),否则 InnoDB 系统表可能不兼容
• 检查 /var/lib/mysql 所属用户是否还是 mysql:mysql,RPM 有时会重置为 root:root,导致启动报 Can't open the mysql.plugin table
• 日志看 /var/log/mysqld.log,重点搜 error 和 critical,别只盯 Failed to start
自动化脚本里用 yum update mysql-community-server 升级,结果跳过了补丁包
YUM 默认只升到仓库里 latest 版本,但安全补丁(如 mysql-community-server-8.0.33-1.el7)可能被标记为 obsoletes 或放在独立 repo(比如 mysql-tools),yum update 不拉取。
实操建议:
• 显式指定包名和版本:yum update mysql-community-server-8.0.33-1.el7,避免依赖解析走偏
• 检查 repo 是否启用补丁源:yum repolist enabled | grep mysql,确认 mysql-community-updates 或对应 minor repo 已开
• 在脚本里加校验:升级后跑 rpm -q mysql-community-server,比对输出是否匹配预期版本字符串
• 避免用 yum upgrade,它可能连内核都一起升,运维脚本要精准控制范围
升级后应用连不上,错误是 Client does not support authentication protocol requested by server
MySQL 8.0 默认用 caching_sha2_password 插件,而老客户端(尤其是 Java 8u251 前、PHP 7.2 前)只认 mysql_native_password。这不是连接池配置问题,是认证协议不兼容。
实操建议:
• 临时兼容:登录 MySQL 后执行 ALTER USER 'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';
• 长期方案:升级客户端驱动,Java 用 mysql-connector-java:8.0.33+,Python 用 mysqlclient>=2.1.0
• 不要改全局 default_authentication_plugin,会影响新用户创建逻辑
• 测试时用 mysql -u xxx -p --default-auth=mysql_native_password 快速验证是否协议导致
补丁升级最麻烦的从来不是 RPM 命令本身,而是数据库状态的连续性——datadir 权限、配置文件变更、认证插件、schema 兼容这四点,任何一个卡住,自动化就变成半夜告警。脚本里多加两行 rpm -V 和 mysql --version 校验,比事后翻日志快十分钟。










