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

从上面官方公布的声明周期表中可以看到MySQL 8.0 版本的 “保质期” 要到了!预计在2026年4月,它就将迎来EOL(End of Life,生命周期终止),届时官方不再提供安全更新、漏洞修复,使用风险直线上升!这个时候,2024 年 4 月 30 日发布的 MySQL 8.4 LTS 版本,就成了咱们升级的首选!
关于其新特性之前的文章中有提到,感兴趣的可以阅读
本文将介绍如何进行二进制方式部署MySQL8.4。可能有的人会疑惑,为何大家生成环境都习惯采用官方提供的通用二进制包(Generic Linux Tarball)部署,其实是因为此方式具有以下优势:
下面我们就正式开始进入生产环境的较为全面的部署步骤。
1. 准备工作
本次是在CentOS7上进行安装,Ubuntu、Roky等操作系统的部署方式几乎一样,只是命令会有区别。
1.1 操作系统层准备工作
操作系统建议做如下准备:
下面对几个核心内容进行操作演示。
编辑/etc/sysconfig/selinux 文件,将SELINUX改为disabled

编辑完毕执行 setenforce 0生效
[root@vbox ~]# setenforce 0 默认情况下,操作系统防火墙是开启的,因此需要先关闭,并且禁止自启动。如果安全方面要求比较高,可以不关闭,但是要开启3306 等端口,以免其他主机无法连接数据库。
[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,添加如下内容
mysql soft nofile 65536
mysql hard nofile 65536
mysql soft nproc 65536
mysql hard nproc 65536也可以ulimit -n 65536 命令行方式进行临时修改

由于透明大页的设计初衷与MySQL这类数据库的工作负载特性存在冲突,可能引发性能波动,因此建议禁用。
执行以下命令可以立即关闭透明大页,会立即生效,但重启后失效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 同时关闭碎片整理功能建议修改 /etc/rc.local文件,这样可以确保服务器重启后设置依然有效。
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中添加对于的配置,建议至少添加如下参数
# /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 65535
fs.file-max = 2097152执行sysctl -p生效

相关参数介绍及其他内核参数调整可以参考历史文章
MySQL 8.4 仍依赖 libaio(异步 I/O)和 libnuma(NUMA 支持)
yum install libaio numactl-libs -yMySQL的初始化、启动等均使用mysql用户,因此需添加一个mysql用户
# 创建 mysql 用户(禁止登录)
useradd -r -s /sbin/nologin mysql1.2 下载安装包
官方社区版下载地址:https://dev.mysql.com/downloads/mysql/
很多人疑惑,为何现在选了版本和操作系统后还要进一步选择glibc版本,我该选择哪个glibc版本的。
其实要看自己的操作系统的glibc版本,例如:
我的操作系统版本是CentOS7.9,默认的glibc版本是ldd (GNU libc) 2.17
[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下,再解压、创建软连接(便于后续升级、多版本等)、修改属主
[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组
ln -s mysql-8.4.7-linux-glibc2.17-x86_64 mysql8.4
cd mysql8.4
chown -R mysql:root .
2.2 创建相关目录
建议创建数据目录、日志目录、配置文件目录及临时文件目录,如果生产环境有条件,可以将数据目录和日志目录放在不同的磁盘上(数据目录放在高性能磁盘,如SSD,因为数据目录是随机读写较多;日志目录放在机械盘,因为日志是顺序写),分散压力。
# 创建目录
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 的方式从配置文件里读取。具体操作如下
cd /usr/local/mysql8.4/
bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf --initialize --user=mysql成功后会在日志中输出临时 root 密码,记录该密码,首次登录需修改。例如:
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 因此需要指定,密码就是日志里的初始化密码,然后登录数据库,进行数据库密码修改操作(不修改初始化密码无法进行其他操作),密码设置为强密码且妥善保管。
[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)
如有需要可以创建应用账号
-- 可选:创建应用用户
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相关的环境变量及动态库
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,添加如下内容
[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
systemctl daemon-reload
systemctl enable mysqldsystemctl start mysqld
systemctl status mysqld
这样服务就配置完毕了。
4. 小结
通过二进制方式部署 MySQL 8.4,既能享受最新版本的性能与安全优势,又能保持部署的灵活性与可控性。相比 8.0,8.4 在向量计算、查询优化、自动化运维等方面有显著提升,是构建现代数据平台的理想选择。
建议:生产环境务必进行充分测试,尤其是从旧版本升级时,注意兼容性变更(如 SQL 语法、权限模型、默认参数等)。
对于数据库部署相关的问题,可以在留言区留言交流,也欢迎点赞、转发,给更多需要的朋友们看到此文章。