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

推荐新手在开始安装前完成以下步骤:
在开始安装之前,建议你先完成以下步骤:
更新系统,确保所有软件包都是最新状态。(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)
yum update
执行以下命令检查:
yum list installed | grep mysql
yum list installed | grep mariadb
如果存在旧版本,建议卸载以避免冲突。
yum remove <包名>
卸载后建议删除相关配置文件和数据目录。
# 删除配置文件
rm -rf /etc/my.cnf
# 删除数据目录(注意:会删除所有数据)
rm -rf /var/lib/mysql
# 删除日志文件
rm -rf /var/log/mysqld.log
从 MySQL 官方下载 Yum 存储库。上传到服务器后执行(对于启用 dnf 的系统,请在命令中将 yum 替换为 dnf)。
yum localinstall mysql84-community-release-el9-1.noarch.rpm
您可以通过以下命令检查 MySQL Yum 存储库是否已成功添加并启用:
yum repolist enabled | grep mysql.*-community
基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包含一个默认情况下启用的 MySQL 模块。
yum module disable mysql
通过以下命令安装 MySQL。
yum install mysql-community-server
这将安装 MySQL 服务器软件包 (mysql-community-server),以及运行服务器所需组件的软件包,包括客户端软件包 (mysql-community-client)、客户端和服务器的通用错误消息和字符集 (mysql-community-common) 以及共享客户端库 (mysql-community-libs)。
使用以下命令启动 MySQL 服务器。
systemctl start mysqld
您可以使用以下命令检查 MySQL 服务器的状态。
systemctl status mysqld
如果操作系统启用了 systemd,则应使用标准的 systemctl(或者,使用参数反转的 service)命令,例如 stop、start、status 和 restart 来管理 MySQL 服务器服务。mysqld 服务默认情况下处于启用状态,并且在系统重启时启动。
| 目录 | 目录内容 |
|---|---|
bin | mysqld 服务器、客户端和实用程序 |
docs | Info 格式的 MySQL 手册 |
man | Unix 手册页 |
include | 包含(头)文件 |
lib | 库 |
share | 错误消息、字典和用于数据库安装的 SQL |
support-files | 各种支持文件 |
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
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 达到类似效果,并给出友好提示。
将 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) 中。
添加一个 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@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)。
使用 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
可以运行 systemctl status mysql 查看服务状态,或者通过 journalctl -xe 查看系统日志来排查问题。
临时禁用 SELinux 测试:
setenforce 0
systemctl start mysqld
如果成功,说明是 SELinux 策略问题。可恢复后添加策略:
setenforce 1
restorecon -R /usr/local/mysql
# 或使用 audit2allow 生成自定义策略
确保服务器的防火墙开放了 MySQL 的默认 3306 端口。可以使用以下命令。
firewall-cmd --list-ports | grep 3306
如果没有放行(输出是空的),执行以下命令,重新检查:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
查看 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>。
[mysqld] 段下)添加 skip-grant-tables。FLUSH PRIVILEGES; 后重设 root 密码。skip-grant-tables 配置,重启 MySQL 服务。参考:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online