# MySQL 8.4.x LTS部署维护参考手册Linux

北京致远互联软件股份有限公司

2026年6月

# 适用范围

本手册适用于使用 MySQL 8.4官方 Linux Generic 二进制包,手工完成 MySQL 8.4.x 的安装、配置、启动、验证、升级和卸载。

参考手册仅提供单机部署方案,如需MySQL高可用方案请自行寻找专业厂商支持

适用结果如下:

  • 程序目录:/usr/local/mysql
  • 数据目录:/data/mysql
  • 配置文件:/etc/my.cnf
  • 启动文件:/etc/init.d/mysqld
  • 监听端口:3306
  • 默认 root 密码:Seeyon123.

# 合规性

MySQL 提供社区版和商业版两条产品线。

  • 社区版(Community Edition):采用 GPLv2 许可。
  • 商业版(Enterprise Edition):需要单独购买许可。

本手册按社区版二进制包编写。正式项目落地前,需要确认所用版本和授权方式符合客户的合规要求。

# 前言

本手册提供 MySQL 8.4.x 二进制包的手工安装步骤。二进制包方案兼容性较好,目录清晰,后续维护也直接。

本文默认以 MySQL Community Server 为例。

# 环境准备

# 1. 系统要求

  • 需要 root 权限。
  • 需要可用的 yumdnf 软件源。
  • 需要确认当前机器架构与 MySQL 包匹配。
  • 需要确认当前系统的 GLIBC 版本满足 MySQL 官方包要求。

# 2. 文件准备

下载地址:https://dev.mysql.com/downloads/mysql (opens new window)

  • Select Version:选择8.4.x LTS版本
  • Select Operating System:无论什么Linux系统都选择Linux - Generic
  • Select OS Version:本演示系统是x86/64位/GLIBC 2.39,于是下载最接近的glibc2.28 x86 64-bit版本

通过uname -a命令来判断当前操作系统芯片和位数;通过ldd --version命令来看glibc版本,下载的安装包glibc尽量<=操作系统的glibc

最终下载的文件名格式如 mysql-8.4.x-*.tar.xz

1782659592866.png

# 3. 前置检查

安装前先确认以下内容:

  • /usr/local/mysql 不存在。
  • /data/mysql 不存在,或者已经确认可以清空重建。
  • 3306 端口未被其他服务占用。
  • 服务器磁盘空间足够。

检查命令如下:

id
ss -lntp | grep 3306
ls -ld /usr/local/mysql /data/mysql
uname -m
ldd --version | head -1

# 软件 / 权限 / 网络要求

# 1. 依赖包

先补齐基础依赖,再安装 MySQL 需要的运行库:

基于CentOS8+/RHEL8+/Fedora22+/欧拉openEuler/龙蜥Anolis等系统使用dnf安装

dnf install -y tar curl net-tools unzip vim telnet

基于CentOS7/RHEL7及更早体系的系统使用yum命令安装:

yum install -y tar curl net-tools unzip vim telnet

基于Debian的系统(如Ubuntu)使用apt预装组件:

sudo apt install tar net-tools unzip vim telnet -y

# 2. 安装 libaio

MySQL 官方二进制包依赖 libaio。不同发行版的安装方式不同。

Red Hat 系列:

yum -y install libaio perl perl-devel

Debian 系列(包括 Ubuntu):

sudo apt update
sudo apt install -y libaio1 perl

Ubuntu 24.04 和 22.04 的包名可能不同。如果 libaio1 不可用,先确认系统仓库里的实际包名,再安装对应版本。

# 3. Ubuntu 兼容

Ubuntu 以 systemd 为主,部分二进制包手工安装场景需要额外处理服务文件和运行库。

Ubuntu 上建议额外执行以下检查:

apt install -y numactl
ldconfig -p | grep libaio

如果系统中 libaio.so.1 不存在,但已经安装了 libaio1t64,可以按实际文件名建立兼容软链接。

cd /usr/lib/x86_64-linux-gnu/
ln -s libaio.so.1t64.0.2 libaio.so.1
ln -s libncurses.so.6.4 libncurses.so.6

# 4. 防火墙要求

如果需要远程连接 MySQL,必须放行 3306/tcp

# 5. 账号要求

建议提前准备一个 root 登录会话,避免安装中途切换权限导致命令失败。

# 安装前 Linux 参数优化

生产环境建议检查以下参数:

  • ulimit -n 不低于 65535
  • ulimit -u 不低于 65535
  • SELINUX=disabled 或已确认不会阻断 MySQL 启动

如果要调整持久配置,需要结合当前发行版的系统参数管理方式处理,本章节提供参考修改参考。

# 1. 调整文件句柄和进程数

先检查当前值:

ulimit -a

如果需要持久生效,编辑 /etc/security/limits.conf,追加以下内容:

# RedHat系列、CentOS、欧拉、麒麟等大部分系统使用的配置====start
# open files
* soft nofile 65535
* hard nofile 65535
# max user processes
* soft nproc 65535
* hard nproc 65535
# RedHat系列、CentOS、欧拉、麒麟等大部分系统使用的配置====end


# 如Debian和Ubuntu系统使用root用户,还需添加如下配置====start
# root user
root soft nofile 65535
root hard nofile 65535
root soft nproc 65535
root hard nproc 65535
# 如Debian和Ubuntu系统使用root用户,还需添加如上配置====end

修改后重启系统,再确认:

ulimit -n
ulimit -u

# 2. 关闭 SELinux

如果当前系统启用了 SELinux,建议先关闭,避免安装和启动阶段被拦截。

临时关闭:

setenforce 0

永久关闭:

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

修改后重启系统生效。

# 卸载 MariaDB

确保当前系统下没有MySQL,也没有MariaDB,如果有会影响MySQL安装。

# 1. 先确认是否已安装

systemctl status mariadb
rpm -qa | grep mariadb
dpkg -l | grep mariadb

# 2. Debian / Ubuntu 卸载

apt-get remove --purge mariadb-server mariadb-client -y
apt-get autoremove -y
apt-get autoclean
rm -rf /etc/mysql /var/lib/mysql

# 3. Red Hat 系列卸载

yum remove mariadb-server mariadb-client -y
rm -rf /etc/mysql /var/lib/mysql

# 4. 注意事项

  • 先确认数据库不再需要。
  • 卸载前最好先备份 /etc/mysql/var/lib/mysql
  • 如果系统里还有依赖 MariaDB 的业务,不要直接清理。

# 部署步骤

# 1. 创建用户和用户组

先创建 mysql 用户和用户组:

groupadd mysql
useradd -g mysql -s /bin/false mysql

如果提示已存在,可以忽略重复创建错误。

# 2. 解压安装包

把安装包放到当前目录后,解压到 /usr/local

tar -xvf mysql-8.4.x-linux-glibc2.x-x86_64.tar.xz -C /usr/local/

解压后确认目录名,例如 mysql-8.4.x-linux-glibc2.x-x86_64

# 3. 创建软链接

将版本目录固定为 /usr/local/mysql,方便后续维护:

ln -sfn /usr/local/mysql-8.4.x-linux-glibc2.x-x86_64 /usr/local/mysql
readlink -f /usr/local/mysql

# 4. 创建数据目录

创建数据目录并授权:

mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql

# 5. 准备配置文件

在/etc下创建my.cnf文件,用于管理MySQL的配置:

vim /etc/my.cnf

将如下配置写入 /etc/my.cnf 文件中:

[client]
port=3306
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
port=3306
basedir=/usr/local/mysql/
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/data/mysql/seeyon.mysql.pid
# MySQL8.4需要临时关闭强制模式,否则seeyon产品安装会报错:Row size too large (> 8126)
# 安装升级seeyon后记得将此参数由OFF改为ON,否则使用久了可能有性能问题
innodb_strict_mode=OFF
log-output=FILE
general-log=0
general_log_file=/data/mysql/seeyon-mysql84-general.log
slow_query_log=1
slow_query_log_file=/data/mysql/seeyon-mysql84-slow.log
long_query_time=10
log-error=/data/mysql/seeyon-mysql84.err
authentication_policy=mysql_native_password
default-storage-engine=INNODB
character-set-server=utf8mb4
# 设置数据库开启的最大连接数
max_connections=1000
# 同一客户端连接尝试失败次数,超出次数即被冻结
max_connect_errors=100
transaction_isolation=READ-COMMITTED
max_allowed_packet=64M
default-time-zone='+8:00'
log_bin_trust_function_creators=1
log_timestamps=system
# seeyon环境必须大小写不敏感
lower_case_table_names=1
table_open_cache=2000
tmp_table_size=512M
key_buffer_size=512M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
# *极其重要的数据库内存参数,一般建议将服务器可用物理内存的 50% 到 80% 分配给 innodb_buffer_pool_size
innodb_buffer_pool_size=8G
innodb_redo_log_capacity=2G
innodb_autoextend_increment=64
# 该参数值请根据innodb_buffer_pool_size大小来设置,4G以下不需要设置该参数
# 当innodb_buffer_pool_size在8G以上时可以设置为4;32G以上可以设置为8
innodb_buffer_pool_instances=4
innodb_open_files=300
innodb_file_per_table=1

# 生产环境建议开启binlog,可用于恢复数据库,降低数据丢失风险
# 以下配置默认保留7天,但注意如果磁盘空间不足,可能在突发大量数据变更操作后耗尽磁盘空间
# log_bin = mysql-bin
# expire_logs_days = 7
# max_binlog_size = 1024M
# binlog_format = ROW
# sync_binlog = 1

关于致远协同管理软件my.cnf配置,有几个关键信息需要配置:

1、数据引擎要求为InnoDB

2、MySQL8字符集要求为utf8mb4,早期MySQL版本可设置为utf8

3、要求不区分表/字段大小写 lower_case_table_names=1

4、MySQL8系列,时区默认为美国时区,中国用户若要正常使用,需修改mysql配置文件为default-time-zone='+8:00'

5、MySQL5.7或者以上版本,需要设置数据库日志时间匹配系统时区 log_timestamps=system

6、innodb_buffer_pool_size 参数是非常关键的性能指标,生产库建议按照服务器可用内存的50%-80%配置

7、MySQL8.4版本必须配置 innodb_strict_mode=OFF ,否则seeyon产品安装会报错:Row size too large (> 8126) ,seeyon安装完成后OFF设置为ON,避免后续性能问题

# 6. 初始化数据库

my.cnf参数配置完成后,给mysql用户授权相关权限:

chown mysql:mysql /etc/my.cnf
chmod 644 /etc/my.cnf

使用官方推荐的初始化方式生成临时密码:

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --initialize

安装完成后,找到/etc/my.cnf中的log-error参数值,这个参数路径存放了日志,根据这个日志能找到mysql的初始化密码:

grep 'temporary password' /data/mysql/seeyon-mysql84.err

为什么要这么做:先让 MySQL 生成临时密码,再登录修改为项目统一密码,更接近官方安装流程。

拷贝类似如下图所示的这串字符串,这个就是初始化MySQL后生成的密码,做好备份,我们需要拿着它登录MySQL:

1732089704168.png

# 7. 配置启动文件

复制官方启动文件到系统启动目录:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's|^basedir=.*|basedir=/usr/local/mysql|' /etc/init.d/mysqld
sed -i 's|^datadir=.*|datadir=/data/mysql|' /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

# 8. 启动服务

# 启动服务命令
service mysqld start

# 如果确认mysql启动成功,可以通过如下命令设置mysql开机自启动
chkconfig mysqld on

如果系统使用 systemd,也可以先通过兼容方式启动,再检查 mysqld 是否在运行。

Ubuntu 上如果 service mysqld startUnit mysqld.service not found,需要改用 systemd 服务文件。

cat >/etc/systemd/system/mysqld.service <<'EOF'
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/usr/local/mysql/support-files/mysql.server restart
User=mysql
Group=mysql
PIDFile=/data/mysql/seeyon.mysql.pid

[Install]
WantedBy=multi-user.target
EOF

以上完成后,通过systemd命令启动服务:

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld

# 9. 设置 root 密码

先使用初始化时生成的临时密码登录,再修改 root@localhost 密码,本示例修改密码为 Seeyon123. ,项目上可自行根据实际情况修改:

/usr/local/mysql/bin/mysql -uroot -p'临时密码' -h127.0.0.1 -P3306 -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Seeyon123.'; FLUSH PRIVILEGES;"

默认 root@localhost 账号仅允许本机访问,如需远程访问需再创建远程 root 账号并授权(密码自行调整):

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'Seeyon123.'; ALTER USER 'root'@'%' IDENTIFIED BY 'Seeyon123.'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"

# 10. 创建应用账号和空库

部分客户不允许直接使用root账号,可参考如下命令创建seeyon服务自主维护的账号和数据库,示例如下:

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "CREATE USER IF NOT EXISTS 'seeyon'@'%' IDENTIFIED BY 'oapwd654321'; GRANT ALL PRIVILEGES ON *.* TO 'seeyon'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; CREATE DATABASE IF NOT EXISTS SEEYONV5 DEFAULT CHARACTER SET UTF8MB4;"

# 11. 放行端口

如果启用了 firewalld

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

如果启用了 iptables

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

# 验证

# 1. 检查进程

ps -ef | grep mysqld | grep -v grep

# 2. 检查端口

ss -lntp | grep 3306

# 3. 检查版本

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "SELECT VERSION();"

如果使用临时密码登录失败,优先确认 temporary password 是否复制正确。

# 4. 检查账号

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "SELECT user,host FROM mysql.user WHERE user='root';"

也可以顺手检查 seeyon 用户和 SEEYONV5 数据库是否创建成功。

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "SELECT user,host FROM mysql.user WHERE user='seeyon'; SHOW DATABASES LIKE 'SEEYONV5';"

# 5. 检查目录

ls -ld /usr/local/mysql /data/mysql

# 日志检查

# 1. 错误日志

错误日志默认在:

/data/mysql/seeyon-mysql84.err

启动失败时,先看这里。

# 2. 慢日志

慢查询日志默认在:

/data/mysql/seeyon-mysql84-slow.log

# 3. 通用日志

通用查询日志默认在:

/data/mysql/seeyon-mysql84-general.log

# 日常运维

# 1. 启停服务

启动:

service mysqld start

停止:

service mysqld stop

重启:

service mysqld restart

# 2. 查看状态

service mysqld status

# 3. 备份数据

建议先做逻辑备份:

/usr/local/mysql/bin/mysqldump -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 --all-databases --single-transaction --routines --triggers --events > /data/mysql/all_databases.sql

如果数据量较大,建议结合物理备份工具和停机窗口执行。

# 4. 查看连接数

/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "SHOW STATUS LIKE 'Threads_connected';"

# 5. 清理日志

定期检查 /data/mysql 下日志文件大小,避免磁盘被日志占满。

# 升级

# 1. 升级前提

  • 先完成全量备份。
  • 先阅读目标版本官方 Release Notes。
  • 确认目标版本可以从当前版本直接升级。
  • 确认数据目录已保留完整。

# 2. 升级步骤

  1. 停止 MySQL。
service mysqld stop
  1. 备份配置文件和启动文件。
cp /etc/my.cnf /root/my.cnf.$(date +%Y%m%d%H%M%S).bak
cp /etc/init.d/mysqld /root/mysqld.$(date +%Y%m%d%H%M%S).bak
  1. 解压新版本到 /usr/local
tar -xvf mysql-8.4.z-linux-glibc2.x-x86_64.tar.xz -C /usr/local/
  1. 切换软链接到新版本目录。
ln -sfn /usr/local/mysql-8.4.z-linux-glibc2.x-x86_64 /usr/local/mysql
  1. 更新启动文件中的 basedirdatadir
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's|^basedir=.*|basedir=/usr/local/mysql|' /etc/init.d/mysqld
sed -i 's|^datadir=.*|datadir=/data/mysql|' /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
  1. 启动 MySQL,触发版本升级流程。
service mysqld start
  1. 确认版本号。
/usr/local/mysql/bin/mysql -uroot -p'Seeyon123.' -h127.0.0.1 -P3306 -e "SELECT VERSION();"

# 卸载

# 1. 卸载前确认

  • 确认需要保留还是删除 /data/mysql
  • 确认已有备份。
  • 确认不再需要当前实例。

# 2. 卸载步骤

  1. 停止服务。
service mysqld stop
  1. 关闭开机自启。
chkconfig mysqld off
  1. 备份配置文件。
cp /etc/my.cnf /root/my.cnf.uninstall.$(date +%Y%m%d%H%M%S).bak
  1. 删除启动文件和软链接。
rm -f /etc/init.d/mysqld
rm -f /usr/local/mysql
  1. 删除程序目录。
rm -rf /usr/local/mysql-8.4.x-linux-glibc2.x-x86_64
rm -f /etc/my.cnf
  1. 按需删除数据目录。
rm -rf /data/mysql
  1. 删除用户和用户组。
userdel mysql
groupdel mysql

# 常见问题

# 1. MySQL 无法启动

现象:执行 service mysqld start 后进程没有起来。

处理:优先查看 /data/mysql/seeyon-mysql84.err,重点检查:

  • my.cnf 路径是否正确。
  • datadir 权限是否为 mysql:mysql
  • 3306 是否被占用。
  • 安装包架构是否正确。

# 2. root 无法登录

现象:密码设置后仍然登录失败。

处理:确认使用的是 root@localhost 的密码,并检查是否误用了错误的主机参数。

# 3. 远程访问失败

现象:本机可登录,远程不可登录。

处理:确认已经创建 root@'%',并检查防火墙是否放行 3306/tcp

编撰人:het