二进制包安装MySQL 8.4 LTS最可控,需严格匹配glibc版本、初始化前配置lower_case_table_names=1、以mysql用户执行--initialize并授权目录、禁用RPM残留service、小内存机器须配swap。

直接用二进制包安装 MySQL 8.4 LTS 是最可控、最贴近生产环境的方式,尤其适合离线部署或需要自定义路径的场景。RPM 安装看似简单,但容易和系统自带的 MariaDB 冲突,且 systemd 单元文件行为不透明,初始化失败后排查成本高。
确认 glibc 版本与包匹配
MySQL 8.4.10 的官方二进制包分 glibc2.28 和 glibc2.17 两种,必须和系统 ldd --version 输出一致,否则启动时会报 undefined symbol: __libc_pread64 或直接段错误。
- Rocky/AlmaLinux 8.x、CentOS Stream 8 → 选
glibc2.28包 - CentOS 7.9、RHEL 7.x → 只能用
glibc2.17包(官网已归档,需从archives.mysql.com找) - glibc 不兼容时,
mysqld进程根本不会输出任何日志,连--console都没反应——这是最常被忽略的“静默失败”点
初始化前必须设好 lower_case_table_names
这个配置项一旦在 mysqld --initialize 之后修改,会导致后续所有表无法识别(报错 Table doesn't exist),因为数据目录里 .frm/.ibd 文件名大小写状态已固化。
- Linux 默认值是
0(区分大小写),但绝大多数业务依赖1(不区分) - 必须在首次运行
mysqld --initialize前,把lower_case_table_names=1写进my.cnf的[mysqld]段 - 如果初始化后才发现设错,唯一安全做法是删掉整个
datadir重来,不能只改配置重启
初始化命令必须带 --user=mysql 且目录权限到位
用 root 身份执行 mysqld --initialize 会生成 root 所有者的文件,后续 systemd 启动时因权限不足直接退出,日志里只显示 Can't start server: Bind on TCP/IP port. Got error: 13: Permission denied,实际跟端口无关。
- 先创建用户:
useradd -r -g mysql -s /bin/false mysql - 再递归授权:
chown -R mysql:mysql /data/mysql8.4.10 - 初始化命令必须显式指定用户:
/data/mysql8.4.10/bin/mysqld --initialize --user=mysql --basedir=/data/mysql8.4.10 --datadir=/data/mysql8.4.10/data - 初始密码在
log_error指定的文件末尾,不是标准输出;若没配log_error,就看终端打印的那行A temporary password is generated for root@localhost:
systemd 托管要绕过 RPM 自带单元文件
如果你用二进制包却直接启用 mysqld.service,它大概率是 RPM 安装残留的,会硬编码 /usr/libexec/mysqld 路径,导致启动失败。
- 新建单元文件:
/etc/systemd/system/mysqld-84.service - 关键字段示例:
[Service] User=mysql Group=mysql ExecStart=/data/mysql8.4.10/bin/mysqld --defaults-file=/data/mysql8.4.10/my.cnf Restart=always RestartSec=10
-
systemctl daemon-reload && systemctl enable mysqld-84,别用mysqld这个名字,避免冲突 - 启动后检查:
systemctl status mysqld-84+ss -tlnp | grep :3306,双验证才可靠
最易被跳过的其实是 swap 分区:内存 ≤2GB 的机器,mysqld --initialize 会因 OOM 被 kill,错误日志里只有空行,必须提前配好 swapfile。


















