跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

CentOS 7/8/9 安装 MySQL 8.0+ 完整指南

CentOS 7/8/9 系统安装 MySQL 8.0+ 的完整流程,涵盖包管理器(Yum)与二进制包两种安装方式。内容包括环境准备、服务启动、root 密码重置、远程访问配置及常见问题排查。重点介绍了 systemd 服务管理、配置文件编写及安全策略设置,确保数据库稳定运行。

Kubernet发布于 2026/3/21更新于 2026/10/24124 浏览
CentOS 7/8/9 安装 MySQL 8.0+ 完整指南

CentOS 7/8/9 安装 MySQL 8.0+ 完整指南

一、流程图

推荐新手在开始安装前完成以下步骤:

  1. 使用包管理器安装(简单,易管理)
  2. 手动安装二进制包(难,但更灵活)
  3. 添加 Yum 存储库
  4. 创建专用用户和组
  5. 创建配置文件和初始化数据目录
  6. 创建 systemd 单元文件
  7. 启动服务测试 MySQL 服务
  8. 开启远程访问权限

二、安装前的准备工作

在开始安装之前,建议你先完成以下步骤:

1. 更新系统软件包

更新系统,确保所有软件包都是最新状态。(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)

yum update

2. 检查是否已安装 MySQL

执行以下命令检查:

yum list installed | grep mysql
yum list installed | grep mariadb

3. 卸载旧版本

如果存在旧版本,建议卸载以避免冲突。

yum remove <包名>

4. 清理残留文件

卸载后建议删除相关配置文件和数据目录。

# 删除配置文件
rm -rf /etc/my.cnf
# 删除数据目录(注意:会删除所有数据)
rm -rf /var/lib/mysql
# 删除日志文件
rm -rf /var/log/mysqld.log

三、使用包管理器安装(简单,易管理)

1. 添加 MySQL Yum 存储库

从 MySQL 官方下载 Yum 存储库。上传到服务器后执行(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)。

yum localinstall mysql84-community-release-el9-1.noarch.rpm

您可以通过以下命令检查 MySQL Yum 存储库是否已成功添加并启用:

yum repolist enabled | grep mysql.*-community

2. 禁用默认的 MySQL 模块(仅限 EL8 系统)

基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包含一个默认情况下启用的 MySQL 模块。

yum module disable mysql

3. 安装 MySQL

通过以下命令安装 MySQL。

yum install mysql-community-server

这将安装 MySQL 服务器软件包 (mysql-community-server),以及运行服务器所需组件的软件包,包括客户端软件包 (mysql-community-client)、客户端和服务器的通用错误消息和字符集 (mysql-community-common) 以及共享客户端库 (mysql-community-libs)。

4. 启动 MySQL 服务器

使用以下命令启动 MySQL 服务器。

systemctl start mysqld

您可以使用以下命令检查 MySQL 服务器的状态。

systemctl status mysqld

如果操作系统启用了 systemd,则应使用标准的 systemctl(或者,使用参数反转的 service)命令,例如 stop、start、status 和 restart 来管理 MySQL 服务器服务。mysqld 服务默认情况下处于启用状态,并且在系统重启时启动。

四、手动安装二进制包(难,但更灵活)

1. MySQL Linux 通用二进制分发目录

目录目录内容
binmysqld 服务器、客户端和实用程序
docsInfo 格式的 MySQL 手册
manUnix 手册页
include包含(头)文件
lib库
share错误消息、字典和用于数据库安装的 SQL
support-files各种支持文件

2. 命令序列如下所示

yum install libaio
tar -xvf /path/to/mysql-VERSION-OS.tar.xz
ln -s full-path-to-mysql-VERSION-OS mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /etc
touch my.cnf
chown root:root my.cnf
cd /usr/local/mysql
mkdir data
chmod 750 data
chown mysql:mysql data
bin/mysqld --defaults-file=/etc/my.cnf --initialize
cat data/localhost.localdomain.err
cd /usr/lib/systemd/system
touch mysqld.service
systemctl enable mysqld.service
systemctl start mysqld

3. 安装二进制包

安装 libaio 库

MySQL 依赖于该 libaio 库。如果未在本地安装此库,则数据目录初始化和后续服务器启动步骤将失败。如有必要,请使用适当的包管理器安装它。例如,在基于 Yum 的系统上:

yum search libaio # search for info
yum install libaio # install library
下载和解压

从 MySQL 官网下载对应版本的二进制压缩包(如 mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz),使用 tar -xzf 命令解压。

tar xvf mysql-9.4.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local/
cd /usr/local/
mv mysql-9.4.0-linux-glibc2.28-x86_64 mysql
# 或 ln -s mysql-9.4.0-linux-glibc2.28-x86_64 mysql
创建专用用户和组

创建一个不允许登录系统的 MySQL 专用用户,提升安全性。

groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 或 useradd -r -g mysql -s /usr/sbin/nologin mysql

-s 设置用户的登录 shell。 /bin/false 一个总是返回失败的程序,这样设置后,该用户无法通过 shell 登录系统。 /usr/sbin/nologin 达到类似效果,并给出友好提示。

4. 安装后配置

配置环境变量

将 mysql 加入环境变量中。

vim /etc/profile.d/mysql.sh

编辑 mysql.sh 内容:

export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
source /etc/profile.d/mysql.sh
创建配置文件

通过将它们放在 MySQL 配置文件中来指定 MySQL 服务器在启动时应使用的选项。如果不这样做,服务器将以其默认设置启动。要创建 MySQL 配置文件,请以 root 身份发出以下命令:

cd /etc
vim my.cnf

添加以下设置到配置文件中:

[client]
socket=/usr/local/mysql/data/mysql.sock

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
port=3306
log-error=/usr/local/mysql/data/host_name.err
user=mysql
secure_file_priv=NULL
local_infile=OFF
初始化数据目录

进入 MySQL 目录并初始化数据目录。

cd /usr/local/mysql
mkdir data
chmod 750 data
chown mysql:mysql data
bin/mysqld --defaults-file=/etc/my.cnf --initialize

初始化输出被打印到日志 (/usr/local/mysql/data/localhost.log) 中。

5. 使用 systemd 启动服务器

添加一个 systemd 服务单元配置文件。

cd /usr/lib/systemd/system
vim mysqld.service

将此配置信息添加到 mysqld.service 文件中:

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE =10000

使用以下命令来管理 MySQL 服务。

# 使 mysqld 服务在重新启动时自动启动
systemctl enable mysqld.service
# 手动启动 mysqld 服务
systemctl start mysqld
# 检查 mysqld 服务的状态
systemctl status mysqld

五、重置 MySQL root 账户密码

使用客户端,使用服务器在初始化序列期间生成的随机密码 mysql 连接到服务器:root@localhost。

# Yum 安装
grep 'temporary password' /var/log/mysqld.log
# 二进制安装
grep 'temporary password' /usr/local/mysql/data/*.err
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
exit;

💡 提示:如果启用了 validate_password 插件(默认开启),密码必须满足强度策略(大写、小写、数字、特殊字符、长度 ≥ 8)。

六、测试 MySQL 服务器

使用 mysqlshow 验证您是否可以从服务器检索信息。

mysqlshow -u root -p

使用 mysqladmin 查看 MySQL 服务器版本信息。

mysqladmin -u root -p version

七、开启远程访问权限

需要登录到 MySQL 服务器,执行下面的命令:

-- 1. 创建用户
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
-- 2. 授权
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
-- 3. 刷新权限
FLUSH PRIVILEGES;

这里的 username 和 password 分别是远程用户的用户名和密码,% 表示允许任何 IP 地址的用户连接。如果需要限制特定 IP 地址,可以将 % 替换为具体的 IP 地址。

编辑 MySQL 的配置文件 my.cnf,允许任意 IP 地址访问:

[mysqld]
# 注释掉或删除这一行(如果存在):
# bind-address = 127.0.0.1
# 或显式绑定到所有地址:
bind-address = 0.0.0.0

修改后,保存文件并重启 MySQL 服务以使更改生效:

systemctl restart mysqld

在客户端计算机上,使用以下命令尝试连接到远程 MySQL 服务器:

mysql -h server_ip -P 3306 -u username -p
# 例如 mysql -h 192.168.100.128 -P 3306 -uroot -p123456

八、常见问题

1. MySQL 服务无法启动

可以运行 systemctl status mysql 查看服务状态,或者通过 journalctl -xe 查看系统日志来排查问题。

2. SELinux 或 AppArmor 阻止执行

临时禁用 SELinux 测试:

setenforce 0
systemctl start mysqld

如果成功,说明是 SELinux 策略问题。可恢复后添加策略:

setenforce 1
restorecon -R /usr/local/mysql
# 或使用 audit2allow 生成自定义策略

3. 客户端连接失败

检查防火墙设置

确保服务器的防火墙开放了 MySQL 的默认 3306 端口。可以使用以下命令。

firewall-cmd --list-ports | grep 3306

如果没有放行(输出是空的),执行以下命令,重新检查:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
检查 MySQL 绑定地址

查看 MySQL 配置文件(如 /etc/mysql/my.cnf)中的 bind-address 选项。如果希望从其他机器连接,需将其设置为服务器的 IP 地址或 0.0.0.0(注意安全风险),或者直接注释掉该行。

如果服务端只允许本机访问(127.0.0.1),则在客户端执行下面的命令:

ssh -L 3307:127.0.0.1:3306 [email protected]
# 或 ssh -fNL 3307:127.0.0.1:3306 [email protected]
mysql -h 127.0.0.1 -P 3307 -u myuser -p

-L 3307:127.0.0.1:3306:表示将本地机器的 3307 端口 转发到远程服务器上的 127.0.0.1:3306。 [email protected]:是你在远程服务器上的登录账户和主机地址。 -fNL:在后台运行,不执行远程命令,同时设置本地端口转发。 如果是后台运行,Linux/MacOS 用 ps aux | grep ssh,Windows 用 get-process ssh*,找到进程并 kill <PID>。

4. 忘记 root 密码

  1. 停止 MySQL 服务。
  2. 在配置文件中(如 [mysqld] 段下)添加 skip-grant-tables。
  3. 重启 MySQL 服务,此时可以不需密码登录。
  4. 执行 FLUSH PRIVILEGES; 后重设 root 密码。
  5. 移除 skip-grant-tables 配置,重启 MySQL 服务。

参考:

  • MySQL :: MySQL 9.0 参考手册
  • MySQL 安全部署指南

目录

  1. CentOS 7/8/9 安装 MySQL 8.0+ 完整指南
  2. 一、流程图
  3. 二、安装前的准备工作
  4. 1. 更新系统软件包
  5. 2. 检查是否已安装 MySQL
  6. 3. 卸载旧版本
  7. 4. 清理残留文件
  8. 删除配置文件
  9. 删除数据目录(注意:会删除所有数据)
  10. 删除日志文件
  11. 三、使用包管理器安装(简单,易管理)
  12. 1. 添加 MySQL Yum 存储库
  13. 2. 禁用默认的 MySQL 模块(仅限 EL8 系统)
  14. 3. 安装 MySQL
  15. 4. 启动 MySQL 服务器
  16. 四、手动安装二进制包(难,但更灵活)
  17. 1. MySQL Linux 通用二进制分发目录
  18. 2. 命令序列如下所示
  19. 3. 安装二进制包
  20. 安装 libaio 库
  21. 下载和解压
  22. 或 ln -s mysql-9.4.0-linux-glibc2.28-x86_64 mysql
  23. 创建专用用户和组
  24. 或 useradd -r -g mysql -s /usr/sbin/nologin mysql
  25. 4. 安装后配置
  26. 配置环境变量
  27. 创建配置文件
  28. 初始化数据目录
  29. 5. 使用 systemd 启动服务器
  30. 使 mysqld 服务在重新启动时自动启动
  31. 手动启动 mysqld 服务
  32. 检查 mysqld 服务的状态
  33. 五、重置 MySQL root 账户密码
  34. Yum 安装
  35. 二进制安装
  36. 六、测试 MySQL 服务器
  37. 七、开启远程访问权限
  38. 注释掉或删除这一行(如果存在):
  39. bind-address = 127.0.0.1
  40. 或显式绑定到所有地址:
  41. 例如 mysql -h 192.168.100.128 -P 3306 -uroot -p123456
  42. 八、常见问题
  43. 1. MySQL 服务无法启动
  44. 2. SELinux 或 AppArmor 阻止执行
  45. 或使用 audit2allow 生成自定义策略
  46. 3. 客户端连接失败
  47. 检查防火墙设置
  48. 检查 MySQL 绑定地址
  49. 或 ssh -fNL 3307:127.0.0.1:3306 [email protected]
  50. 4. 忘记 root 密码

更多推荐文章

查看全部
  • 人工智能:自然语言处理(NLP)实战应用与优化
  • 使用 Ollama 在本地运行大模型指南
  • Java 方法封装与递归详解
  • 构建高效的本地知识库:RAG 技术的应用与实践
  • AI 大模型核心概念、原理与应用梳理
  • 两两交换链表中的元素
  • Python 单线程、多线程与多进程详解及代码示例
  • MCP AI Copilot 高并发场景下响应延迟瓶颈及突破方案
  • Ollama 本地大语言模型安装与部署指南
  • Visual Studio 17.14 GitHub Copilot 大模型配置指南
  • C++ STL 标准库算法详解
  • C++ 编程核心机制与工程实践详解
  • C++ priority_queue 优先级队列详解与模拟实现
  • C++ 位图与布隆过滤器:原理与实现
  • AI 产品经理转行大模型:必备素质与技能指南
  • 医疗 AI 场景下的逻辑回归算法实战
  • Spring Bean 作用域、生命周期与自动装配源码解析
  • GitHub 学生认证及 PyCharm Copilot 配置流程
  • 连通块问题解析与 C++ 代码实现
  • DeepFace + OpenCV 实现实时情绪分析系统

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online