受限网络下安装mysql的核心是依赖链必须一次理清、一次传全、一次装对;漏装libaio1或错配libmecab2会导致dpkg静默失败,systemctl start mysql报“unit mysql.service not found”,实为根本未安装成功。

直接说结论:受限网络下安装 MySQL 的核心不是“怎么装”,而是“依赖链必须一次理清、一次传全、一次装对”。漏一个 libaio1 或版本错配的 libmecab2,dpkg -i 会静默失败,systemctl start mysql 则报 Failed to start mysql.service: Unit mysql.service not found —— 这不是服务没启,是根本没装上。
Ubuntu/Debian 离线安装必须先解决依赖闭环
Ubuntu 20.04+ 安装 mysql-community-server 不是单个 deb 包的事。它硬依赖 libaio1 和 libmecab2,而这两个包又各自有间接依赖(比如 libaio1 依赖 libc6,但系统通常已有;libmecab2 依赖 libstdc++6,也常自带)。关键在于:你不能只下载 MySQL 的 deb,必须连同它的直接依赖一起拉下来。
在可联网的同版本 Ubuntu 上执行:
apt-get download mysql-community-server libaio1 libmecab2
注意三点:
-
apt-get download不会自动下载依赖的依赖,只下显式列出的包 —— 所以必须手动补全libaio1和libmecab2,不能只写mysql-community-server - 检查下载的 deb 包名是否含
ubuntu20.04或focal字样,避免混入bionic(18.04)包导致dpkg报package architecture (amd64) does not match system (arm64) - 所有 deb 包必须放在同一目录下,否则
dpkg -i *.deb会因顺序问题失败
CentOS/RHEL 用 yumdownloader 拉全依赖树
RPM 包依赖更复杂,rpm -ivh 遇到缺失依赖就停,没法像 dpkg 那样靠 apt-get install -f 自动修复。必须用 yumdownloader --resolve 把整条依赖链一次性拉下来。
在联网的同版本 CentOS 7/8 上操作:
yum install -y yum-utils yumdownloader --resolve mysql-community-server
这会下载包括 mysql-community-common、mysql-community-client、mysql-community-libs 及其所有 runtime 依赖(如 libaio、mecab、perl-Data-Dumper 等)。常见坑:
-
--resolve参数不可省略,否则只下主包,不拉依赖 - 如果目标机是 CentOS 7,但你在 CentOS 8 上运行
yumdownloader,默认会下 8 的包 —— 必须先确认目标机cat /etc/redhat-release,再在匹配版本机器上执行 - 下载后检查 rpm 包签名:
rpm -K *.rpm,若报digests signatures OK才可信;若报MISSING KEYS,需提前导入 MySQL GPG key:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Windows 离线安装最容易踩的三个配置坑
Windows 上用 zip 包离线安装看似简单,但 80% 的失败源于配置文件或路径问题。不是服务起不来,是 mysqld --initialize 直接退出且无日志。
关键动作必须严格按顺序做:
-
my.ini中的basedir和datadir路径必须用正斜杠/或双反斜杠\,不能用单反斜杠(否则mysqld --initialize解析失败) -
datadir对应的目录必须**提前手动创建**,且 MySQL 服务账户(默认是 SYSTEM)要有该目录的完全控制权限 —— 光靠mkdir不够,得进目录属性 → 安全 → 编辑 → 添加SYSTEM并勾选“完全控制” - 初始化命令必须加
--console:mysqld --initialize --console,否则 root 临时密码不会输出到终端,后续mysql -u root -p就卡住
最常被忽略的是:Linux 上 mysql-community-server 包里自带 mysql_secure_installation 脚本,但 Windows zip 包里没有 —— 所有安全加固(删匿名用户、禁远程 root、设密码策略)都得手动 SQL 执行,没人提醒你这事,装完就以为搞定了。











