Centos7下的MySQL部署

发布于:2025-06-11 ⋅ 阅读:(37) ⋅ 点赞:(0)

一、引言:CentOS 7 部署 MySQL 面临的独特挑战

在云计算和容器化技术盛行的今天,CentOS 7 依然是许多企业生产环境的选择。然而,随着 CentOS 官方停止维护,其软件源更新滞后、安全漏洞修复不及时等问题日益凸显。尤其是在部署 MySQL 8.0 时,用户往往会遇到镜像源失效、GPG 签名验证失败等棘手问题。本文将结合实际操作场景,详细阐述如何在 CentOS 7 上成功部署 MySQL 8.0,并深入解析镜像源替换、DNS 配置、GPG 验证等核心难点的解决方案。

二、环境准备:基础配置与网络优化

2.1 CentOS 7 系统初始化

2.1.1 检查系统版本

bash

cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.9.2009 (Core)

2.1.2 关闭防火墙与 SELinux(测试环境适用)

bash

# 停止防火墙服务
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭 SELinux
setenforce 0
# 永久关闭(修改配置文件)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2.2 镜像源替换:从官方源到国内镜像

2.2.1 CentOS 7 官方源失效问题

由于 CentOS 7 已停止维护,默认的 baseupdates 等官方源可能无法访问,导致 yum 命令报错:

plaintext

Cannot find a valid baseurl for repo: base/7/x86_64
2.2.2 切换至阿里云镜像源
步骤 1:备份原镜像源文件

bash

mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
步骤 2:下载阿里云 CentOS 7 镜像源配置

bash

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
步骤 3:清除缓存并重建元数据

bash

yum clean all
yum makecache
2.2.3 验证镜像源有效性

bash

yum repolist
# 预期输出:显示阿里云镜像源的仓库列表

2.3 DNS 配置优化:解决网络解析问题

2.3.1 DNS 服务器设置背景

若服务器默认 DNS 解析缓慢或无法访问外部镜像源(如 MySQL 官方仓库),需手动配置公共 DNS 服务器,例如:

  • Google DNS:8.8.8.8
  • 阿里云 DNS:223.5.5.5
2.3.2 修改网络配置文件

bash

vim /etc/sysconfig/network-scripts/ifcfg-eth0  # 根据实际网卡名称修改

在文件中添加以下内容:

ini

DNS1=8.8.8.8
DNS2=223.5.5.5
2.3.3 重启网络服务使配置生效

bash

systemctl restart network

三、MySQL 8.0 安装前的核心准备:源配置与 GPG 验证

3.1 安装 MySQL Yum 源

3.1.1 下载 MySQL 官方 Yum 源配置包

bash

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
3.1.2 安装配置包

bash

rpm -ivh mysql80-community-release-el7-3.noarch.rpm

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

3.2 解析 GPG 验证机制

3.2.1 GPG 验证的作用

GPG(GNU Privacy Guard)用于验证软件包的完整性和来源合法性,防止恶意篡改。MySQL 8.0.41 及以上版本使用新的 RPM-GPG-KEY-mysql-2022 密钥,旧密钥(如 RPM-GPG-KEY-mysql)无法验证新版本软件包。

3.2.2 查看默认 GPG 密钥配置

bash

vim /etc/yum.repos.d/mysql-community.repo

默认配置中 gpgkey 指向旧密钥:

ini

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

四、核心难点突破:GPG 签名验证失败解决方案

4.1 错误现象分析

在执行 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

4.2 方案一:修改 GPG Key 指向新密钥

4.2.1 下载并导入新密钥

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
4.2.2 使用 Vim 修改 Yum 源配置

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
4.2.3 验证密钥导入结果

bash

gpg --list-keys | grep mysql
# 预期输出:显示新密钥的指纹和用户信息

4.3 方案二:忽略 GPG 验证(终极解决方案)

4.3.1 安全风险提示

忽略 GPG 验证会绕过软件包签名检查,可能导致安装被篡改的恶意软件,仅限测试环境使用

4.3.2 临时忽略单个软件包验证

bash

yum install --nogpgcheck mysql-community-server
4.3.3 全局忽略 GPG 验证(不推荐)

修改 /etc/yum.conf 文件,添加:

ini

gpgcheck=0

注意:此操作会禁用所有软件包的 GPG 验证,存在严重安全隐患。

五、MySQL 8.0 安装与初始化配置

5.1 执行安装命令

bash

yum install -y mysql-community-server

安装过程中需确认依赖关系,等待软件包下载并安装完成。

5.2 启动 MySQL 服务

bash

# 启动服务
systemctl start mysqld
# 查看服务状态
systemctl status mysqld
# 设置开机自启
systemctl enable mysqld

5.3 获取临时密码

MySQL 8.0 首次启动时会生成随机临时密码,存储在日志文件中:

bash

grep 'temporary password' /var/log/mysqld.log
# 输出示例:A temporary password is generated for root@localhost: S9pNthwkJd:X

5.4 登录并修改密码

5.4.1 使用临时密码登录

bash

mysql -u root -p
# 输入临时密码(注意保留冒号)
5.4.2 修改 root 密码

sql

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

密码策略说明

  • MySQL 8.0 默认启用密码复杂度检查(validate_password 插件),密码需包含至少 8 个字符、大小写字母、数字和特殊符号。

六、高级配置与安全加固

6.1 允许远程登录

6.1.1 修改权限表

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;
6.1.2 修改 MySQL 配置文件

bash

vim /etc/mysql/mysql.conf.d/mysqld.cnf

注释掉 bind-address = 127.0.0.1 以允许所有 IP 访问(生产环境需谨慎)。

6.2 安全配置向导

运行官方提供的安全脚本:

bash

mysql_secure_installation

依次完成以下设置:

  1. 输入当前 root 密码
  2. 是否移除匿名用户(建议移除)
  3. 是否禁止 root 远程登录(建议启用)
  4. 是否移除测试数据库(建议移除)
  5. 刷新权限表

6.3 配置文件优化

6.3.1 调整字符集

修改 /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
6.3.2 优化连接数

ini

[mysqld]
max_connections = 1000
table_open_cache = 2048
innodb_buffer_pool_size = 4G  # 根据服务器内存调整

七、故障排查与常见问题解决

7.1 镜像源失效问题

现象:yum 命令无法下载软件包
  • 解决方案:切换至其他国内镜像源(如清华大学镜像源),确保 baseurl 路径正确。

7.2 GPG 验证失败

现象:重复提示密钥不匹配
  • 解决方案
    1. 确认密钥文件路径正确(RPM-GPG-KEY-mysql-2022
    2. 清除 Yum 缓存并重新导入密钥
    3. 检查系统时间是否正确(避免证书过期)

7.3 服务无法启动

现象:systemctl start mysqld 报错
  • 常见原因
    • 端口冲突(检查 3306 端口是否被占用)
    • 数据目录权限错误(默认 /var/lib/mysql 需属主为 mysql 用户)
  • 解决命令

    bash

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

网站公告

今日签到

点亮在社区的每一天
去签到