【MySQL】CentOS 7 环境下 MySQL 5.7 完整安装与配置

目录

前言

一、环境检查与冲突服务清理

[1.1 检查系统版本](#1.1 检查系统版本)

[1.2 检查是否存在 MariaDB / 旧版 MySQL 服务](#1.2 检查是否存在 MariaDB / 旧版 MySQL 服务)

[1.3 停止冲突服务](#1.3 停止冲突服务)

[1.4 检查已安装的安装包](#1.4 检查已安装的安装包)

[1.5 彻底卸载冲突安装包](#1.5 彻底卸载冲突安装包)

[二、获取并安装 MySQL 官方 YUM 源](#二、获取并安装 MySQL 官方 YUM 源)

[2.1 下载 MySQL 5.7 对应 YUM 源 RPM 包](#2.1 下载 MySQL 5.7 对应 YUM 源 RPM 包)

[2.2 安装 MySQL YUM 源](#2.2 安装 MySQL YUM 源)

[2.3 验证 YUM 源安装结果](#2.3 验证 YUM 源安装结果)

[2.4 测试 YUM 源是否正常工作](#2.4 测试 YUM 源是否正常工作)

[三、正式安装 MySQL 5.7 服务](#三、正式安装 MySQL 5.7 服务)

[3.1 执行安装命令](#3.1 执行安装命令)

[3.2 安装报错:GPG 密钥过期解决方案](#3.2 安装报错:GPG 密钥过期解决方案)

[四、MySQL 核心文件与目录说明](#四、MySQL 核心文件与目录说明)

[五、启动 MySQL 服务并验证运行状态](#五、启动 MySQL 服务并验证运行状态)

[5.1 启动 MySQL 服务](#5.1 启动 MySQL 服务)

[5.2 验证服务是否启动成功](#5.2 验证服务是否启动成功)

[方式 1:查看进程](#方式 1:查看进程)

[方式 2:查看服务状态(推荐)](#方式 2:查看服务状态(推荐))

[六、root 用户登录与密码初始化](#六、root 用户登录与密码初始化)

方式一:临时密码登录(官方推荐,正常安装首选)

[步骤 1:获取临时 root 密码](#步骤 1:获取临时 root 密码)

[步骤 2:使用临时密码登录 MySQL](#步骤 2:使用临时密码登录 MySQL)

[步骤 3:修改密码策略(新手可选)](#步骤 3:修改密码策略(新手可选))

[步骤 4:修改 root 用户密码](#步骤 4:修改 root 用户密码)

方式二:空密码直接登录(部分新版本适配)

[方式三:跳过权限表重置密码(忘记密码 / 前两种方式失败时使用)](#方式三:跳过权限表重置密码(忘记密码 / 前两种方式失败时使用))

[步骤 1:修改 MySQL 配置文件](#步骤 1:修改 MySQL 配置文件)

[步骤 2:重启 MySQL 服务](#步骤 2:重启 MySQL 服务)

[步骤 3:免密登录 MySQL](#步骤 3:免密登录 MySQL)

[步骤 4:重置 root 密码](#步骤 4:重置 root 密码)

[步骤 5:恢复配置并重启服务](#步骤 5:恢复配置并重启服务)

七、配置开机自启动

[八、my.cnf 核心配置优化(新手友好版)](#八、my.cnf 核心配置优化(新手友好版))

[8.1 编辑配置文件](#8.1 编辑配置文件)

[8.2 完整基础配置参考](#8.2 完整基础配置参考)

[8.3 重启服务使配置生效](#8.3 重启服务使配置生效)

九、常见问题与避坑指南

[问题 1:MySQL 已配置 utf8 编码,但无法输入中文 / 中文乱码](#问题 1:MySQL 已配置 utf8 编码,但无法输入中文 / 中文乱码)

排查步骤:

[问题 2:MySQL 服务启动失败](#问题 2:MySQL 服务启动失败)

常见原因与解决方案:

[问题 3:远程工具无法连接 MySQL](#问题 3:远程工具无法连接 MySQL)

常见原因与解决方案:


前言

CentOS 7 系统默认预装了 MariaDB 数据库,其与 MySQL 存在端口、依赖文件、服务进程的冲突,直接安装 MySQL 会出现大量异常问题。本文将从零开始带大家完成 CentOS 7 环境下 MySQL 5.7 的完整安装、配置、密码初始化与常见问题排查。

【前置说明】

  1. 本文所有操作建议全程切换为 root 用户 执行,避免普通用户 sudo 权限不足导致的操作失败,执行 su - 即可切换为 root 用户;
  2. 本文适配 CentOS 7 全版本、MySQL 5.7 系列,其他版本可参考核心流程,需注意源的兼容性;
  3. 若服务器已有 MySQL 数据,操作前请务必备份数据库文件,全新安装可忽略备份步骤。

一、环境检查与冲突服务清理

1.1 检查系统版本

先确认当前 CentOS 系统版本,确保后续安装的 MySQL 源与系统版本匹配:

cpp 复制代码
cat /etc/redhat-release
# 示例输出:CentOS Linux release 7.8.2003 (Core)

1.2 检查是否存在 MariaDB / 旧版 MySQL 服务

CentOS 7 会默认启动 MariaDB 服务,需先确认进程是否存在:

bash 复制代码
ps ajx | grep mariadb
ps ajx | grep mysqld

若输出中包含 /usr/libexec/mysqld 相关的运行进程,说明 MariaDB 服务正在运行,需先停止。

1.3 停止冲突服务

执行以下命令停止 MariaDB 服务,避免卸载时出现资源占用:

bash 复制代码
systemctl stop mariadb.service

执行完成后,可再次执行 ps ajx | grep mariadb 验证,仅剩下 grep 检索进程即说明停止成功。

1.4 检查已安装的安装包

通过 rpm 命令检索系统中已安装的 MariaDB、MySQL 相关安装包:

bash 复制代码
# 检索mariadb安装包
rpm -qa | grep mariadb
# 检索mysql安装包
rpm -qa | grep mysql

执行后会输出所有匹配的安装包,例如:

bash 复制代码
mariadb-libs-5.5.68-1.el7.x86_64
mariadb-server-5.5.68-1.el7.x86_64
mysql-community-common-5.7.41-1.el7.x86_64

1.5 彻底卸载冲突安装包

执行以下命令卸载所有检索到的安装包,避免后续安装出现依赖冲突:

bash 复制代码
# 批量卸载mariadb相关包
yum remove -y mariadb*
# 批量卸载旧版mysql相关包(若有)
yum remove -y mysql-community*

【重要备份提示】若服务器有历史 MySQL 数据,卸载前请先备份核心文件:

  • 配置文件:/etc/my.cnf
  • 数据目录:/var/lib/mysql

二、获取并安装 MySQL 官方 YUM 源

使用官方 YUM 源安装的优势在于:安装便捷、依赖自动补齐、后续版本更新 / 卸载方便,是官方推荐的安装方式。

2.1 下载 MySQL 5.7 对应 YUM 源 RPM 包

MySQL 官方源地址:http://repo.mysql.com/ ,我们选择适配 CentOS 7 的 mysql57 版本源,

方法1:执行以下命令直接下载:

复制代码
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

若服务器无 wget 命令,先执行 yum install -y wget 安装即可。
方法2:复制官方源地址:http://repo.mysql.com/到浏览器,去下载对应版本的安装包,再导入到对应机器中

2.2 安装 MySQL YUM 源

执行 rpm 命令安装下载好的 RPM 包,将 MySQL 官方源添加到系统 YUM 源中:

复制代码
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

2.3 验证 YUM 源安装结果

安装完成后,查看系统 YUM 源目录,确认已生成 MySQL 相关的 repo 配置文件:

复制代码
ls /etc/yum.repos.d/ -al

若输出中包含以下两个文件,说明源安装成功:

复制代码
mysql-community.repo
mysql-community-source.repo

2.4 测试 YUM 源是否正常工作

执行以下命令检索 MySQL 相关安装包,验证源是否生效:

复制代码
yum list | grep mysql

若能检索到 mysql-community-server 等相关安装包,说明源配置正常,可进行后续安装。

三、正式安装 MySQL 5.7 服务

3.1 执行安装命令

核心安装命令如下,yum 会自动安装 MySQL 服务端、客户端及所有依赖包:

复制代码
yum install -y mysql-community-server

安装过程中,系统会自动按顺序安装以下核心组件:

  1. mysql-community-common:MySQL 公共模块
  2. mysql-community-libs:MySQL 核心依赖库
  3. mysql-community-client:MySQL 客户端工具
  4. mysql-community-server:MySQL 服务端核心程序

3.2 安装报错:GPG 密钥过期解决方案

若安装过程中出现以下密钥过期报错:

复制代码
Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

这是因为 MySQL 官方更新了 GPG 密钥,执行以下命令导入新密钥后,重新执行安装命令即可:

复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

四、MySQL 核心文件与目录说明

安装完成后,先了解 MySQL 的核心配置文件与目录,避免后续配置出错:

文件 / 目录路径 核心作用
/etc/my.cnf MySQL 主配置文件,服务端、客户端的核心配置均在此修改
/var/lib/mysql MySQL 数据存储目录,所有数据库表数据、日志均存放在此
/var/log/mysqld.log MySQL 运行日志文件,临时密码、报错信息均会记录在此
/var/run/mysqld/mysqld.pid MySQL 服务进程 pid 文件,记录服务运行的进程号
/var/lib/mysql/mysql.sock MySQL 本地套接字文件,用于本地客户端与服务端通信

可直接执行以下命令验证配置文件是否存在:

复制代码
ls /etc/my.cnf

五、启动 MySQL 服务并验证运行状态

5.1 启动 MySQL 服务

执行 systemctl 命令启动 MySQL 服务:

复制代码
systemctl start mysqld.service

5.2 验证服务是否启动成功

方式 1:查看进程
复制代码
ps axj | grep mysqld

若输出中包含 /usr/sbin/mysqld 相关的运行进程,说明服务启动成功。

方式 2:查看服务状态(推荐)
复制代码
systemctl status mysqld.service

若输出中显示 active (running),说明服务正常运行;若显示 failed,可查看 /var/log/mysqld.log 日志排查报错原因。

六、root 用户登录与密码初始化

MySQL 5.7 安装完成后,会为 root@localhost 用户生成一个临时随机密码,我们需要通过临时密码登录并修改为自定义密码,以下提供 3 种登录方式,按优先级选择即可。

方式一:临时密码登录(官方推荐,正常安装首选)

步骤 1:获取临时 root 密码

临时密码会记录在 MySQL 日志文件中,执行以下命令检索:

复制代码
grep 'temporary password' /var/log/mysqld.log

示例输出如下,其中 yLMalT:v+5l* 就是临时密码:

复制代码
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for root@localhost: yLMalT:v+5l*
步骤 2:使用临时密码登录 MySQL

执行以下命令登录,回车后输入上面检索到的临时密码(输入时密码不显示,输完直接回车即可):

复制代码
mysql -uroot -p

出现 mysql> 提示符,说明登录成功。

步骤 3:修改密码策略(新手可选)

MySQL 5.7 默认开启了密码强度校验策略,要求密码必须包含大小写字母、数字、特殊符号,且长度不低于 8 位。若仅为本地测试学习,可先调低策略,方便设置简单密码:

sql 复制代码
-- 关闭密码强度校验,0=LOW,仅校验长度
set global validate_password_policy=0;
-- 设置密码最小长度为1位
set global validate_password_length=1;
步骤 4:修改 root 用户密码

执行以下 SQL 语句修改自定义密码,将 你的自定义密码 替换为实际密码:

sql 复制代码
-- 修改本地root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的自定义密码';
-- 刷新权限,使配置立即生效
FLUSH PRIVILEGES;

修改完成后,执行 exit 退出 MySQL,即可使用新密码重新登录。

方式二:空密码直接登录(部分新版本适配)

部分新版 MySQL 5.7 安装后不会生成临时密码,root 用户默认空密码,可直接执行以下命令登录:

bash 复制代码
mysql -uroot

登录成功后,按方式一的步骤 4 修改自定义密码即可。

方式三:跳过权限表重置密码(忘记密码 / 前两种方式失败时使用)

若前两种方式均无法登录,可通过跳过权限表的方式免密登录,重置 root 密码,步骤如下:

步骤 1:修改 MySQL 配置文件

编辑 /etc/my.cnf 主配置文件:

复制代码
vim /etc/my.cnf

[mysqld] 配置段的最后一行,添加以下配置,保存并退出:

复制代码
skip-grant-tables

该配置的作用是让 MySQL 启动时跳过权限校验,允许免密登录。

步骤 2:重启 MySQL 服务
复制代码
systemctl restart mysqld
步骤 3:免密登录 MySQL
复制代码
mysql -uroot

出现 mysql> 提示符即登录成功。

步骤 4:重置 root 密码

执行以下 SQL 语句重置密码,注意替换为你的自定义密码:

sql 复制代码
-- 切换到mysql系统库
use mysql;
-- 重置root用户密码
update user set authentication_string=password('你的自定义密码') where user='root' and host='localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
exit;
步骤 5:恢复配置并重启服务

编辑 /etc/my.cnf 文件,删除之前添加的 skip-grant-tables 配置,保存退出后重启 MySQL 服务:

复制代码
systemctl restart mysqld

此时即可使用新设置的密码正常登录 MySQL。

【安全警告】skip-grant-tables 配置存在极大安全风险,密码重置完成后必须立即删除该配置并重启服务,严禁生产环境长期开启该配置。

七、配置开机自启动

为了避免服务器重启后 MySQL 服务无法自动启动,建议配置开机自启动,执行以下命令即可:

复制代码
# 开启MySQL开机自启动
systemctl enable mysqld
# 重载系统服务配置
systemctl daemon-reload

执行完成后,可执行 systemctl is-enabled mysqld 验证,输出 enabled 说明配置成功。

八、my.cnf 核心配置优化(新手友好版)

安装完成后,建议对 MySQL 配置文件进行基础优化,重点解决中文乱码问题,适配业务基础需求。

8.1 编辑配置文件

复制代码
vim /etc/my.cnf

8.2 完整基础配置参考

以下为适配 CentOS 7 + MySQL 5.7 的基础优化配置,可直接替换原有内容,也可按需补充:

bash 复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

# 客户端配置
[mysql]
# 客户端默认字符集
default-character-set=utf8

# 服务端配置
[mysqld]
# 端口号,默认3306
port=3306
# 数据存储目录
datadir=/var/lib/mysql
# 套接字文件路径
socket=/var/lib/mysql/mysql.sock
# 禁用符号链接,防止安全风险
symbolic-links=0
# 日志文件路径
log-error=/var/log/mysqld.log
# 进程pid文件路径
pid-file=/var/run/mysqld/mysqld.pid

# 核心字符集配置,解决中文乱码
character-set-server=utf8
# 默认存储引擎
default-storage-engine=innodb

# 基础性能优化(可根据服务器内存调整)
# InnoDB缓冲池大小,专用服务器建议设置为物理内存的70%,测试环境可设为128M
innodb_buffer_pool_size = 128M
# 排序缓冲区大小
sort_buffer_size = 2M
# 连接缓冲区大小
join_buffer_size = 128M

8.3 重启服务使配置生效

复制代码
systemctl restart mysqld

九、常见问题与避坑指南

问题 1:MySQL 已配置 utf8 编码,但无法输入中文 / 中文乱码

排查步骤:
  1. 先确认系统终端的字符集配置,执行以下命令:

    复制代码
    env | grep LANG

    需确保输出为 LANG=en_US.utf8,若不是,需修改系统字符集配置。

  2. 登录 MySQL,执行以下 SQL 确认字符集配置:

    复制代码
    show variables like '%character%';

    需确保 character_set_servercharacter_set_databasecharacter_set_client 均为 utf8。

  3. 确认数据库、表的字符集均为 utf8,新建库表时需指定字符集。

问题 2:MySQL 服务启动失败

常见原因与解决方案:
  1. 配置文件错误/etc/my.cnf 配置项格式错误,可查看 /var/log/mysqld.log 日志中的报错行,修正配置后重启。

  2. 数据目录权限异常/var/lib/mysql 目录的所属用户必须是 mysql,执行以下命令修复权限:

    复制代码
    chown -R mysql:mysql /var/lib/mysql
    chmod -R 750 /var/lib/mysql
  3. 3306 端口被占用 :执行 netstat -tulpn | grep 3306 查看端口占用,关闭占用进程,或修改 my.cnf 中的端口号。

问题 3:远程工具无法连接 MySQL

常见原因与解决方案:
  1. 防火墙未开放 3306 端口 :执行以下命令开放端口并重启防火墙:

    bash 复制代码
    # 永久开放3306端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    # 重载防火墙配置
    firewall-cmd --reload
  2. root 用户未开启远程访问权限 :登录 MySQL 执行以下 SQL 开启远程访问(生产环境不建议 root 开启远程):

    sql 复制代码
    -- 授予root用户所有库表的远程访问权限,%代表所有主机
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  3. 云服务器安全组未放行 3306 端口:若为阿里云、腾讯云等云服务器,需在控制台安全组中放行 3306 端口的入站规则。


至此,CentOS 7 环境下 MySQL 5.7 的完整安装、配置与初始化已全部完成。。

相关推荐
小箌2 小时前
JavaWeb_02
java·数据库·maven·mybatis
数据知道2 小时前
详解MongoDB混合部署策略:复制集与分片集群的组合应用
数据库·mongodb
君爱学习2 小时前
分库分表下的分页查询
mysql
溜达的大象2 小时前
后端常用技术全方位分析:从核心标配到淘汰弃用,一文理清技术选型逻辑
网络·数据库
麦聪聊数据2 小时前
QuickAPI 如何重塑可视化大屏与 BI 的数据交付链路?
数据库·sql·低代码·微服务·重构
草莓熊Lotso2 小时前
手搓简易 Linux 进程池:从 0 到 1 实现基于管道的任务分发系统
linux·运维·服务器·数据库·c++·人工智能
霖霖总总2 小时前
[Redis小技巧11]Redis Key 过期策略与内存淘汰机制:深度解析与实战指南
数据库·redis
猹叉叉(学习版)2 小时前
【ASP.NET CORE】 9. 托管服务
数据库·笔记·后端·c#·asp.net·.netcore
Francek Chen3 小时前
【大数据存储与管理】分布式数据库HBase:03 HBase数据模型
大数据·数据库·hadoop·分布式·hdfs·hbase