先说背景

CentOS 7 自带的包管理是 Yum 不是 Dnf,而且官方源里没有 MySQL,得自己加仓库。这篇文章就是我在 CentOS 7 上装 MySQL 的完整记录,包括几种不同的安装方式,方便下次忘了回来看。

先看看系统版本

bash
1cat /etc/redhat-release
2hostnamectl

输出是 CentOS Linux release 7.x 就没问题。如果是 8 或 9 那包管理就变成 Dnf 了,步骤不太一样。

安装前要确认的事

  • 你有 sudo 权限
  • 机器能联网(离线场景下面有单独的方法)
  • 防火墙要不要开 3306 端口看你自己需求

方法一:用 Yum 装(最省事)

先把仓库加上

Oracle 官方准备好了 RPM 包,一行命令搞定:

bash
1sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm

装完之后系统里会多一个 /etc/yum.repos.d/mysql-community.repo,里面有好几个子仓库,默认启用的是 MySQL 8.0。

想换版本的话

仓库名版本说明
mysql80-community8.0.x当前 LTS,推荐
mysql57-community5.7.x老 LTS,快停止维护了
mysql-innovation-community8.x / 9.x尝鲜版

切版本就是开关仓库的事:

bash
1sudo yum-config-manager --disable mysql80-community
2sudo yum-config-manager --enable mysql57-community

如果提示找不到 yum-config-manager,先装一下 sudo yum install -y yum-utils。

正式安装

bash
1sudo yum install -y mysql-community-server

装完可以看看装了些啥:

bash
1rpm -qa | grep mysql-

启动服务

bash
1sudo systemctl start mysqld
2sudo systemctl enable mysqld
3sudo systemctl status mysqld

找到临时密码

MySQL 8.0 第一次启动的时候会自动生成一个临时 root 密码,记在日志里:

bash
1sudo grep 'temporary password' /var/log/mysqld.log

跑一下安全配置

bash
1sudo mysql_secure_installation

这个脚本会一步步引导你:

  • 改 root 密码
  • 删匿名用户
  • 禁止 root 远程登录
  • 删测试数据库
  • 重载权限表

登录试试

bash
1mysql -u root -p

进去之后可以看看版本和运行时间:

sql
1SELECT VERSION();
2SHOW STATUS LIKE 'Uptime';

方法二:用 Docker 装(最干净)

如果 Yum 仓库连不上或者不想污染系统,Docker 是最省心的选择。

bash
 1# 先装 Docker
 2sudo yum install -y docker
 3sudo systemctl start docker
 4sudo systemctl enable docker
 5
 6# 拉 MySQL 镜像跑起来
 7sudo docker run -d \
 8  --name mysql \
 9  -e MYSQL_ROOT_PASSWORD=your_password \
10  -p 3306:3306 \
11  -v /mysql-data:/var/lib/mysql \
12  mysql:8.0
参数什么意思
-d后台跑
--name给容器起个名
-e MYSQL_ROOT_PASSWORD设 root 密码(第一次启动必填)
-p 3306:3306宿主机 3306 映射到容器 3306
-v /mysql-data:/var/lib/mysql数据挂到宿主机,删容器不会丢数据

想换版本就改镜像标签,mysql:5.7、mysql:9.0 都行。

验证跑没跑起来:

bash
1sudo docker ps
2sudo docker exec mysql mysql -u root -p -e "SELECT VERSION();"

方法三:离线装(手工 RPM)

公司内网机子连不了外网的话,在有网的机器上下好包带过去:

bash
1# 下载完整 bundle
2wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar
3
4# 解压安装
5tar -xvf mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar
6sudo yum install -y mysql-community-*.rpm

注意离线装可能缺依赖(比如 libaio、numactl),提前准备好就行。

踩过的坑

GPG 密钥报错

bash
1sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql

和 MariaDB 冲突

CentOS 7 默认带着 MariaDB,不卸掉会冲突:

bash
1sudo yum remove -y mariadb-libs

日志怎么看

出了问题先翻日志:

bash
1sudo tail -100 /var/log/mysqld.log

总结一下

  • 能联网 → Yum 仓库装,标准省心
  • 不想污染宿主机 → Docker,干净利落
  • 离线环境 → 手工 RPM,提前下好 bundle

生产环境的话还是推荐 MySQL 8.0 LTS + Yum 安装,安全配置那一步别跳过。