必须先确认冲突包:CentOS/RHEL执行rpm -qa | grep -i mariadb,Ubuntu/UOS执行dpkg -l | grep -i mariadb,重点检查mariadb-libs、libmariadb3等与mysql-community-libs硬冲突的包,再依依赖关系安全卸载并修复元数据。

查清到底是哪个包在挡路
安装失败时,错误信息里出现 file /usr/share/mysql/charsets/latin1.xml from install of mysql-community-server conflicts with file from package mariadb-libs 这类提示,说明冲突不是“没装依赖”,而是两个包试图往同一个路径写文件。关键不是看报错里写了什么,而是立刻确认系统里到底装了啥:
CentOS/RHEL 执行 rpm -qa | grep -i mariadb 和 rpm -qa | grep -i mysql;Ubuntu/UOS 执行 dpkg -l | grep -i mysql 和 dpkg -l | grep -i mariadb。重点盯 mariadb-libs、libmariadb3、mysql-common 这几个包——它们和 MySQL 官方包的 mysql-community-libs 是硬冲突,不能共存。
卸载必须一步到位,别跳过依赖检查
看到 mariadb-libs 就直接 yum remove mariadb-libs 或 apt remove libmariadb3 不够稳妥。先跑 yum deplist mariadb-libs(RHEL系)或 apt-cache rdepends --installed libmariadb3(Debian系),确认有没有关键服务(比如 postfix)真依赖它。如果只有通用工具依赖,再执行卸载;卸载后立刻跑 package-cleanup --problems(RHEL)或 apt --fix-broken install(Debian),否则 RPM 数据库或 dpkg 状态会残留“半破碎”痕迹,后续安装照样卡在 Unsatisfied dependencies。
官方源不是加了就完事,得关掉干扰源
加了 MySQL 官方 repo 但还是冲突?大概率是系统默认源还在生效。CentOS/RHEL 上用 yum repolist enabled 查当前启用的源,把 appstream、baseos 或 epel 里带 mariadb 的段落注释掉;Ubuntu/UOS 上检查 /etc/apt/sources.list.d/ 下有没有第三方 MySQL 源或 Percona 源,删掉或 # 注释。然后清缓存:yum clean all 或 apt clean && apt update,再装 mysql-community-server 或 mysql-server。
UOS 或新版系统要额外防 ABI 断裂
UOS 20/23、AlmaLinux 9、Ubuntu 22.04+ 这类系统常见 libssl.so.1.1: cannot open shared object file 或 libncurses.so.5: cannot open shared object file。这不是安装阶段报错,而是 mysqld 启动时动态链接失败。别急着 ln -s 硬链——libssl3 和 libssl1.1 ABI 不兼容,硬链可能引发崩溃。正确做法:RHEL系装 ncurses-compat-libs、openssl11-libs;Debian/UOS 系装 libncurses5、libssl1.1(若仓库有)。验证用 ldd $(which mysqld) | grep ssl,输出里必须看到 libssl.so.1.1 => /usr/lib64/libssl.so.1.1 这样的有效路径。
mysql-community-common 和 mysql-common 版本不一致,或者 systemd 单元文件路径被国产系统魔改过——这些细节不查日志、不看 systemctl status mysqld 输出,很容易反复踩坑。


















