MySQL 8.0的安装如果走官方Yum仓库,能自动处理大部分依赖,但很多人卡在GPG密钥校验这一步。CentOS 7默认没有MySQL的仓库信息,需要手动添加源并导入公钥,系统才会信任从repo.mysql.com下载的RPM包。下面以最小化CentOS 7环境为例,说明从清理旧包、配置官方源、安装启动到安全初始化的完整操作。

一、卸载旧版MySQL与MariaDB残留
CentOS 7基础仓库提供的是MariaDB 5.5,如果之前安装过mariadb-server或者带有mysql名字的包,直接启用MySQL 8.0源会出现文件冲突。尤其是mariadb-libs包会提供libmysqlclient.so库文件,而mysql-community-libs也包含同名文件,yum在事务检查阶段就会报错。
可以先通过rpm查询本机已安装的相关包,命令如下:
rpm -qa | grep -Ei 'mysql|mariadb'
如果输出中有mariadb-libs、mysql-community-*等条目,需要停止服务并卸载。卸载时可以加--nodeps绕过依赖检查,但生产环境要确认没有其他程序依赖旧库。一般来说CentOS 7最小化安装只用作数据库服务器时,执行下面的清理步骤不会影响系统核心组件。
systemctl stop mysqld 2>/dev/null || true systemctl stop mariadb 2>/dev/null || true yum remove -y mysql mysql-server mariadb mariadb-server mariadb-libs rm -rf /var/lib/mysql rm -f /etc/my.cnf.rpmsave
这里把错误输出重定向到/dev/null并使用|| true,是为了保证停止服务失败时脚本仍能继续执行。删除/var/lib/mysql会清除旧数据,如果确实需要保留请提前备份。清理后再执行rpm -qa | grep -Ei 'mysql|mariadb',结果应为空。
二、添加MySQL官方Yum源并导入GPG公钥
MySQL官方提供了专门针对Yum系统的仓库配置包,用于CentOS 7的文件名是mysql80-community-release-el7-3.noarch.rpm。安装这个包不会立刻安装MySQL服务,只会向/etc/yum.repos.d目录写入mysql-community.repo和mysql-community-source.repo,同时把GPG公钥放到/etc/pki/rpm-gpg/目录中。
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
如果下载速度慢,可以先通过浏览器或curl下载rpm文件,再在本地执行rpm -Uvh。仓库文件默认启用mysql80-community,而mysql-connectors-community和mysql-tools-community也会同时配置,只是版本选择都依托于mysql-community-common。
接下来导入公钥。虽然安装仓库配置包时通常已经包含key,但部分环境下yum仍然会报GPG key retrieval failed,所以手动执行rpm --import是最稳妥的做法。下面命令会一次性导入/etc/pki/rpm-gpg目录下所有以RPM-GPG-KEY-mysql开头的文件,包括基础签名和滚动更新签名。
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql*
导入完成后可执行rpm -qa gpg-pubkey*查看系统已信任的GPG公钥列表,确认MySQL相关公钥已经出现在列表中。这样再执行yum install时,RPM包签名就能通过校验。
三、安装MySQL 8.0并启动服务
源配置完成后先执行yum clean all和yum makecache刷新仓库元数据,否则可能命中旧的缓存。接着安装mysql-community-server,这个包会作为主入口把server、client、common、libs等依赖一起装上。如果遇到GPG校验失败,优先确认公钥导入是否成功以及repo文件中的gpgkey路径是否拼写正确。
yum clean all yum makecache yum install -y mysql-community-server
安装完成后使用systemctl启动MySQL服务。第一次启动时MySQL会做数据目录初始化,包括生成root临时密码。启动命令如下:
systemctl start mysqld systemctl enable mysqld systemctl status mysqld
如果start没有报错,status显示active (running),则说明服务已经跑起来了。临时密码写在/var/log/mysqld.log中,用grep查找temporary password这一行即可。
grep 'temporary password' /var/log/mysqld.log
拿到的临时密码通常包含大小写字母和符号,首次登录必须修改密码才能执行其他SQL。如果日志里没有输出,可能是MySQL安装时没有生成随机密码,可以尝试使用mysql -u root --skip-password登录,不过8.0默认都会生成。
四、安全初始化与登录验证
用临时密码登录MySQL后,系统会强制要求先执行ALTER USER修改密码,否则执行任何SQL都会报错:Your password does not satisfy the current policy requirements。执行mysql_secure_installation脚本可以完成修改密码、移除匿名用户、禁止root远程登录等操作,适合不熟悉SQL的新手。
mysql_secure_installation
如果希望手动修改,登录后执行下面SQL。密码必须满足默认的validate_password策略:至少8位,包含大小写、数字和特殊字符。测试阶段可以把密码设置得复杂一些,比如NewPassw0rd!。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassw0rd!';
修改完成后退出并用新密码重新登录,能正常执行SELECT VERSION();说明MySQL 8.0安装成功。整个过程的重点在于第二步的GPG公钥导入和仓库文件配置,只要公钥信任关系建立,后面的安装步骤与普通yum包没有区别。

