离线安装MySQL 8.0的核心难点是依赖缺失和安装顺序错乱,必须先卸载mariadb-libs或mysql-client等冲突包,再严格按common→libs→client→server顺序安装RPM/DEB包,并手动补全libaio等基础依赖,最后执行mysqld --initialize初始化并配置bind-address。

离线安装 MySQL 8.0 的核心难点不在 MySQL 本身,而在于依赖包缺失和安装顺序错乱——这两点直接导致 rpm -ivh 或 dpkg -i 报错退出,且错误信息往往只显示“未满足依赖”,不指明缺哪个包、去哪找。
先查清系统已有组件,避免冲突
离线环境最怕“以为干净,实则埋雷”。尤其 CentOS/RHEL 上残留 mariadb-libs、Ubuntu 上预装 mysql-client,都会在安装时触发文件冲突或服务启动失败。
- CentOS/RHEL 执行:
rpm -qa | grep -E 'mysql|mariadb',若输出含mariadb-libs,必须用rpm -e --nodeps mariadb-libs-*强制卸载(保留日志:重定向到uninstall.log) - Ubuntu/Debian 执行:
dpkg -l | grep -E 'mysql|maria',若有mysql-client或mariadb-client,先sudo apt-get remove --purge mysql-client* mariadb-client*(注意:离线环境无法执行该命令,所以这步必须在有网的镜像机上完成预检) - 检查基础库是否就位:
ldconfig -p | grep libaio(CentOS)或dpkg -l | grep libaio1(Ubuntu),缺则后续必报错
按系统类型下载对应 bundle 包与依赖
MySQL 官方不提供“一键离线包”,必须手动凑齐 bundle + 系统级依赖。bundle 包名带 rpm-bundle.tar(RHEL/CentOS)或 deb-bundle.tar(Ubuntu),不是单个 .rpm 或 .deb。
- CentOS 7:下载
mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar(注意 el7 后缀,el8 包在 el7 上会报glibc版本不兼容) - Ubuntu 20.04:下载
mysql-server_8.0.34-1ubuntu20.04_amd64.deb-bundle.tar(版本号和发行版代号必须严格匹配) - 必需系统依赖(离线前在同版本有网机器上下载):
libaio1、libnuma1(CentOS 对应numactl)、libssl1.1(Ubuntu)或openssl(CentOS);Ubuntu 还需libmecab2(全文检索支持) - 校验不能跳过:
md5sum *.rpm *.tar > checksum.md5,传入离线机后运行md5sum -c checksum.md5,任一校验失败都可能导致安装中途崩溃
RPM/DEB 安装顺序不能颠倒
bundle 解压后得到多个包,顺序装错会导致 mysql-community-server 安装时报 “requires mysql-community-common” 等错误——这不是缺包,是没按依赖链装。
- CentOS/RHEL 顺序(严格按此):
mysql-community-common→mysql-community-libs→mysql-community-client→mysql-community-server - Ubuntu/Debian 顺序:
libaio1_*.deb→libmecab2_*.deb→mysql-community-common_*.deb→mysql-community-client_*.deb→mysql-community-server_*.deb - 切勿用
yum localinstall或apt install ./xxx.deb——它们会尝试联网补依赖,离线环境下必然失败;必须用rpm -ivh或dpkg -i手动逐个安装 - 遇到 “file /usr/bin/mysql from install of xxx conflicts with file from package yyy” 错误?说明前面没清干净,回退重做卸载步骤
初始化与首次启动的关键动作
装完 mysql-community-server 不等于能用。离线环境没有 systemd 自动触发初始化,必须人工执行,且临时密码只打印一次,错过就得重置。
- 创建数据目录并授权:
mkdir -p /data/mysql && chown -R mysql:mysql /data/mysql(路径可自定义,但/etc/my.cnf中datadir必须同步) - 初始化:
/usr/sbin/mysqld --initialize --user=mysql --datadir=/data/mysql(CentOS)或/usr/bin/mysqld --initialize --user=mysql --datadir=/data/mysql(Ubuntu) - 日志里会出现类似
A temporary password is generated for root@localhost: JqkL12!sDfgh的行,立刻复制保存——这是唯一一次看到它的机会 - 启动服务:
systemctl start mysqld(CentOS)或sudo systemctl start mysql(Ubuntu),启动失败看journalctl -u mysqld -n 50,常见原因是datadir权限不对或 SELinux 拦截(CentOS 可临时setenforce 0测试)
真正容易被忽略的是:离线部署后默认绑定 127.0.0.1,远程连接失败不是配置问题,而是根本没开监听。修改 /etc/my.cnf 中的 bind-address = 0.0.0.0 并开放防火墙端口,这事得在启动服务前就做完,否则初始化可能因网络配置异常失败。


















