必须按顺序安装mysql-community-common→libs→client→server,漏装或错序将导致mysqld启动失败;须强制卸载mariadb-libs并清除/etc/my.cnf等残留,否则引发冲突或权限异常。

能离线装,但必须按依赖顺序装 mysql-community-common → mysql-community-libs → mysql-community-client → mysql-community-server,漏一个或顺序错,systemctl start mysqld 必然失败。
卸载 MariaDB 是强制前置动作
CentOS 7 默认预装 mariadb-libs,它和 MySQL 的 mysql-community-libs 冲突,不卸载会导致 rpm 安装时报 “file conflicts” 或启动时直接 core dump。
- 查残留:
rpm -qa | grep -i mariadb - 强制卸载:
rpm -e --nodeps mariadb-libs-5.5.* - 删配置残余:
rm -f /etc/my.cnf /etc/my.cnf.rpmsave
注意:--nodeps 不可省,否则会因依赖关系中断卸载;删 /etc/my.cnf 很关键,否则初始化时可能读到旧配置导致 datadir 权限异常。
rpm 安装必须分步且带 --force --nodeps
MySQL 5.7 的 RPM 包之间有隐式依赖,rpm -Uvh *.rpm 看似方便,但实际会跳过部分校验、覆盖错误顺序,极大概率导致 mysqld 启动后立即退出(systemctl status mysqld 显示 “failed with result ‘exit-code’”)。
- 推荐顺序执行(路径以
/opt/mysql为例):rpm -ivh --force --nodeps mysql-community-common-5.7.*.rpmrpm -ivh --force --nodeps mysql-community-libs-5.7.*.rpmrpm -ivh --force --nodeps mysql-community-client-5.7.*.rpmrpm -ivh --force --nodeps mysql-community-server-5.7.*.rpm - 别用
yum localinstall:离线环境没仓库元数据,会报 “No package available” - 安装后验证:
rpm -qa | grep mysql应至少列出这 4 个包,缺一不可
初始化前必须检查 SELinux 和目录权限
mysqld --initialize --user=mysql 表面成功,但日志里若出现 “Can’t create test file” 或 “Permission denied”,90% 是 SELinux 拦截或 datadir 所属用户不对。
- 关 SELinux(临时):
setenforce 0;永久关需改/etc/selinux/config中SELINUX=disabled - 创建并授权数据目录(如用默认
/var/lib/mysql):mkdir -p /var/lib/mysqlchown -R mysql:mysql /var/lib/mysql - 确认
mysql用户存在:id mysql,不存在则useradd -r -g mysql mysql - 初始化命令必须带
--user=mysql,否则生成的临时密码不可用,登录时提示 “Access denied for user 'root'@'localhost'”
初始化完成后,grep 'temporary password' /var/log/mysqld.log 才能拿到 root 初始密码——这个日志路径是硬编码的,改 my.cnf 里的 log-error 不影响此处输出。
启动失败最常卡在 socket 和 pid 文件路径不一致
systemctl start mysqld 报 “Job for mysqld.service failed”,看 journalctl -u mysqld -n 50 -xe 常见两类错误:
-
Can't start server: Bind on unix socket: Permission denied→ 检查/var/lib/mysql/mysql.sock所在目录是否为mysql:mysql,且父目录有 x 权限 -
Failed to start LSB: start and stop MySQL→ 多因/etc/my.cnf中pid-file和 systemd unit 文件定义冲突,建议删掉自定义my.cnf,用默认配置先跑通;确认/var/run/mysqld/存在且属主正确:mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld
真正容易被忽略的是:MySQL 5.7 的 RPM 安装默认不生成 /etc/my.cnf,首次启动会用内置 defaults;但一旦你手动建了空 my.cnf,哪怕只有一行,它就会强制加载——而空配置会导致 datadir 回退到 /var/lib/mysql,如果该路径没提前授权,初始化就静默失败。











