在云计算和容器化技术盛行的今天,CentOS 7 依然是许多企业生产环境的选择。然而,随着 CentOS 官方停止维护,其软件源更新滞后、安全漏洞修复不及时等问题日益凸显。尤其是在部署 MySQL 8.0 时,用户往往会遇到镜像源失效、GPG 签名验证失败等棘手问题。本文将结合实际操作场景,详细阐述如何在 CentOS 7 上成功部署 MySQL 8.0,并深入解析镜像源替换、DNS 配置、GPG 验证等核心难点的解决方案。
bash
cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.9.2009 (Core)
bash
# 停止防火墙服务
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭 SELinux
setenforce 0
# 永久关闭(修改配置文件)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
由于 CentOS 7 已停止维护,默认的 base
、updates
等官方源可能无法访问,导致 yum
命令报错:
plaintext
Cannot find a valid baseurl for repo: base/7/x86_64
bash
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
bash
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
bash
yum clean all
yum makecache
bash
yum repolist
# 预期输出:显示阿里云镜像源的仓库列表
若服务器默认 DNS 解析缓慢或无法访问外部镜像源(如 MySQL 官方仓库),需手动配置公共 DNS 服务器,例如:
bash
vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 根据实际网卡名称修改
在文件中添加以下内容:
ini
DNS1=8.8.8.8
DNS2=223.5.5.5
bash
systemctl restart network
bash
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
bash
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
安装后会在 /etc/yum.repos.d/
目录生成 mysql-community.repo
文件。
GPG(GNU Privacy Guard)用于验证软件包的完整性和来源合法性,防止恶意篡改。MySQL 8.0.41 及以上版本使用新的 RPM-GPG-KEY-mysql-2022
密钥,旧密钥(如 RPM-GPG-KEY-mysql
)无法验证新版本软件包。
bash
vim /etc/yum.repos.d/mysql-community.repo
默认配置中 gpgkey
指向旧密钥:
ini
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
在执行 yum install mysql-community-server
时,常见错误如下:
plaintext
警告:/var/cache/yum/.../mysql-community-libs-8.0.42-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID a8d3785c: NOKEY
源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
原因:默认使用旧密钥 RPM-GPG-KEY-mysql
,而软件包需要新密钥 RPM-GPG-KEY-mysql-2022
。
bash
wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
bash
vim /etc/yum.repos.d/mysql-community.repo
将所有仓库中的 gpgkey
路径修改为新密钥:
ini
[mysql80-community]
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
[mysql57-community]
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
bash
gpg --list-keys | grep mysql
# 预期输出:显示新密钥的指纹和用户信息
忽略 GPG 验证会绕过软件包签名检查,可能导致安装被篡改的恶意软件,仅限测试环境使用。
bash
yum install --nogpgcheck mysql-community-server
修改 /etc/yum.conf
文件,添加:
ini
gpgcheck=0
注意:此操作会禁用所有软件包的 GPG 验证,存在严重安全隐患。
bash
yum install -y mysql-community-server
安装过程中需确认依赖关系,等待软件包下载并安装完成。
bash
# 启动服务
systemctl start mysqld
# 查看服务状态
systemctl status mysqld
# 设置开机自启
systemctl enable mysqld
MySQL 8.0 首次启动时会生成随机临时密码,存储在日志文件中:
bash
grep 'temporary password' /var/log/mysqld.log
# 输出示例:A temporary password is generated for root@localhost: S9pNthwkJd:X
bash
mysql -u root -p
# 输入临时密码(注意保留冒号)
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassword123!';
FLUSH PRIVILEGES;
EXIT;
密码策略说明:
validate_password
插件),密码需包含至少 8 个字符、大小写字母、数字和特殊符号。sql
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!';
CREATE USER 'root'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
bash
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉 bind-address = 127.0.0.1
以允许所有 IP 访问(生产环境需谨慎)。
运行官方提供的安全脚本:
bash
mysql_secure_installation
依次完成以下设置:
- 输入当前 root 密码
- 是否移除匿名用户(建议移除)
- 是否禁止 root 远程登录(建议启用)
- 是否移除测试数据库(建议移除)
- 刷新权限表
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
,添加:
ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
ini
[mysqld]
max_connections = 1000
table_open_cache = 2048
innodb_buffer_pool_size = 4G # 根据服务器内存调整
yum
命令无法下载软件包baseurl
路径正确。RPM-GPG-KEY-mysql-2022
)systemctl start mysqld
报错/var/lib/mysql
需属主为 mysql
用户)bash
netstat -tunlp | grep 3306
chown -R mysql:mysql /var/lib/mysql