在隔离内网或生产服务器上安装 MySQL 时,由于无法直接连接互联网,yum 和 apt 等在线安装方式都会失效。要完成离线部署,核心思路是在一台能访问外网的机器上提前下载好 MySQL 安装包以及全部依赖文件,再通过移动存储或内网传输拷贝到目标 CentOS 服务器。通常有两种主流方式:一是下载 RPM 包并制作本地 yum 源,用 yum 解决依赖关系;二是下载官方通用二进制包(tar 包)手动解压配置。两种方式各有利弊,RPM 方式更贴近系统包管理习惯,便于后续升级;tar 包方式更加灵活,可以指定任意安装目录和数据目录。本文会从准备工作开始,逐步演示两种离线安装的完整过程,并给出初始化、密码修改和开机自启的配置方法。

一、离线安装前的准备工作
离线安装的第一步是明确目标服务器的系统环境:CentOS 的版本号、架构(x86_64 还是 aarch64)以及 glibc 版本。这些信息会直接决定需要下载哪个版本的 MySQL 包。以 CentOS 7.x 和 MySQL 8.0 为例,x86_64 架构通常选择 mysql-8.0.xx-1.el7.x86_64.rpm 系列,或者下载 mysql-8.0.xx-linux-glibc2.17-x86_64.tar.xz 通用二进制包。如果服务器是 ARM 架构,则需要下载对应的 aarch64 版本,否则安装时会报可执行文件格式错误。
可以使用下面命令查看系统信息和架构:
cat /etc/centos-release uname -m ldd --version
确定版本后,在一台有外网的机器上准备下载。如果外网机器也是 CentOS,可以配置好 MySQL 官方 yum 仓库后,使用 yum 的下载功能只下载不安装;如果外网机器是 Windows 或 macOS,则直接从 MySQL 官方下载对应 RPM 包或 tar 包,再拷贝到离线服务器。需要注意的是,RPM 包之间存在依赖关系,手动挑选单个包很容易遗漏,建议优先选择 tar 包或者制作完整本地 yum 源。
二、使用 RPM 包离线安装 MySQL
RPM 方式离线安装的关键在于准备好所有依赖包。最稳妥的做法是在有网的 CentOS 机器上配置 MySQL 官方仓库,然后使用 yumdownloader 或 yum 的 downloadonly 参数把所有依赖下载到同一个目录。例如:
yum install -y yum-utils yumdownloader --resolve mysql-community-server
如果外网机器还没有配置 MySQL 仓库,需要先下载 mysql80-community-release 包并安装,或者直接编辑 /etc/yum.repos.d/mysql-community.repo 文件。下载完成后会得到一个包含 mysql-community-server、mysql-community-client、mysql-community-common、mysql-community-libs 以及若干依赖(如 openssl、libaio、perl 等)的 RPM 包集合。把这些包全部拷贝到离线服务器的某个目录,例如 /root/mysql_rpm。
在离线服务器上,进入该目录后可以用 rpm 命令一次性安装,也可以先用 yum localinstall 让系统自动处理依赖顺序:
cd /root/mysql_rpm rpm -ivh *.rpm
如果使用 yum localinstall,遇到依赖缺失时会提示具体缺少哪些包,可以从外网机器再补下载。安装完成后,MySQL 服务不会自动启动,需要运行 systemctl 或 service 启动 mysqld,并查看初始密码。RPM 安装的 MySQL 默认数据目录在 /var/lib/mysql,配置文件在 /etc/my.cnf,日志文件在 /var/log/mysqld.log。首次启动后,可以使用 grep 命令从日志中提取临时密码:
systemctl start mysqld grep 'temporary password' /var/log/mysqld.log
这种方式最大的好处是依赖关系由 yum 或 rpm 自动校验,适合不太熟悉 MySQL 目录结构的用户。但缺点是需要提前收集的 RPM 包数量较多,如果外网机器和离线机器版本存在微小差异(例如小版本不同),可能仍会出现依赖库版本不匹配的问题。
三、使用通用二进制包离线部署 MySQL
如果不想处理繁琐的 RPM 依赖关系,推荐使用官方通用二进制 tar 包。它的本质是编译好的 MySQL 文件集合,不依赖特定发行版的包管理器,只要 glibc 版本满足要求,理论上可以在任何 Linux 系统上运行。下载时选择文件名中包含 glibc 版本号的 tar.xz 压缩包,例如 mysql-8.0.xx-linux-glibc2.17-x86_64.tar.xz。上传到离线服务器后,先解压到 /usr/local 目录,并创建软链接方便后续升级:
tar -xvf mysql-8.0.xx-linux-glibc2.17-x86_64.tar.xz -C /usr/local ln -s /usr/local/mysql-8.0.xx-linux-glibc2.17-x86_64 /usr/local/mysql
接下来需要创建独立的 mysql 用户和组,因为 MySQL 进程不能以 root 身份运行。然后设置 data 目录的所有权,并手动准备配置文件。配置文件中至少要指定 basedir、datadir 和 socket 路径,避免启动时找不到目录。一个简单的 /etc/my.cnf 配置如下:
[mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock port=3306 character-set-server=utf8mb4 log-error=/data/mysql/mysql-err.log
创建数据目录并初始化 MySQL 时,使用 --initialize 参数会生成随机临时密码,--initialize-insecure 则创建空密码的 root 账号。生产环境建议使用 --initialize,初始化完成后从错误日志中获取密码。初始化命令如下:
useradd -r -s /sbin/nologin mysql mkdir -p /data/mysql chown -R mysql:mysql /usr/local/mysql /data/mysql /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
初始化完成后,还需要设置环境变量或直接使用完整路径启动服务。为了方便,可以在 /etc/profile.d/mysql.sh 中写入 PATH 路径,或者使用 systemd 管理。通过 systemd 启动时需要手动编写 mysql.service 单元文件,指定 ExecStart 和 User=mysql,之后就可以用 systemctl 控制启停。这种 tar 包方式特别适合多个实例共存或需要自定义安装目录的场景。
四、初始化后的安全配置与验证
无论使用 RPM 还是 tar 包安装,首次启动后第一件事就是登录 MySQL 并修改 root 密码。如果通过 RPM 安装,可以从 /var/log/mysqld.log 中获取临时密码;如果 tar 包初始化时使用了 --initialize,日志文件在 datadir 目录下的 mysql-err.log 中。登录命令如下:
mysql -uroot -p
登录成功后,MySQL 8.0 会强制要求修改初始密码,否则无法执行任何查询。可以使用 ALTER USER 语句设置一个符合密码策略的新密码,例如包含大小写字母、数字和特殊字符:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassw0rd!'; FLUSH PRIVILEGES;
如果需要远程管理 MySQL,还需要创建允许从其他主机连接的用户,并给该用户授权。例如创建一个用户 admin,允许从 192.168.1.% 网段访问,并授予所有数据库权限:
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'Admin@123'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%'; FLUSH PRIVILEGES;
不要忘记检查防火墙是否放行 3306 端口。CentOS 7 使用 firewalld,CentOS 6 使用 iptables。放行命令如下:
firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload
最后设置 MySQL 开机自启。RPM 安装通常会自动注册服务,直接执行 systemctl enable mysqld 即可;tar 包安装则需要确认之前创建的 systemd 单元文件已经放到 /etc/systemd/system 目录并 enable。完成上述步骤后,重启一次服务器验证 MySQL 是否能正常随系统启动,以及数据文件是否完整。
五、离线安装中常见问题排查
离线安装最容易出现的问题是依赖缺失或版本不匹配。使用 rpm -ivh 时如果提示缺少某个库,不要盲目去网上找单个 rpm,最好回到外网机器用 yumdownloader --resolve 重新补全依赖。另一个常见问题是数据目录权限不对,导致 mysqld 启动失败,错误日志中通常会出现 Can't create directory 或 Permission denied。此时应检查 datadir 的所有者是否为 mysql 用户,并用 chown -R mysql:mysql 修正。
如果启动 MySQL 后无法用初始密码登录,可以查看日志文件中 temporary password 这一行。若多次初始化导致日志被覆盖,可以先备份旧日志再重新初始化。对于 tar 包安装,还需要确认 PATH 变量是否包含 /usr/local/mysql/bin,否则 mysql 命令会提示 command not found。通过 source /etc/profile 或重新登录即可生效。总之,离线安装的排错重点是看日志和核对目录权限,大多数问题都能在错误日志中找到直接原因。

