01 在 CentOS 7 中安装 MySQL

01 在 CentOS 7 中安装 MySQL
小米里的大麦在 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 进程。
1 | ps ajx | grep mysql |
注意看最后一列的命令内容。 如果最后一列显示是 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 服务未安装,我们就可以直接进行下一步了。当然也存在 及其少见 的情况:服务名称不同,非常罕见,不做讨论。
1 | systemctl stop mysql |
2. 检查系统安装包
1. 查找已安装的相关 RPM 包
有些人可能会想要备份当前的数据目录和配置,可以执行下方命令,后续可以从
/var/lib/mysql.bak进行恢复。当然,我们这里是从 0 安装 MySQL,我想要干净、易于管理就不进行备份了,备份是可选项,个人感觉没有太多必要。
1
2
3
4 >sudo 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
1 | rpm -qa | grep -i mysql # -i 选项可忽略(下同) |
2. 删除已安装的 MySQL/MariaDB 包
1 | rpm -qa | grep -i mysql | xargs yum -y remove # 删除所有 mysql 相关 rpm |
使用
xargs可以将查询结果作为参数传递给yum remove,实现批量卸载。
3. 处理残留文件
1 | ls /etc/my.cnf # 配置文件 |
1 | [root@hcss-ecs-be68 ~]# which mysql mysqld mysqld_safe # 检查二进制文件残留(可选) |
如有残留,建议删除残留文件,当然这一步是可选的,不清理残留可能会影响后续使用。
1 | rm -rf /etc/my.cnf |
3. 获取 MySQL 官方 yum 源
CentOS 默认 YUM 源中不包含 MySQL 常用版本,需手动添加官方仓库。
1. 确认系统版本
1 | cat /etc/redhat-release |
我们需要选择 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) 去寻找对应版本的安装包。这里我选择是
1 | mysql-community-release-el7.rp |
通过 rz 命令将下载好的 RPM 包上传至我们的 Linux。 输入命令 ls /etc/yum.repos.d/ -l 可以查看系统中配置了哪些软件仓库,比如:
1 | [root@hcss-ecs-be68 ~]# ls /etc/yum.repos.d/ -l |
为了方便管理,可以整理一下目录结构,比如:
1 | [root@hcss-ecs-be68 ~]# tree |
3. 安装仓库 RPM
1 | rpm -ivh mysql-community-release-el7.rpm # 注意这里是自己实际的 rpm 包名 |
4. 验证仓库是否添加成功
1 | ls /etc/yum.repos.d/ -l |
包含下面的字段,则代表安装成功:
1 | mysql-community.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 包
1 | yum list | grep mysql |
首次执行可能较慢(需下载元数据),耐心等待。若看到 mysql-community-server.x86_64 等条目,说明配置成功。
此时可删除下载的
.rpm文件(非必需):
1 rm mysql-community-release-el7.rpm
4. 正式安装 MySQL 服务
1. 安装 MySQL Server
1 | yum install -y mysql-community-server |
等待安装完成,过程中会自动安装依赖包。
很不幸,我当时在这里出现了报错:AI 的说法: 日志末尾出现 GPG 密钥验证失败报错,这是导致安装无法继续的核心问题,具体报错信息:
1
2
3
4
5 >The 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 需要执行:
1
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
如果是 MySQL 5.7(或者 8.0 的早期版本 < 8.0.34),才会用旧的:
1
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. 验证安装结果
1 | ls /etc/my.cnf # 配置文件应已生成 |
输出示例:
1 | /etc/my.cnf |
5. 启动 MySQL 服务并验证
1. 启动服务
1 | systemctl start mysqld # 启动服务 |
2. 设置开机自启(推荐)
在上面的运行启动示例中 已经显示 MySQL 服务默认配置了开机自启,如果你不确定开机自启是否启用,可执行:
1 | systemctl enable mysqld |
3. 检查服务状态
1 | ps ajx | grep mysqld # 查看守护进程 |
正常应看到 mysqld 进程及 0.0.0.0:3306 监听状态。
MySQL 本质上其实是一种网络服务,默认监听 3306 端口,可通过防火墙或云平台安全组放行。
6. 首次登录 MySQL 并重置 root 密码
1. 获取临时密码
安装后 MySQL 默认会生成一个随机 root 密码,写在日志里:
1 | grep 'temporary password' /var/log/mysqld.log |
你会得到类似:
1 | 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
1 | mysql -u root -p |
输入上面复制的临时密码进行登录。
3. 修改 root 密码(必须操作)
登录后,立即修改密码,否则多数操作会被拒绝:
1 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxxxxx'; |
MySQL 5.7 默认有密码强度策略,密码至少 8 位,包含大小写、数字和特殊字符,否则修改会出错!
4. 重新登录(使用自己的密码)
在 MySQL 里输入:
1 | exit; # 注意要一直输入直到退出到 Linux 的 shell 中,不要丢掉了分号结尾!! |
重新登录:
1 | mysql -u root -p # 这里再输入自己的密码,注意这里不回显。 |
如果能成功进入 MySQL,就说明密码修改完成 🎉
7. 配置优化(可选)
1. 修改配置文件
可以使用 vim /etc/my.cnf 或者用 VS Code 进行修改,我们需要 调整字符集为 utf8mb4(防止后续中文或 emoji 出现乱码)以及一些其他设置,下面是完整文件内容,可以直接复制替换:
1 | # For advice on how to change settings please see |
说明:
character-set-server = utf8mb4→ 设置服务端默认字符集为 utf8mb4。collation-server = utf8mb4_general_ci→ 设置默认的排序规则,utf8mb4_general_ci 兼容性好,性能也不错。bind-address = 0.0.0.0→ 默认 MySQL 只监听 127.0.0.1(只能本机访问),加上这行才能接受远程连接。
1 | systemctl restart mysqld # 保存退出后,重启 MySQL |
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(并发上限,根据业务调)慢查询日志(调试优化时用):
1
2
3slow_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,只要源配置好:
1 | yum install -y mysql-community-server |
它会自动把 server + client + libs + common + 依赖库 都装好。










