当前位置:首页 > 技术 > 正文内容

CentOS 7 环境下手动部署 MySQL 8.0 完整指南

访客 技术 2026年5月25日 3

一、背景与挑战

尽管容器化技术已经普及,CentOS 7 在传统企业机房中依然占据重要地位。然而,由于 CentOS 7 已进入生命周期终止(EOL)状态,官方软件源逐渐失效,直接通过 yum 安装 MySQL 8.0 会遇到镜像源不可用、GPG 密钥验证失败等问题。本文将从系统初始化开始,逐步解决这些痛点,完成 MySQL 8.0 的完整部署。

二、基础环境配置

2.1 检查系统版本

确认操作系统为 CentOS 7.x 系列:

cat /etc/redhat-release

示例输出:CentOS Linux release 7.9.2009 (Core)

2.2 关闭防火墙与 SELinux(仅测试环境)

为避免网络限制导致安装失败,临时关闭系统安全模块:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2.3 更换为国内镜像源

官方源已废弃,必须使用可用的镜像源:

# 备份原配置
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

# 下载阿里云源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清理并重建缓存
yum clean all
yum makecache

2.4 配置 DNS 解析

如果服务器无法解析外部域名(如 repo.mysql.com),需手动指定 DNS:

# 修改网卡配置文件,根据实际接口名调整
echo -e "DNS1=223.5.5.5\nDNS2=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network

三、MySQL 8.0 软件源部署

3.1 下载并安装 MySQL 官方 Yum 仓库包

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm

安装后在 /etc/yum.repos.d/ 下生成 mysql-community.repo 文件。

3.2 理解 GPG 验证机制

MySQL 8.0.41 以上版本使用更新后的 GPG 密钥 RPM-GPG-KEY-mysql-2022,而默认配置指向旧密钥 RPM-GPG-KEY-mysql,导致验证失败。

四、修复 GPG 签名验证失败

4.1 错误现象

执行安装命令时出现如下错误:

源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。

4.2 方案一:更新密钥指向

下载并导入新密钥,同时修改 yum 源配置:

# 下载新密钥到系统密钥目录
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

# 修改 repo 文件中的 gpgkey 路径
sed -i 's|RPM-GPG-KEY-mysql|RPM-GPG-KEY-mysql-2022|g' /etc/yum.repos.d/mysql-community.repo

验证导入结果:

gpg --list-keys | grep mysql

4.3 方案二:强制跳过 GPG 检查(仅开发环境)

临时或全局禁用 GPG 验证:

# 安装时跳过检查
yum install --nogpgcheck mysql-community-server

# 或修改全局配置(不推荐)
echo "gpgcheck=0" >> /etc/yum.conf

五、安装与初始化 MySQL 8.0

5.1 执行安装

yum install -y mysql-community-server

5.2 启动服务并设置自启

systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

5.3 获取初始临时密码

MySQL 8.0 首次启动时会自动生成随机 root 密码:

grep 'temporary password' /var/log/mysqld.log

输出示例:A temporary password is generated for root@localhost: XyZ!abc123

5.4 修改 root 密码

使用临时密码登录:

mysql -u root -p

执行 SQL 修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass_2024!';
FLUSH PRIVILEGES;

注意:密码必须符合复杂度要求(大小写、数字、特殊字符,长度≥8)。

六、安全与性能调优

6.1 允许远程连接

创建可远程登录的 root 用户:

CREATE USER 'root'@'%' IDENTIFIED BY 'NewStrongPass_2024!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

修改配置文件(/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf):

# 注释或修改 bind-address
# bind-address = 127.0.0.1

重启服务:systemctl restart mysqld

6.2 运行安全加固脚本

mysql_secure_installation

根据提示完成:移除匿名用户、禁止 root 远程登录、删除测试库、刷新权限。

6.3 字符集与连接数优化

[mysqld] 段添加:

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 500
innodb_buffer_pool_size = 2G

客户端配置:

[client]
default-character-set = utf8mb4

七、常见故障排查

7.1 Yum 源无法下载

如果使用阿里云源仍失败,尝试清华大学源:

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/centos/7/CentOS-Base.repo

7.2 GPG 密钥持续报错

  • 确认系统时间正确(date 命令)
  • 清除缓存:yum clean all
  • 重新导入密钥

7.3 服务无法启动

检查端口占用与数据目录权限:

netstat -tunlp | grep 3306
chown -R mysql:mysql /var/lib/mysql

查看详细错误:journalctl -u mysqld

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。