必须先停止并彻底卸载 mariadb/mysql 服务及残留文件(含 /var/lib/mysql、/etc/my.cnf、日志等),再安装 mysql 5.7 yum 源并禁用 mysql80-community,最后通过 systemctl start mysqld 初始化、提取临时密码登录并强制修改 root 密码。

确认并停止现有 MariaDB/MySQL 服务
CentOS 7 默认可能预装 mariadb-libs,它会与 MySQL 的 mysql-community-libs 冲突,导致 yum install mysql-community-server 失败或启动报错。必须先停掉、卸载、清理干净。
- 检查运行中服务:
systemctl status mysqld和systemctl status mariadb;若任一为 active,先执行systemctl stop mysqld或systemctl stop mariadb - 强制卸载所有 MariaDB 包(不加
--nodeps可能失败):rpm -e --nodeps mariadb-libs - 验证是否残留:
rpm -qa | grep -i 'mysql\|mariadb'—— 输出应为空
彻底清除残留文件与配置
仅卸载 RPM 包远远不够。MySQL 5.7 安装后会生成数据目录、日志、socket 文件、临时密码记录等,若不清除,重装时 mysqld 服务无法初始化,或启动后反复报 Can't start server: Bind on TCP/IP port / Table 'mysql.plugin' doesn't exist 等错误。
- 删数据目录:
rm -rf /var/lib/mysql(这是最常被忽略的一步) - 删配置文件:
rm -f /etc/my.cnf /etc/my.cnf.d/* - 删日志和 socket:
rm -f /var/log/mysqld.log /var/run/mysqld/mysqld.sock* - 删用户痕迹:
rm -f /root/.mysql_secret - 查漏补缺:
whereis mysql和find / -name mysql 2>/dev/null,对输出中的/usr/bin/mysql、/usr/share/mysql等路径也执行rm -rf
安装 MySQL 5.7 Yum 源并启用正确子仓库
官方 mysql57-community-release 包默认同时启用了 MySQL 5.7 和 8.0 的仓库。若未显式禁用 8.0,yum install mysql-community-server 可能拉取到 MySQL 8.0 的包(尤其在较新镜像源上),导致版本不符或初始化失败。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 下载并安装源包(注意 el7 版本匹配):
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm && rpm -ivh mysql57-community-release-el7-11.noarch.rpm - 确认仓库状态:
yum repolist all | grep mysql - 禁用 MySQL 8.0,只启用 5.7:
yum-config-manager --disable mysql80-community && yum-config-manager --enable mysql57-community - 如遇 GPG 验证失败(常见于内网或旧系统),临时加
--nogpgcheck:yum install -y mysql-community-server --nogpgcheck
初始化、登录与密码设置的关键顺序
MySQL 5.7 启动后会自动生成临时 root 密码,但这个过程依赖干净的 /var/lib/mysql 和正确权限。跳过初始化或乱改配置极易卡在登录环节。
- 首次启动:
systemctl start mysqld(不是restart);成功后立即查日志:grep 'temporary password' /var/log/mysqld.log - 用临时密码登录:
mysql -u root -p,粘贴日志里那串带大小写+符号的密码(输时不显示) - 必须先改密码再做其他操作,否则报
ERROR 1820 (HY000): You must reset your password using ALTER USER statement:ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPass123!'; - 若要设简单密码(如
123456),需先调低策略:SET GLOBAL validate_password_policy=LOW;和SET GLOBAL validate_password_length=6;
最关键的遗漏点是:很多人删了 /var/lib/mysql 却忘了删 /var/log/mysqld.log,结果重启 mysqld 后仍读到旧日志里的临时密码,而新初始化根本没生成密码,导致死循环。务必清空日志再启动。










