在存在mariadb预装或模块化限制(如龙蜥8.8)的场景下,二进制包安装mysql 8.0是唯一可靠路径——它绕过rpm数据库、彻底规避libmysqlclient.so.21等文件冲突;需先卸载mariadb包、安装libaio/numactl、清空/var/lib/mysql,再创建mysql用户、设权限、初始化数据目录、注册systemd服务。

在存在 MariaDB 预装、系统包管理器被模块化限制(如龙蜥 8.8)、或 yum install mysql-community-server 直接报“所有匹配结果均已被模块化过滤条件筛除”的场景下,用二进制包安装 MySQL 8.0 是唯一可靠路径——它不碰 rpm 数据库,彻底绕开 libmysqlclient.so.21 等路径冲突。
为什么 rpm/yum 安装会卡在“文件冲突”或“包不可见”?
核心是两个硬性冲突:
-
mysql-community-libs和系统自带的mariadb-libs争夺/usr/lib64/libmysqlclient.so.21,rpm强制拒绝覆盖 - 部分发行版(如龙蜥 8.8、CentOS Stream)启用了 dnf module,默认把
mysql模块设为disabled,yum install根本查不到包,连错误都不报
这时候不是配置问题,是包管理器机制本身堵死了路。
解压前必须清理的三件事
不清理就解压,90% 启动失败,且错误日志指向模糊:
- 卸载所有 mariadb 包:
rpm -qa | grep mariadb | xargs rpm -e --nodeps,重点确认mariadb-libs已消失(rpm -q mariadb-libs返回空) - 装运行时依赖:
yum install -y libaio numactl(CentOS/RHEL)或apt-get install -y libaio1 libnuma1(Ubuntu/Debian),二进制包不带这些 - 清空旧数据目录:
rm -rf /var/lib/mysql,不要手动重建;初始化时由mysqld --initialize自动创建并设权限
解压后最关键的四步配置
二进制包本质是“绿色版”,缺一步,systemctl start mysqld 就静默失败:
- 创建专用用户:
useradd -r -s /bin/false mysql(不能用root,也不能用普通用户) - 设目录权限:
chown -R mysql:mysql /usr/local/mysql(假设解压路径为/usr/local/mysql) - 初始化数据目录:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data,初始密码在命令输出末尾,含特殊字符,复制时别带换行或空格 - 注册 systemd 服务:CentOS 7 用
cp support-files/mysql.server /etc/init.d/mysqld && chkconfig --add mysqld;CentOS 8+/龙蜥用cp官方support-files/systemd/mysql@.service到/etc/systemd/system/mysqld.service,再systemctl daemon-reload
启动失败时优先检查的三个地方
别急着重装,先看这三项:
-
journalctl -u mysqld -n 50 -xe输出里出现Permission denied→ 90% 是/usr/local/mysql/data所属用户不是mysql,或my.cnf里basedir/datadir路径写错(注意路径结尾别多斜杠) - 能连上但报
ERROR 1045 (28000): Access denied→ 初始密码没复制全,或粘贴时带了不可见字符(建议用cat查看初始化日志文件,而非直接复制终端输出) -
mysqld进程起来又立刻退出 → 检查my.cnf是否有语法错误(比如漏掉等号、引号不配对),用/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --validate-config验证
路径、权限、密码、配置校验,这四个点串起来就是全部关键链。漏掉任何一个,都卡在“看起来配置完了,但就是起不来”。











