前言 #
在 Linux 服务器上,MySQL 无疑是应用最广泛的关系型数据库。然而,对于许多初次接触 CentOS 的朋友来说,如何正确、干净地安装 MySQL 却是一个不大不小的挑战。是使用 yum 命令一键安装,还是去官网下载离线包?不同的方式有什么区别?
这篇指南将为你详细解析在 CentOS 7/8 系统上安装 MySQL 的三种主流方法,并附上每一步的详细操作指令和常见问题排查,无论你是新手还是老手,都能在这里找到最适合你的安装路径。
方法一:【强烈推荐】使用 MySQL 官方 YUM Repository #
这是官方首推的安装方式,也是最省心、最不容易出错的方法。它能确保你安装的是官方发布的最新、最稳定的版本,并且可以方便地通过 yum 或 dnf 管理后续的更新。
优点:
- 安装、升级、卸载都非常方便
- 自动处理复杂的依赖关系
- 与系统结合紧密,管理规范
缺点:
- 需要全程联网
步骤 1: 安装 MySQL YUM 源 #
首先,我们需要告诉系统的包管理器(YUM/DNF)MySQL 官方仓库的地址。
对于 CentOS 8 / RHEL 8:
# 安装 MySQL 官方源的 RPM 包
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
# 检查是否安装成功
sudo dnf repolist enabled | grep "mysql.*-community.*"
对于 CentOS 7 / RHEL 7:
# 安装 MySQL 官方源的 RPM 包
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 检查是否安装成功
sudo yum repolist enabled | grep "mysql.*-community.*"
步骤 2: (可选) 切换 MySQL 版本 #
官方源默认启用的是最新的 MySQL 版本(如 8.0)。如果你需要安装旧版本(如 5.7),需要手动切换。
CentOS 8 (使用 dnf):
# 查看所有可用的 MySQL 版本模块
sudo dnf module list mysql
# 禁用默认的 8.0 模块
sudo dnf module disable mysql
# 启用你想要的版本,例如 5.7
sudo dnf module enable mysql:5.7
# 验证一下当前启用的版本
sudo dnf module list mysql
CentOS 7 (使用 yum-config-manager):
# 如果没有 yum-config-manager, 先安装它
sudo yum install -y yum-utils
# 禁用默认的 8.0 源
sudo yum-config-manager --disable mysql80-community
# 启用你想要的 5.7 源
sudo yum-config-manager --enable mysql57-community
# 验证一下当前启用的源
yum repolist enabled | grep mysql
步骤 3: 安装 MySQL Server #
配置好源之后,就可以像安装普通软件一样来安装 MySQL 了。
# CentOS 8
sudo dnf install mysql-community-server
# CentOS 7
sudo yum install mysql-community-server
步骤 4: 启动并初始化 MySQL #
安装完成后,需要启动 MySQL 服务并进行基础的安全设置。
启动 MySQL 服务:
sudo systemctl start mysqld
设置开机自启:
sudo systemctl enable mysqld
获取临时密码并进行安全设置:
MySQL 8.0 在初始化时会为 root 用户生成一个临时密码。
# 找到临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 运行安全脚本,过程中会提示你输入临时密码,并设置新密码
sudo mysql_secure_installation
按照提示完成设置即可,包括设置新密码、删除匿名用户、禁止 root 远程登录等。
方法二:使用 RPM 包进行离线安装 #
如果你需要在内网或无法联网的环境中安装 MySQL,或者对版本有非常精确的要求,那么下载 RPM 包手动安装是最佳选择。
优点:
- 完全离线,不依赖网络
- 版本控制精确
缺点:
- 需要手动下载,并处理可能的依赖问题
- 升级相对繁琐
步骤 1: 下载 RPM Bundle #
- 访问 MySQL Community Server 官方下载页面
- Select Operating System: 选择 Red Hat Enterprise Linux / Oracle Linux
- Select OS Version: 根据你的 CentOS 版本选择 EL8 (x86, 64-bit) 或 EL7 (x86, 64-bit)
- 在下载选项中,找到 RPM Bundle 并下载。这是一个 .tar 压缩包,包含了安装所需的所有核心 RPM 文件,可以避免我们手动解决依赖的麻烦。
步骤 2: 准备环境并安装 #
上传并解压: 将下载好的 .tar 文件上传到服务器,然后解压。
# 假设下载的文件是 mysql-8.0.x-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-8.0.x-1.el7.x86_64.rpm-bundle.tar
卸载冲突的包: CentOS 系统可能预装了 mariadb-libs,它会与 MySQL 的库文件冲突,需要先卸载。
sudo yum remove mariadb-libs
安装 RPM 包: 进入解压后的文件夹,使用 yum 或 dnf 的 localinstall 功能来安装所有 RPM 包,它可以自动处理这些包之间的依赖顺序。
# CentOS 8
sudo dnf localinstall mysql-community-*.rpm
# CentOS 7
sudo yum localinstall mysql-community-*.rpm
系统会提示你安装,输入 y 确认即可。
步骤 3: 启动并初始化 #
这一步与方法一的步骤 4 完全相同,请参考上文进行启动、获取临时密码和安全设置。
方法三:使用通用二进制包 (高手向) #
这种方式类似 Windows 上的"绿色版",提供了最大的灵活性,但配置也最为复杂,适合需要深度定制环境的数据库管理员(DBA)或高级用户。
优点:
- 不污染系统目录,所有文件都在一个目录下
- 可以在同一台服务器上轻松安装和运行多个不同版本的 MySQL 实例
缺点:
- 配置极其繁琐,每一步都需要手动操作,容易出错
由于此方法步骤繁多且不适合大多数常规用户,这里只列出关键流程,具体请参考 MySQL 官方文档。
- 下载: 在官网下载 Linux - Generic 版本的二进制压缩包
- 创建用户: 创建一个专门运行 MySQL 的系统用户和组(如 mysql)
- 解压: 将压缩包解压到指定安装目录(如 /usr/local/mysql)
- 创建数据目录: 创建数据目录(如 /data/mysql)并授权给 mysql 用户
- 编写配置文件: 创建 my.cnf 文件,指定安装目录、数据目录、端口等核心参数
- 初始化数据库: 执行
mysqld --initialize命令 - 配置启动脚本: 将 support-files/mysql.server 脚本复制到 /etc/init.d/ 并配置
- 启动服务并设置密码
常见问题 (FAQ) #
Q1: 安装时提示 mariadb-libs 冲突怎么办? #
A: 这是因为系统自带的 MariaDB 库与 MySQL 冲突。在安装 MySQL 前,执行 sudo yum remove mariadb-libs 卸载它即可。
Q2: MySQL 8.0 的密码策略太强,我想设置一个简单的密码怎么办? #
A: 你可以在 mysql_secure_installation 过程中选择不启用密码验证插件(VALIDATE PASSWORD component)。如果已经安装,可以登录 MySQL 后执行以下命令修改:
-- 卸载密码验证插件
UNINSTALL COMPONENT 'file://component_validate_password';
-- 或者降低密码策略等级
SET GLOBAL validate_password.policy = LOW;
Q3: 忘记了 root 密码怎么办? #
A: 可以通过"跳过授权表"的方式来重置密码。
- 编辑
/etc/my.cnf,在[mysqld]部分下添加skip-grant-tables - 重启 MySQL 服务:
sudo systemctl restart mysqld - 免密登录:
mysql -u root - 执行
FLUSH PRIVILEGES;然后ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
重要: 修改完后,务必删除
/etc/my.cnf中添加的skip-grant-tables并重启 MySQL。
Q4: 如何允许远程连接 MySQL? #
A: 出于安全考虑,MySQL 默认只允许本地连接。要开启远程连接,你需要:
- 确保你的云服务器或物理防火墙已经开放了 MySQL 的端口(默认为 3306)
- 登录 MySQL,执行以下命令,将特定用户的访问权限从 localhost 改为 IP地址 或 % (任意地址)
-- 例子:允许 root 用户从任何 IP 地址连接
CREATE USER 'root'@'%' IDENTIFIED BY 'YourPassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安全警告: 在生产环境中,不建议直接对 root 用户开放所有 IP 的访问权限。最好是创建一个专用的用户,并限制其只能从特定的 IP 地址访问。
性能优化建议 #
1. 基础配置优化 #
# 编辑 MySQL 配置文件
sudo vim /etc/my.cnf
# 添加以下基础优化配置
[mysqld]
# 缓冲池大小(建议设置为内存的 70-80%)
innodb_buffer_pool_size = 1G
# 日志文件大小
innodb_log_file_size = 256M
# 连接数
max_connections = 200
# 查询缓存(MySQL 8.0 已移除)
# query_cache_size = 64M
2. 系统级优化 #
# 调整文件描述符限制
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
# 调整内核参数
echo "vm.swappiness = 1" >> /etc/sysctl.conf
sysctl -p
3. 监控和维护 #
# 查看 MySQL 状态
sudo systemctl status mysqld
# 查看 MySQL 进程
ps aux | grep mysql
# 查看 MySQL 端口监听
netstat -tlnp | grep 3306
# 查看 MySQL 日志
sudo tail -f /var/log/mysqld.log
安全加固建议 #
1. 基础安全设置 #
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- 限制 root 用户只能本地登录
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
2. 创建专用用户 #
-- 创建专用数据库用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPassword123!';
-- 只授权必要的权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'appuser'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
3. 定期备份 #
# 创建备份脚本
sudo vim /usr/local/bin/mysql_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mysql"
mkdir -p $BACKUP_DIR
mysqldump -u root -p --all-databases > $BACKUP_DIR/full_backup_$DATE.sql
# 保留最近7天的备份
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
# 设置执行权限
sudo chmod +x /usr/local/bin/mysql_backup.sh
# 添加到 crontab 定时执行
echo "0 2 * * * /usr/local/bin/mysql_backup.sh" | sudo crontab -
总结 #
对于绝大多数用户,方法一(YUM/DNF) 是安装和管理 MySQL 的最佳选择。它在便利性、稳定性和安全性之间取得了完美的平衡。只有在特殊的离线或定制化场景下,才需要考虑后两种方法。
选择建议 #
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 生产环境 | YUM/DNF 安装 | 稳定、易维护、官方支持 |
| 内网环境 | RPM 包安装 | 离线、版本可控 |
| 开发测试 | YUM/DNF 安装 | 快速、便捷 |
| 多版本共存 | 二进制包安装 | 灵活、独立 |
安装后检查清单 #
- MySQL 服务正常运行
- 可以正常登录
- 密码策略符合要求
- 远程连接配置正确(如需要)
- 基础安全设置完成
- 备份策略已制定
- 监控告警已配置
希望这篇指南能帮助你在 CentOS 上顺利地驾驭 MySQL!
💡 提示:如果遇到其他 MySQL 相关问题,欢迎联系:weidong_321@163.com