mysql官方yum源安装的是8.0.x lts版且默认未启用密码强度插件,导致mysql_secure_installation失败;需先添加官方repo、启用mysql80-community、禁用mysql57-community,再安装mysql-community-server,并注意selinux权限及临时密码获取。

MySQL 官方 yum 源装出来的不是最新版,而是当前稳定 LTS 版(比如 8.0.x),且默认不启用 MySQL 8.0 的密码强度插件——这会直接导致你用 mysql_secure_installation 初始化失败或连不上。
为什么不能直接 yum install mysql
CentOS/RHEL 自带的 mysql 包实际是 MariaDB,和 Oracle MySQL 完全无关。执行 yum install mysql 装出来的不是 MySQL Server,而是客户端工具,mysqld 进程根本不存在。
- 真正要装的是
mysql-community-server,它依赖官方 yum 源 - 系统自带源里没有这个包,必须先加 MySQL 官方 repo
- 某些云厂商镜像(如阿里云 EPEL)会覆盖官方 repo 配置,导致
yum repolist看不到mysql80-community
怎么加官方 yum 源才不翻车
官网下载的 mysql80-community-release RPM 包,本质只是写几个 .repo 文件到 /etc/yum.repos.d/,但容易被已有配置干扰。
- 先清理残留:
sudo rm -f /etc/yum.repos.d/mysql*.repo - 再下载安装(以 EL8 为例):
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm - 确认启用的是 8.0:
sudo yum-config-manager --enable mysql80-community(有些系统默认只开 5.7) - 禁用旧版本源,避免冲突:
sudo yum-config-manager --disable mysql57-community
装完启动不了?大概率是 SELinux 或 datadir 权限问题
systemctl start mysqld 报 Job for mysqld.service failed,日志里出现 Can't open the mysql.plugin table 或 Permission denied,基本就是初始化失败或路径权限不对。
- 首次启动后,MySQL 会自动生成临时密码,存在
/var/log/mysqld.log里,用sudo grep 'temporary password' /var/log/mysqld.log找 - 如果
/var/lib/mysql是手动改过属主,必须是mysql:mysql,否则服务拒绝启动 - SELinux 启用时,
mysqld默认不能读写非标准路径(比如挂载在/data/mysql),要么关 SELinux(setenforce 0),要么打策略:sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"+sudo restorecon -Rv /data/mysql
初始化安全配置前记得关密码强度插件
mysql_secure_installation 在 MySQL 8.0.4+ 默认启用 validate_password 插件,而新装实例还没加载该插件,就会卡在“Set password for root”并报错 ERROR 1193 (HY000): Unknown system variable 'validate_password_length'。
- 启动前临时关闭:在
/etc/my.cnf的[mysqld]下加一行validate_password=OFF - 或者启动后再进库手动关:
SET GLOBAL validate_password.policy = LOW;(需先用临时密码登录) - 插件名是
validate_password,不是validate_password_plugin,后者是配置项名,别混淆
最常被跳过的其实是 mysql_secure_installation 运行前没检查 mysqld 是否真在运行、也没确认 socket 路径是否匹配——/var/run/mysqld/mysqld.sock 和 /tmp/mysql.sock 常因配置不一致导致连接被拒。











