首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >别再yum装MySQL了!教你大厂级部署法部署MySQL8.4,实测无坑,可无脑照抄

别再yum装MySQL了!教你大厂级部署法部署MySQL8.4,实测无坑,可无脑照抄

作者头像
俊才
发布2026-01-19 14:00:20
发布2026-01-19 14:00:20
1390
举报
文章被收录于专栏:数据库干货铺数据库干货铺

很多同学可能刚因MySQL5.7 EOL后将MySQL升级到了MySQL8.0。但是再一看MySQL8.0的生命周期,彻底绷不住了。要求比较高的公司又需要将数据库升级到MySQL8.4,开发同学也要配合进行兼容性验证及调整了。

1331dc6c84b23e99487278451025c49.png
1331dc6c84b23e99487278451025c49.png

从上面官方公布的声明周期表中可以看到MySQL 8.0 版本的 “保质期” 要到了!预计在2026年4月,它就将迎来EOL(End of Life,生命周期终止),届时官方不再提供安全更新、漏洞修复,使用风险直线上升!这个时候,2024 年 4 月 30 日发布的 MySQL 8.4 LTS 版本,就成了咱们升级的首选!

关于其新特性之前的文章中有提到,感兴趣的可以阅读

刚升级到MySQL8.0就凉凉,是时候准备再次重启升级了

本文将介绍如何进行二进制方式部署MySQL8.4。可能有的人会疑惑,为何大家生成环境都习惯采用官方提供的通用二进制包(Generic Linux Tarball)部署,其实是因为此方式具有以下优势:

  • 无需编译,部署快速
  • 不依赖系统包管理器(如 yum/apt),避免版本冲突
  • 可灵活控制安装路径与权限
  • 易于实现多实例部署

下面我们就正式开始进入生产环境的较为全面的部署步骤。

1. 准备工作

本次是在CentOS7上进行安装,Ubuntu、Roky等操作系统的部署方式几乎一样,只是命令会有区别。

1.1 操作系统层准备工作

操作系统建议做如下准备:

  1. 推荐使用 64 位 Linux 系统(glibc ≥ 2.17)
  2. 内核版本 ≥ 3.10
  3. 建议关闭 SELinux(或配置正确策略)
  4. 关闭防火墙或开放 3306 端口(如需远程访问)
  5. 修改系统限制及内核优化等
  6. 相关依赖安装
  7. 创建mysql用户,避免使用root账号启动数据库

下面对几个核心内容进行操作演示。

  • 关闭SELINUX

编辑/etc/sysconfig/selinux 文件,将SELINUX改为disabled

编辑完毕执行 setenforce 0生效

代码语言:javascript
复制
[root@vbox ~]# setenforce  0 
  • 关闭防火墙

默认情况下,操作系统防火墙是开启的,因此需要先关闭,并且禁止自启动。如果安全方面要求比较高,可以不关闭,但是要开启3306 等端口,以免其他主机无法连接数据库。

代码语言:javascript
复制
[root@vbox ~]# systemctl status   firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2026-01-14 04:13:01 EST; 21s ago
     Docs: man:firewalld(1)
 Main PID: 13831 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─13831 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
Jan 14 04:13:01 vbox systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 14 04:13:01 vbox systemd[1]: Started firewalld - dynamic firewall daemon.
Jan 14 04:13:01 vbox firewalld[13831]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
[root@vbox ~]# systemctl stop   firewalld
[root@vbox ~]# systemctl disable  firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
  • 调整系统限制

操作系统默认的句柄等较小,如果表比较多等情况下,如果配置较小,表数据量较多时,做相关操作(如xtrabackup进行物理备份等)将可能报错。

修改 /etc/security/limits.conf,添加如下内容

代码语言:javascript
复制
mysql soft nofile 65536
mysql hard nofile 65536
mysql soft nproc 65536
mysql hard nproc 65536

也可以ulimit -n 65536 命令行方式进行临时修改

  • 禁用透明大页(THP)

由于透明大页的设计初衷与MySQL这类数据库的工作负载特性存在冲突,可能引发性能波动,因此建议禁用。

执行以下命令可以立即关闭透明大页,会立即生效,但重启后失效

代码语言:javascript
复制
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag  
# 同时关闭碎片整理功能

建议修改 /etc/rc.local文件,这样可以确保服务器重启后设置依然有效。

代码语言:javascript
复制
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
  • 配置内核参数

在/etc/sysctl.conf中添加对于的配置,建议至少添加如下参数

代码语言:javascript
复制
# /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 65535
fs.file-max = 2097152

执行sysctl -p生效

相关参数介绍及其他内核参数调整可以参考历史文章

深度优化数据库性能:Linux 内核参数调整解析

  • 安装依赖

MySQL 8.4 仍依赖 libaio(异步 I/O)和 libnuma(NUMA 支持)

代码语言:javascript
复制
yum install libaio numactl-libs  -y
  • 添加mysql用户

MySQL的初始化、启动等均使用mysql用户,因此需添加一个mysql用户

代码语言:javascript
复制
# 创建 mysql 用户(禁止登录)
 useradd -r -s /sbin/nologin mysql

1.2 下载安装包

官方社区版下载地址:https://dev.mysql.com/downloads/mysql/

很多人疑惑,为何现在选了版本和操作系统后还要进一步选择glibc版本,我该选择哪个glibc版本的。

其实要看自己的操作系统的glibc版本,例如:

我的操作系统版本是CentOS7.9,默认的glibc版本是ldd (GNU libc) 2.17

代码语言:javascript
复制
[root@vbox ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@vbox ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

所以高于这个glibc的安装包就不可以选择,因此我们可以选择

2. 实例部署

2.1 处理数据库安装包

将数据库安装包上传至服务器上,例如/usr/local下,再解压、创建软连接(便于后续升级、多版本等)、修改属主

代码语言:javascript
复制
[root@vbox local]# xz -d mysql-8.4.7-linux-glibc2.17-x86_64.tar.xz 
[root@vbox local]# ll -h
total 1.5G
drwxr-xr-x. 2 root root    6 Apr 11  2018 bin
drwxr-xr-x. 2 root root    6 Apr 11  2018 etc
drwxr-xr-x. 2 root root    6 Apr 11  2018 games
drwxr-xr-x. 2 root root    6 Apr 11  2018 include
drwxr-xr-x. 2 root root    6 Apr 11  2018 lib
drwxr-xr-x. 2 root root    6 Apr 11  2018 lib64
drwxr-xr-x. 2 root root    6 Apr 11  2018 libexec
-rw-r--r--. 1 root root 1.5G Jan 14 06:15 mysql-8.4.7-linux-glibc2.17-x86_64.tar
drwxr-xr-x. 2 root root    6 Apr 11  2018 sbin
drwxr-xr-x. 5 root root   49 Jan 13 20:19 share
drwxr-xr-x. 2 root root    6 Apr 11  2018 src
[root@vbox local]# tar -xvf mysql-8.4.7-linux-glibc2.17-x86_64.tar 
mysql-8.4.7-linux-glibc2.17-x86_64/bin/
mysql-8.4.7-linux-glibc2.17-x86_64/bin/myisam_ftdump
mysql-8.4.7-linux-glibc2.17-x86_64/bin/myisamchk

解压后添加一个mysql8.4的软链接,再修改属主为mysql:root组

代码语言:javascript
复制
ln -s mysql-8.4.7-linux-glibc2.17-x86_64 mysql8.4
 cd mysql8.4
chown -R mysql:root .

2.2 创建相关目录

建议创建数据目录、日志目录、配置文件目录及临时文件目录,如果生产环境有条件,可以将数据目录和日志目录放在不同的磁盘上(数据目录放在高性能磁盘,如SSD,因为数据目录是随机读写较多;日志目录放在机械盘,因为日志是顺序写),分散压力。

代码语言:javascript
复制
# 创建目录
mkdir -p /data/mysql/mysql3306/{data,logs,etc,tmp}
# 修改属主
chown -R  mysql:mysql  /data/mysql/mysql3306/

2.3 创建配置文件

vim /data/mysql/mysql3306/etc/my.cnf,添加相关参数

如需生产环境已经调试过的配置文件,可以关注我的公众“数据库干货铺”获取。

2.4 初始化实例

完成配置文件设置后,可以进行实例的初始化操作。初始化时,对应的数据目录等参数可以直接用--defaults-file=/data/mysql/mysql3306/etc/my.cnf 的方式从配置文件里读取。具体操作如下

代码语言:javascript
复制
cd /usr/local/mysql8.4/
bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf  --initialize --user=mysql

成功后会在日志中输出临时 root 密码,记录该密码,首次登录需修改。例如:

代码语言:javascript
复制
grep "temporary password" /data/mysql/mysql3306/logs/mysqld.log 
2026-01-14T19:38:18.113660Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <E,-q/dBL6-p

至此,数据库实例便创建完毕,已经可以启动使用了。

注意: 初始化后要打开日志文件查询一下是否有异常。

2.5 启动数据库并修改初始密码

先用非服务的方式启动(后续再配置服务)。因为socket文件不在默认的/tmp/mysql.sock 因此需要指定,密码就是日志里的初始化密码,然后登录数据库,进行数据库密码修改操作(不修改初始化密码无法进行其他操作),密码设置为强密码且妥善保管。

代码语言:javascript
复制
[root@vbox mysql8.4]# /usr/local/mysql8.4/bin/mysqld_safe  --defaults-file=/data/mysql/mysql3306/etc/my.cnf   &
[1] 14967
[root@vbox mysql8.4]# 2026-01-14T11:47:36.972672Z mysqld_safe Logging to '/data/mysql/mysql3306/logs/mysqld.log'.
2026-01-14T11:47:37.051154Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql3306/data
[root@vbox mysql8.4]# /usr/local/mysql8.4/bin/mysql -uroot -p'<E,-q/dBL6-p' --socket=/data/mysql/mysql3306/tmp/mysql.sock -A 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user root@'localhost' identified by 'Strong.Password2026!';
Query OK, 0 rows affected (0.02 sec)

如有需要可以创建应用账号

代码语言:javascript
复制
-- 可选:创建应用用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass!2026';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
EXIT;

3. 其他操作

3.1 配置环境变量及动态库

在/etc/profile里添加mysql相关的环境变量及动态库

代码语言:javascript
复制
export MYSQL_HOME=/usr/local/mysql8.4
export PATH=$MYSQL_HOME/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mysql8.4/lib:$LD_LIBRARY_PATH

添加完毕后执行source /etc/profile 命令立即生效

3.2 配置服务

先将实例关闭,便于后面验证。

  • 配置服务

创建服务文件 /etc/systemd/system/mysqld.service,添加如下内容

代码语言:javascript
复制
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=notify
ExecStart=/usr/local/mysql8.4/bin/mysqld  --defaults-file=/data/mysql/mysql3306/etc/my.cnf
TimeoutSec=300
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
[Install]
WantedBy=multi-user.target
  • 重载服务
代码语言:javascript
复制
systemctl daemon-reload
systemctl enable mysqld
  • 启动数据库
代码语言:javascript
复制
systemctl  start   mysqld
systemctl  status   mysqld

这样服务就配置完毕了。

4. 小结

通过二进制方式部署 MySQL 8.4,既能享受最新版本的性能与安全优势,又能保持部署的灵活性与可控性。相比 8.0,8.4 在向量计算、查询优化、自动化运维等方面有显著提升,是构建现代数据平台的理想选择。

建议:生产环境务必进行充分测试,尤其是从旧版本升级时,注意兼容性变更(如 SQL 语法、权限模型、默认参数等)。

对于数据库部署相关的问题,可以在留言区留言交流,也欢迎点赞、转发,给更多需要的朋友们看到此文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档