离线安装 MySQL 5.7 必须严格按顺序安装 mysql-community-common、libs、client、server 四个 RPM 包,先卸载冲突的 mariadb-libs,清理旧配置,手动创建并授权 /var/lib/mysql,再初始化数据库,最后用临时密码登录并强制修改 root 密码。

离线安装 MySQL 5.7 必须用 rpm -ivh 按严格顺序装 4 个核心包,漏一个或顺序错,systemctl start mysqld 就会静默失败——日志里只有一行 Failed at step EXEC spawning /usr/sbin/mysqld。
检查并清理系统自带的 mariadb-libs
CentOS/Rocky/AlmaLinux 7/8 默认带 mariadb-libs,它和 MySQL 的 mysql-community-libs 冲突,不卸载会导致后续 rpm 安装报依赖错误或服务启动后立即退出。
- 查:运行
rpm -qa | grep mariadb,通常返回类似mariadb-libs-5.5.68-1.el7.x86_64 - 卸:执行
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64(--nodeps必须加,否则因依赖中断) - 删残留配置:
rm -f /etc/my.cnf /etc/my.cnf.rpmsave,否则初始化时可能读到旧配置导致权限或路径错误
按顺序安装 mysql-community-common → libs → client → server
MySQL 官方把 RPM 拆得很细,mysql-community-server 依赖前三个包提供的字符集定义、认证插件、客户端二进制等。混装不同版本或跳过 mysql-community-libs-compat(某些版本需要)也会让 mysqld 启动失败。
- 先确认架构:
uname -m输出x86_64就下.x86_64.rpm,输出aarch64就下对应 aarch64 包 - 必须顺序执行(以 5.7.44 为例):
rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpmrpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm - 不要用
rpm -Uvh *.rpm或yum localinstall *.rpm—— 依赖解析顺序不可控,容易触发mysqld找不到libmysqlclient.so等问题
手动创建 /var/lib/mysql 并初始化数据库
离线安装不会自动建数据目录,也不会运行初始化命令。systemctl start mysqld 表面成功,实际卡在 “waiting for server to start”,journalctl -u mysqld -n 50 里反复出现 Can't create/write to file '/var/lib/mysql/is_writable'。
- 建目录:
mkdir -p /var/lib/mysql - 赋权:
chown -R mysql:mysql /var/lib/mysql - SELinux 用户注意:
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?",再restorecon -Rv /var/lib/mysql - 初始化:
mysqld --initialize --user=mysql,临时密码输出在/var/log/mysqld.log,用grep 'temporary password' /var/log/mysqld.log提取
首次登录后必须立刻改 root 密码
MySQL 5.7+ 默认启用 validate_password 插件,且离线安装不跳过校验。用临时密码登录后,任何操作(包括 SHOW DATABASES;)都会被拒绝,提示 Your password has expired 或 ERROR 1820 (HY000): You must reset your password using ALTER USER statement。
- 登录:
mysql -uroot -p,粘贴临时密码 - 立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123!';(密码需含大小写字母+数字+特殊符号,长度 ≥ 8) - 别用
SET PASSWORD或老式UPDATE mysql.user—— 5.7.6+ 已废弃,会报错ERROR 1396 (HY000): Operation ALTER USER failed
最容易被忽略的是 mysql-community-libs-compat 包的存在性:某些 5.7.x 版本(如 5.7.25、5.7.42)要求它提供兼容旧版客户端的符号链接,缺了会导致 mysql 命令报 error while loading shared libraries: libmysqlclient.so.18;遇到就补装它,别硬扛。


















