答案:离线安装mysql必须在同版本同架构联网机器上用apt-rdepends或yum deplist查真实依赖树,严格按mysql-community-common→client→server顺序安装,配合--force-depends和apt-get install -f修复,运行前用ldd验证动态库并检查glibc版本与selinux策略。

离线安装 MySQL 最常卡在依赖缺失上,不是包没下全,而是没搞清“哪些依赖必须提前装、哪些可以跳过、哪些根本不用管”。核心原则是:先查清目标系统的真实依赖树,再按需下载,别盲目照搬网上的 DEPS 列表。
怎么查清 MySQL 安装包真正要什么依赖
在一台跟目标服务器**完全同版本、同架构**的联网机器上操作,这是唯一可靠的方法。Ubuntu/Debian 用 apt-rdepends,CentOS/RHEL 用 yum deplist:
- Ubuntu 示例:
apt-rdepends mysql-server | grep -v "^ " | sort -u—— 注意过滤掉空行和注释,只留真实 .deb 包名 - CentOS 示例:
yum deplist mysql-community-server | grep "provider"—— 只看 provider 行,它告诉你具体要哪个 rpm 包 - 别信网上抄来的“通用依赖列表”,
libtinfo5和libtinfo6在不同 Ubuntu 版本里互斥,装错一个就dpkg -i失败
DEB 包离线安装时的顺序和强制参数
MySQL 的 .deb bundle 不是随便 dpkg -i *.deb 就能完事的。顺序错、缺强制参数,会直接报 “dependency problems” 或 “unmet dependencies”:
- 必须按顺序安装:
mysql-community-common→mysql-community-client→mysql-community-server(其他如mysql-community-libs插在中间) -
dpkg -i会卡在未满足依赖上,此时要用:dpkg -i --force-depends *.deb先解压,再用apt-get install -f自动修复依赖(前提是所有依赖 deb 已放在本地) - 如果
apt-get install -f提示 “unable to locate package”,说明某个依赖包名不匹配——比如 Ubuntu 22.04 要的是libssl3,但你下的是libssl1.1
RPM 包安装失败后怎么快速定位缺哪个库
执行 rpm -ivh mysql-community-server-*.rpm 报错时,错误信息里那串 “error: Failed dependencies:” 后面的内容才是关键:
- 看到
libaio.so.1()(64bit)缺失?装libaio-*.rpm,不是libaio-devel - 看到
numactl(x86-64)?CentOS 7 是numactl-*.rpm,CentOS 8+ 换成numactl-libs-*.rpm,名字变了 - 运行
ldd /usr/sbin/mysqld | grep "not found"可以验证二进制是否真能跑起来——有时候 rpm 装成功了,但运行时仍缺动态库
最容易被忽略的两个点
一是 glibc 版本兼容性:MySQL 8.0.33+ 要求 glibc ≥ 2.17,但 CentOS 6 只有 2.12,硬装会 Segmentation fault;二是 SELinux 或 AppArmor 默认策略会阻止 mysqld 访问自定义 datadir(比如 /data/mysql),不关或配策略的话,mysqld --initialize 直接静默失败,日志里只有 “Permission denied”。











