必须在同版本同架构联网机上模拟安装并下载全部依赖,否则离线安装MySQL 8.0会因缺失libaio、openssl-libs等十多个依赖及隐式版本约束而失败;RPM需按common→libs→client→server顺序安装,Debian系须构建本地APT源;还需同步导入GPG密钥以防签名验证失败。

必须先在同版本、同架构的联网机器上完整模拟安装流程,否则离线环境里 rpm -ivh 或 dpkg -i 会因依赖顺序或版本错位直接失败。
为什么不能直接拷贝单个 MySQL RPM 包过去装
MySQL 8.0 的 RPM 包(如 mysql-community-server-8.0.34-1.el8.x86_64.rpm)不自带运行时依赖。它明确依赖 libaio、numactl-libs、openssl-libs、perl-Data-Dumper 等十多个基础包。这些包在离线系统里大概率缺失,且部分依赖还有隐式版本约束(比如 libaio1_0.3.112-5 在 Ubuntu 20.04 上才稳定,用 0.3.111 可能导致 mysqld 启动后立即崩溃)。
常见错误现象:
error: Failed dependencies: libaio >= 0.3.99 is needed by mysql-community-server-8.0.34-1.el8.x86_64-
symbol lookup error: /usr/sbin/mysqld: undefined symbol: OPENSSL_sk_num(实际是openssl-libs版本太低)
在联网机上用 dnf/yum 模拟下载全部依赖(CentOS/RHEL/欧拉适用)
这是最可靠的方式,能自动解析并拉取所有传递依赖,避免手动拼凑遗漏。
- 确保联网机系统版本与目标离线机完全一致(例如都是
openEuler 22.03 LTS或CentOS 7.9) - 安装
dnf-plugins-core(CentOS 8+/欧拉)或yum-plugin-downloadonly(CentOS 7) - 执行命令一次性下载所有依赖到本地目录:
mkdir -p /tmp/mysql-deps dnf install --downloadonly --downloaddir=/tmp/mysql-deps \ ./mysql-community-server-8.0.34-1.el8.x86_64.rpm \ ./mysql-community-client-8.0.34-1.el8.x86_64.rpm \ ./mysql-community-common-8.0.34-1.el8.x86_64.rpm \ ./mysql-community-libs-8.0.34-1.el8.x86_64.rpm
完成后检查:/tmp/mysql-deps/ 下应有 30+ 个 RPM 文件,包括 libaio-0.3.112-5.el8.x86_64.rpm、numactl-libs-2.0.14-3.el8.x86_64.rpm 等。
Ubuntu 系统要用 apt download + dpkg-scanpackages 构建本地源
Ubuntu 不支持 --downloadonly,需换思路:用一台同版本联网机,把所有依赖包和 MySQL 的 .deb 全部下载下来,再生成索引供离线机 apt 识别。
- 先查清依赖列表(在联网 Ubuntu 20.04 上运行):
apt-get download mysql-server-8.0 libaio1 libmecab2
- 把下载的
.deb全部放进一个空目录,比如/tmp/mysql-offline - 生成 Packages 索引文件:
cd /tmp/mysql-offline dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
- 将整个
/tmp/mysql-offline目录拷贝到离线机,在/etc/apt/sources.list.d/offline.list中添加:
deb [trusted=yes] file:///tmp/mysql-offline ./
- 然后执行
apt update && apt install mysql-server-8.0,apt 就会从本地目录解依赖并安装
安装时的顺序和权限陷阱
RPM 包之间有强安装顺序,尤其 mysql-community-common 和 mysql-community-libs 必须早于 server 和 client 安装;Debian 系虽由 apt 自动处理,但若强行用 dpkg -i *.deb,也会报 unmet dependencies。
- 推荐安装顺序(RPM):
common → libs → client → server - 不要用
rpm -Uvh升级旧包——离线机上若有残留 MariaDB,先执行rpm -e --nodeps $(rpm -qa | grep mariadb) - 安装后务必检查
systemctl list-dependencies mysqld,确认network.target和local-fs.target都已就绪 - 如果
mysqld --initialize报glibc version too low,说明你下载的 MySQL 包和系统 glibc 不匹配(例如用了 el9 包装在 el8 系统),必须重下对应el8或ubuntu20.04标识的包
真正容易被忽略的是:依赖包的签名验证在离线环境下默认关闭,但如果你启用了 gpgcheck=1,又没导入对应密钥(如 MySQL 的 RPM-GPG-KEY-mysql),dnf install 会静默失败。建议离线部署前,把密钥也一并拷过去,用 rpm --import 导入。


















