直接卸载mariadb-libs会失败,因postfix等包显式依赖它;需先查依赖(rpm -q --whatrequires mariadb-libs)、停服务(systemctl is-active mariadb mysqld)、清理残留配置与数据目录,再安全卸载。

直接卸载 mariadb-libs 通常会失败,不是因为命令写错了,而是系统里有其他包(比如 postfix)显式依赖它。硬删不清理残留,后续 mysqld 启动会卡在“Job for mysqld.service failed”这种无意义错误里。
怎么确认到底哪个包在挡路
别只看报错里写的冲突文件路径,先查清楚系统里实际装了什么:
- CentOS/RHEL:运行
rpm -qa | grep -i mariadb和rpm -qa | grep -i mysql,重点盯mariadb-libs、libmariadb3、mysql-common - Ubuntu/UOS:运行
dpkg -l | grep -i mariadb和dpkg -l | grep -i mysql,注意状态是否为ii(已安装) - 如果报错含
file /usr/share/mysql/charsets/latin1.xml from install of mysql-community-server conflicts with file from package mariadb-libs,说明是硬路径冲突,不是缺依赖
卸载前必须验证的三件事
加 --nodeps 不是万能钥匙,漏掉下面任何一项都可能让邮件发不出、CLI 工具崩溃或 MySQL 启动失败:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 查依赖链:
rpm -q --whatrequires mariadb-libs(RHEL)或apt-cache rdepends --installed libmariadb3(Debian),确认postfix等是否真靠它连数据库(多数只是声明依赖,实际不调用) - 停服务:
systemctl is-active mariadb mysqld,输出必须是inactive才安全 - 关干扰源:检查
yum repolist enabled或/etc/apt/sources.list.d/,把epel、appstream或第三方 MySQL 源注释掉,再yum clean all或apt clean && apt update
真正干净的卸载和初始化步骤
单条 rpm -e --nodeps 只清了包,但 /var/lib/mysql、/etc/my.cnf、socket 文件、用户组全留着,MySQL 初始化时会复用或权限报错:
- 停服务:
systemctl stop mariadb 2>/dev/null || true - 批量卸载:
rpm -qa | grep -E '^(mariadb|mysql)' | xargs -r rpm -e --nodeps - 删残留:
rm -rf /etc/my.cnf /etc/my.cnf.d /var/lib/mysql /var/log/mysqld.log - 删用户组(可选但推荐):
userdel -f mysql; groupdel mysql 2>/dev/null - 补硬依赖(CentOS 7/8 常漏):
yum install -y libaio perl-Data-Dumper numactl openssl11-libs ncurses-compat-libs;Ubuntu/UOS 装libssl1.1 libncurses5
UOS/AlmaLinux 9/Ubuntu 22.04+ 启动就报 libssl.so.1.1 找不到
这不是安装阶段出错,是 mysqld 启动时动态链接失败。别急着 ln -s 硬链——libssl3 和 libssl1.1 ABI 不兼容,强行链接可能导致进程崩溃:
- RHEL 系:装
openssl11-libs和ncurses-compat-libs,别用openssl主包 - Debian/UOS 系:优先从官方源装
libssl1.1和libncurses5;若仓库没提供,得换兼容源,不能靠软链蒙混 - 验证方式:
ldd $(which mysqld) | grep ssl,输出应指向libssl.so.1.1,而不是报not found
最常被跳过的其实是清理 /etc/my.cnf.d/ 和 /var/lib/mysql ——这两个目录哪怕空着,MySQL 初始化也会拒绝覆盖,报错信息却只说“Can’t initialize databases”,根本不会提配置路径冲突。动手前先 ls -la /etc/my.cnf* 看一眼,比重装十遍都管用。

















