目录
[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 的完整安装、配置、密码初始化与常见问题排查。
【前置说明】
- 本文所有操作建议全程切换为 root 用户 执行,避免普通用户 sudo 权限不足导致的操作失败,执行
su -即可切换为 root 用户;- 本文适配 CentOS 7 全版本、MySQL 5.7 系列,其他版本可参考核心流程,需注意源的兼容性;
- 若服务器已有 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
安装过程中,系统会自动按顺序安装以下核心组件:
mysql-community-common:MySQL 公共模块mysql-community-libs:MySQL 核心依赖库mysql-community-client:MySQL 客户端工具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 编码,但无法输入中文 / 中文乱码
排查步骤:
-
先确认系统终端的字符集配置,执行以下命令:
env | grep LANG需确保输出为
LANG=en_US.utf8,若不是,需修改系统字符集配置。 -
登录 MySQL,执行以下 SQL 确认字符集配置:
show variables like '%character%';需确保
character_set_server、character_set_database、character_set_client均为 utf8。 -
确认数据库、表的字符集均为 utf8,新建库表时需指定字符集。
问题 2:MySQL 服务启动失败
常见原因与解决方案:
-
配置文件错误 :
/etc/my.cnf配置项格式错误,可查看/var/log/mysqld.log日志中的报错行,修正配置后重启。 -
数据目录权限异常 :
/var/lib/mysql目录的所属用户必须是 mysql,执行以下命令修复权限:chown -R mysql:mysql /var/lib/mysql chmod -R 750 /var/lib/mysql -
3306 端口被占用 :执行
netstat -tulpn | grep 3306查看端口占用,关闭占用进程,或修改my.cnf中的端口号。
问题 3:远程工具无法连接 MySQL
常见原因与解决方案:
-
防火墙未开放 3306 端口 :执行以下命令开放端口并重启防火墙:
bash# 永久开放3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重载防火墙配置 firewall-cmd --reload -
root 用户未开启远程访问权限 :登录 MySQL 执行以下 SQL 开启远程访问(生产环境不建议 root 开启远程):
sql-- 授予root用户所有库表的远程访问权限,%代表所有主机 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION; FLUSH PRIVILEGES; -
云服务器安全组未放行 3306 端口:若为阿里云、腾讯云等云服务器,需在控制台安全组中放行 3306 端口的入站规则。
至此,CentOS 7 环境下 MySQL 5.7 的完整安装、配置与初始化已全部完成。。