🦄 个人主页 : 小米里的大麦-CSDN博客
🎏 所属专栏 : MySQL_小米里的大麦的博客-CSDN博客
🎁 GitHub主页 : 小米里的大麦的 GitHub

文章目录
- [在 CentOS 7.6 上从零安装并配置 MySQL 详细教程](#在 CentOS 7.6 上从零安装并配置 MySQL 详细教程)
-
- [1. 准备工作:卸载旧的、不要的 MySQL/MariaDB 环境](#1. 准备工作:卸载旧的、不要的 MySQL/MariaDB 环境)
-
- [1. 检查正在运行的 mysqld / mysql / mariadb 进程](#1. 检查正在运行的 mysqld / mysql / mariadb 进程)
- [2. 停止正在运行的服务](#2. 停止正在运行的服务)
- [2. 检查系统安装包](#2. 检查系统安装包)
-
- [1. 查找已安装的相关 RPM 包](#1. 查找已安装的相关 RPM 包)
- [2. 删除已安装的 MySQL/MariaDB 包](#2. 删除已安装的 MySQL/MariaDB 包)
- [3. 处理残留文件](#3. 处理残留文件)
- [3. 获取 MySQL 官方 yum 源](#3. 获取 MySQL 官方 yum 源)
-
- [1. 确认系统版本](#1. 确认系统版本)
- [2. 下载并安装 MySQL YUM 仓库 RPM 包](#2. 下载并安装 MySQL YUM 仓库 RPM 包)
- [3. 安装仓库 RPM](#3. 安装仓库 RPM)
- [4. 验证仓库是否添加成功](#4. 验证仓库是否添加成功)
- [5. 检查是否可列出 MySQL 包](#5. 检查是否可列出 MySQL 包)
- [4. 正式安装 MySQL 服务](#4. 正式安装 MySQL 服务)
-
- [1. 安装 MySQL Server](#1. 安装 MySQL Server)
- [2. 验证安装结果](#2. 验证安装结果)
- [5. 启动 MySQL 服务并验证](#5. 启动 MySQL 服务并验证)
-
- [1. 启动服务](#1. 启动服务)
- [2. 设置开机自启(推荐)](#2. 设置开机自启(推荐))
- [3. 检查服务状态](#3. 检查服务状态)
- [6. 首次登录 MySQL 并重置 root 密码](#6. 首次登录 MySQL 并重置 root 密码)
-
- [1. 获取临时密码](#1. 获取临时密码)
- [2. 登录 MySQL](#2. 登录 MySQL)
- [3. 修改 root 密码(必须操作)](#3. 修改 root 密码(必须操作))
- [4. 重新登录(使用自己的密码)](#4. 重新登录(使用自己的密码))
- [7. 配置优化(可选)](#7. 配置优化(可选))
-
- [1. 修改配置文件](#1. 修改配置文件)
- [2. `port=3306` 有必要写吗?](#2.
port=3306有必要写吗?) - [3. `default-storage-engine=innodb` 有必要吗?](#3.
default-storage-engine=innodb有必要吗?) - [4. 其他补充项](#4. 其他补充项)
- [8. RPM VS YUM](#8. RPM VS YUM)
-
- [1. RPM 是什么?](#1. RPM 是什么?)
- [2. YUM 源是什么?](#2. YUM 源是什么?)
- [3. RPM 与 YUM 源的关系](#3. RPM 与 YUM 源的关系)
- [4. 如果只用 RPM,不用 YUM 会怎样?](#4. 如果只用 RPM,不用 YUM 会怎样?)
- 共勉
在 CentOS 7.6 上从零安装并配置 MySQL 详细教程
配置之前,请先使用 root 账号登录!后续命令都是基于 root 权限的!
1. 工程实践中的常态在公司级、工程级的开发环境里,数据库几乎都是部署在 Linux 上。原因很现实:
- 稳定性:Linux 的内核和生态对长时间运行的服务(数据库、Web 服务器)更稳。
- 性能:Linux 的 I/O 调度、文件系统、网络栈优化比 Windows 更适合高并发和大数据量场景。
- 生态一致性:大部分运维工具、监控方案(Prometheus、Ansible、Docker/K8s)都是围绕 Linux 构建的。
- 服务器环境:绝大多数云服务(阿里云、华为云、AWS、GCP)默认都跑 Linux,不会给你装 Windows Server 再跑 MySQL。
换句话说,"工程实践里数据库跑在 Linux 上" 已经是行业共识。
2. 那 Windows 下用 MySQL 就"愚蠢"吗?
也不能这么绝对。Windows 下用 MySQL 有几个合理的场景:
- 个人开发/学习:很多初学者直接用 Windows 装 MySQL,图形化界面工具丰富,上手快。
- 小型应用/测试:有些实验性项目或 demo,没必要起一台 Linux 服务器。
- 企业遗留环境:部分公司内部系统历史包袱大,早期就跑在 Windows + MySQL 上,一时半会没迁移。
所以在 学习/个人项目 阶段,Windows 并不是愚蠢,而是 易用。只是它天然不适合工业级、持续稳定运行的数据库。
3. 为什么大公司更青睐 Linux + MySQL?
因为要考虑的远不止"能不能跑":
- 集群部署:Linux 下搭建主从复制、MGR 集群、分布式架构更成熟。
- 高可用:用 Linux 的 keepalived、pacemaker、systemd 脚本能做自动容灾。
- 容器化/云原生:MySQL 在 Docker/Kubernetes 中的镜像都是基于 Linux。Windows 几乎没有原生容器支持。
1. 准备工作:卸载旧的、不要的 MySQL/MariaDB 环境
1. 检查正在运行的 mysqld / mysql / mariadb 进程
在安装新版本 MySQL 之前,务必确保系统中没有残留的旧版本数据库,避免冲突。如果有输出,说明有正在运行的 MySQL 或 MariaDB 进程。
bash
ps ajx | grep mysql
ps ajx | grep mariadb
# 或者:
ps aux | egrep 'mysqld|mysql|mariadb' # 列出相关进程
注意看最后一列的命令内容。 如果最后一列显示是 grep ...,这个其实是刚刚执行的 grep 本身。比如:
14375 14838 14837 14375 pts/0 14837 S+ 1000 0:00 grep --color=auto mysql,不要将这个当作 MySQL 的进程!
2. 停止正在运行的服务
如果上面检查出了有 mysqld / mysql / mariadb 进程的存在才需要执行这一步。 执行下面的命令,如果输出中存在 service not loaded. 的字样说明大概率就是 MySQL/MariaDB 服务未安装,我们就可以直接进行下一步了。当然也存在 及其少见 的情况:服务名称不同,非常罕见,不做讨论。
bash
systemctl stop mysql
systemctl stop mariadb
2. 检查系统安装包
1. 查找已安装的相关 RPM 包
有些人可能会想要备份当前的数据目录和配置,可以执行下方命令,后续可以从
/var/lib/mysql.bak进行恢复。当然,我们这里是从 0 安装 MySQL,我想要干净、易于管理就不进行备份了,备份是可选项,个人感觉没有太多必要。
bashsudo systemctl stop mysqld || sudo systemctl stop mariadb || true sudo cp -a /var/lib/mysql /var/lib/mysql.bak # 备份数据目录 sudo cp -a /etc/my.cnf /etc/my.cnf.bak || true # 备份配置文件(如存在) sudo tar czvf /root/mysql_backup_$(date +%F).tgz /var/lib/mysql /etc/my.cnf || true
bash
rpm -qa | grep -i mysql # -i 选项可忽略(下同)
rpm -qa | grep -i mariadb
2. 删除已安装的 MySQL/MariaDB 包
bash
rpm -qa | grep -i mysql | xargs yum -y remove # 删除所有 mysql 相关 rpm
rpm -qa | grep -i mariadb | xargs yum -y remove # 删除 mariadb 相关 rpm
# 再次确认
rpm -qa | grep -i mysql || true
rpm -qa | grep -i mariadb || true
使用
xargs可以将查询结果作为参数传递给yum remove,实现批量卸载。
3. 处理残留文件
bash
ls /etc/my.cnf # 配置文件
ls /var/lib/mysql/ # 数据目录
bash
[root@hcss-ecs-be68 ~]# which mysql mysqld mysqld_safe # 检查二进制文件残留(可选)
/usr/bin/which: no mysql in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
/usr/bin/which: no mysqld in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
/usr/bin/which: no mysqld_safe in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
# mysql(客户端命令),mysqld(服务器主程序),mysqld_safe(服务器安全启动脚本)
# 这些关键二进制文件都不存在于系统的环境变量路径中,进一步证明了 MySQL/MariaDB 相关组件已经被彻底卸载,没有残留的可执行文件。
如有残留,建议删除残留文件,当然这一步是可选的,不清理残留可能会影响后续使用。
bash
rm -rf /etc/my.cnf
rm -rf /var/lib/mysql/
3. 获取 MySQL 官方 yum 源
CentOS 默认 YUM 源中不包含 MySQL 常用版本,需手动添加官方仓库。
1. 确认系统版本
bash
cat /etc/redhat-release
# 本机输出示例:CentOS Linux release 7.6.1810 (Core)
我们需要选择 MySQL 5.7 安装包,因为大多数公司使用的版本依旧在 5.7 左右,所以选择这个,另外选择这个版本会方便后续出错问题的排查。但是很可惜,我在安装这个版本时出错了,倒腾了很久,遂放弃。所以我们选用 MySQL 8.0(具体是 8.0.43),但后面的讲解依旧会参杂部分的 MySQL 5.7 的讲解。
MySQL 8.0 和 MySQL 5.7 存在一些差异, 基础学习,有差异的地方查一下就行了,SQL 语句基本上是一样的,问题不大。
2. 下载并安装 MySQL YUM 仓库 RPM 包
在 Windows 中前往 MySQL YUM Repository,选择对应版本进行下载。由于网页不是很好筛选,在浏览器中右键选择 查看网页源代码(ctrl+u) 去寻找对应版本的安装包。这里我选择是
txt
mysql-community-release-el7.rp
通过 rz 命令将下载好的 RPM 包上传至我们的 Linux。 输入命令 ls /etc/yum.repos.d/ -l 可以查看系统中配置了哪些软件仓库,比如:
bash
[root@hcss-ecs-be68 ~]# ls /etc/yum.repos.d/ -l
total 48
-rw-r--r-- 1 root root 1732 Jul 7 2024 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Nov 23 2018 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Nov 23 2018 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Nov 23 2018 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Nov 23 2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Nov 23 2018 CentOS-Sources.repo
-rw-r--r--. 1 root root 5701 Nov 23 2018 CentOS-Vault.repo
-rw-r--r-- 1 root root 927 Jul 7 2024 epel.repo
-rw-r--r-- 1 root root 1358 Sep 5 2021 epel.repo.rpmnew
-rw-r--r-- 1 root root 1457 Sep 5 2021 epel-testing.repo
-rw-r--r-- 1 root root 192 Jan 20 2016 wandisco-git.repo
为了方便管理,可以整理一下目录结构,比如:
bash
[root@hcss-ecs-be68 ~]# tree
.
└── MySQL
└── mysql-community-release-el7.rpm
3. 安装仓库 RPM
bash
rpm -ivh mysql-community-release-el7.rpm # 注意这里是自己实际的 rpm 包名
# 示例:
[root@hcss-ecs-be68 MySQL]# rpm -ivh mysql-community-release-el7.rpm
warning: mysql-community-release-el7.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql80-community-release-el7-3 ################################# [100%]
4. 验证仓库是否添加成功
bash
ls /etc/yum.repos.d/ -l
# 或者:
ls /etc/yum.repos.d/ -l | grep mysql
包含下面的字段,则代表安装成功:
txt
mysql-community.repo
mysql-community-source.repo
前提警告:只可远观而不可亵玩焉,不要擅自进行修改!!!
你可以使用
vim /etc/yum.repos.d/mysql-community.repo进行 MySQL 官方软件仓库的查看,这里面是纯文本配置内容,记录了 MySQL 官方软件仓库的地址、可安装的 MySQL 版本(如 5.7、8.0 等)、软件包校验信息等。给系统的包管理器(yum)指路 ------ 告诉 yum 从哪里下载官方正版的 MySQL 软件(包括服务器、客户端等组件),以及如何验证下载的软件是否安全,从而实现通过yum install mysql等命令一键安装 / 更新 MySQL。
5. 检查是否可列出 MySQL 包
bash
yum list | grep mysql
首次执行可能较慢(需下载元数据),耐心等待。若看到 mysql-community-server.x86_64 等条目,说明配置成功。
此时可删除下载的
.rpm文件(非必需):
bashrm mysql-community-release-el7.rpm
4. 正式安装 MySQL 服务
1. 安装 MySQL Server
bash
yum install -y mysql-community-server
等待安装完成,过程中会自动安装依赖包。
很不幸,我当时在这里出现了报错:AI 的说法: 日志末尾出现 GPG 密钥验证失败报错,这是导致安装无法继续的核心问题,具体报错信息:
bashThe GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository. Failing package is: mysql-community-client-8.0.43-1.el7.x86_64 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql第一次执行
yum install时,还出现过 SSH 连接断开 (Socket error Event: 32 Error: 10053),导致安装过程中途终止;重新连接后再次执行安装,才暴露了 GPG 密钥不匹配的核心报错。
解决办法:导入 MySQL 官方的 GPG key
-
MySQL 8.0.43 需要执行:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 -
如果是 MySQL 5.7(或者 8.0 的早期版本 < 8.0.34),才会用旧的:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
导入完 MySQL 官方的 GPG key 后需要再次执行 yum install -y mysql-community-server。我在这一次才成功,来看看几个关键点:
Transaction test succeeded👉 说明依赖检查通过,可以正常安装。Running transaction ... Installing ... Verifying ...👉 依赖包一个个安装并验证通过,没有报错。- 最后输出
Complete!👉 这是 yum 安装成功的标志。
2. 验证安装结果
bash
ls /etc/my.cnf # 配置文件应已生成
which mysqld # MySQL 服务程序路径
which mysql # MySQL 客户端路径
输出示例:
bash
/etc/my.cnf
/usr/sbin/mysqld
/usr/bin/mysql
5. 启动 MySQL 服务并验证
1. 启动服务
bash
systemctl start mysqld # 启动服务
systemctl status mysqld # 检查服务状态
# 启动成功示例:
[root@hcss-ecs-be68 ~]# systemctl start mysqld
[root@hcss-ecs-be68 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-08-16 20:49:34 CST; 5ms ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 30782 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 30852 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─30852 /usr/sbin/mysqld
2. 设置开机自启(推荐)
在上面的运行启动示例中 已经显示 MySQL 服务默认配置了开机自启,如果你不确定开机自启是否启用,可执行:
bash
systemctl enable mysqld
3. 检查服务状态
bash
ps ajx | grep mysqld # 查看守护进程
netstat -nltp | grep 3306 # 查看监听端口(默认3306)
# 或
ss -nltp | grep 3306 # 查看 3306 端口是否已监听
正常应看到 mysqld 进程及 0.0.0.0:3306 监听状态。
MySQL 本质上其实是一种网络服务,默认监听 3306 端口,可通过防火墙或云平台安全组放行。
6. 首次登录 MySQL 并重置 root 密码
1. 获取临时密码
安装后 MySQL 默认会生成一个随机 root 密码,写在日志里:
bash
grep 'temporary password' /var/log/mysqld.log
你会得到类似:
bash
2025-08-16T12:49:30.049756Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Rhszstdgg3#! # 临时密码各不相同!
复制 Rhszstdgg3#! 部分作为临时密码。
⚠️ 如果日志中没有,可能服务未正常启动或未生成,请检查
/var/log/mysqld.log全文。
2. 登录 MySQL
bash
mysql -u root -p
输入上面复制的临时密码进行登录。
3. 修改 root 密码(必须操作)
登录后,立即修改密码,否则多数操作会被拒绝:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxxxxx';
# 你需要把 xxxxxxxxxxx 换成自己实际的密码,注意要用 ; 结尾!!
MySQL 5.7 默认有密码强度策略,密码至少 8 位,包含大小写、数字和特殊字符,否则修改会出错!
4. 重新登录(使用自己的密码)
在 MySQL 里输入:
sql
exit; # 注意要一直输入直到退出到 Linux 的 shell 中,不要丢掉了分号结尾!!
重新登录:
bash
mysql -u root -p # 这里再输入自己的密码,注意这里不回显。
如果能成功进入 MySQL,就说明密码修改完成 🎉
7. 配置优化(可选)
1. 修改配置文件
可以使用 vim /etc/my.cnf 或者用 VS Code 进行修改,我们需要 调整字符集为 utf8mb4(防止后续中文或 emoji 出现乱码)以及一些其他设置,下面是完整文件内容,可以直接复制替换:
ini
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
# 数据库存储目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 错误日志和 PID 文件
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 设置默认字符集为 utf8mb4,避免中文和 emoji 乱码
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# 开启远程访问(默认只允许本地连接)
bind-address = 0.0.0.0
说明:
character-set-server = utf8mb4→ 设置服务端默认字符集为 utf8mb4。collation-server = utf8mb4_general_ci→ 设置默认的排序规则,utf8mb4_general_ci 兼容性好,性能也不错。bind-address = 0.0.0.0→ 默认 MySQL 只监听 127.0.0.1(只能本机访问),加上这行才能接受远程连接。
bash
systemctl restart mysqld # 保存退出后,重启 MySQL
systemctl status mysqld # 再检查服务是否起来
2. port=3306 有必要写吗?
建议:不用额外写,保持默认,除非有特殊需求。MySQL 默认就是 3306, 我们可以添加字段 port=3306,也可以不添加。需要改的时候才写 :如果你要跑多个实例,或者公司要求用非默认端口(比如 3307、13306),这时候才需要在 my.cnf 明确写 port=xxx(即 3306 可以自定义成其他值/端口)。
3. default-storage-engine=innodb 有必要吗?
MySQL 8.0 默认存储引擎就是 InnoDB,所以写不写效果一样。在 5.1、5.5 那个时代,MyISAM 还是默认引擎,所以 MySQL 5.7 左右的配置里常常会加这行,这里我们就不需要了。
4. 其他补充项
优化项(根据机器内存调整),这里我们就跳过,依旧使用上面的可覆盖文件内容。
-
innodb_buffer_pool_size = 1G(内存充足时设大一点) -
max_connections = 200(并发上限,根据业务调) -
慢查询日志(调试优化时用):
slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 2
8. RPM VS YUM
1. RPM 是什么?
RPM(RedHat Package Manager)= 一个软件的安装包。就像一个压缩文件,里面装着:
- 可执行程序(比如
/usr/sbin/mysqld) - 配置文件(比如
/etc/my.cnf) - 安装说明(依赖、版本号、校验信息)
我们可以直接用 rpm -ivh xxx.rpm 安装,就像手工解压+复制到系统目录。特点:只装这个包本身,不会自动去找依赖(比如你装 MySQL,缺少 libaio,它不会帮你装)。
2. YUM 源是什么?
YUM(Yellowdog Updater, Modified)= 一个包管理工具。它的任务是:
- 根据命令(
yum install mysql-community-server),自动去找相应的 RPM 包; - 如果缺少依赖,会自动从仓库里拉依赖包;
- 自动校验包的签名,保证安全;
- 还负责卸载、升级等操作。
YUM 源(repo 文件)就是给 YUM 指路的「仓库地址清单」,告诉它:
- 仓库的网址(http/https 地址)
- 里面有哪些 RPM 包(比如 mysql-community-server、mysql-community-client)
- 用哪个 GPG key 校验
特点:一条命令自动装好依赖,比手工 rpm 安全省心。
3. RPM 与 YUM 源的关系
- RPM 包 → 一个个软件快递盒子。
- YUM 源 → 快递仓库的导航地图。
- 我们做的事 :
rpm -ivh mysql-community-release-el7.rpm→ 装了一个「导航地图」(repo 文件),让 yum 知道 MySQL 仓库在哪里。yum install mysql-community-server→ yum 拿着地图去官方仓库,把 MySQL 的 RPM 和依赖都搬到系统里装上。
4. 如果只用 RPM,不用 YUM 会怎样?
得自己一个个下载 RPM(server、client、libs、common、依赖库...),可能缺一个依赖包就报错,得再去手动找,过程麻烦,还容易遗漏。而用 YUM,只要源配置好:
bash
yum install -y mysql-community-server
它会自动把 server + client + libs + common + 依赖库 都装好。
共勉

