1. 为什么需要离线部署MySQL?
在Linux环境下离线安装MySQL的场景其实比很多人想象的更常见。我经历过至少三种典型情况:一是客户生产环境位于内网隔离区,根本无法连接外网;二是某些金融和政府机构对软件安装有严格的合规要求,必须使用经过审核的特定版本;三是海外项目部署时遇到网络不稳定,在线安装耗时且容易失败。
离线部署的核心难点在于依赖项管理。以MySQL 8.0为例,仅基础服务就涉及mysql-community-server、mysql-community-client等6个核心rpm包,还有libaio、numactl等系统依赖。我曾统计过,完整安装需要处理23个依赖关系,这也是很多新手在离线环境下反复报错的原因。
关键提示:建议准备离线安装包时,使用与目标系统完全相同的Linux发行版和版本号进行下载,可以最大限度避免兼容性问题。我习惯在虚拟机中先搭建一个纯净的基准环境。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作:构建完整的离线资源库
2.1 获取官方安装包
从MySQL官网下载Bundle包是最稳妥的方式。以MySQL 8.0.34为例,需要获取的是mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar这样的打包文件。这个压缩包内包含所有必要的rpm组件:
code复制mysql-community-client-8.0.34-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm
mysql-community-common-8.0.34-1.el7.x86_64.rpm
mysql-community-devel-8.0.34-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.34-1.el7.x86_64.rpm
mysql-community-server-8.0.34-1.el7.x86_64.rpm
2.2 处理系统依赖
通过yum deplist命令可以查看完整依赖树。常见依赖包括:
| 依赖包 | 作用 | 获取方式 |
|---|---|---|
| libaio | 异步IO支持 | 系统安装镜像中的Base仓库 |
| numactl | NUMA架构支持 | 系统安装镜像中的Base仓库 |
| openssl-libs | 加密通信支持 | 系统安装镜像中的Base仓库 |
我通常会创建一个本地yum源,将系统ISO镜像挂载到/mnt/cdrom,然后在/etc/yum.repos.d/下配置本地repo文件。这样在后续安装时,yum可以自动解析依赖关系。
2.3 传输文件的注意事项
在将安装包传输到目标服务器时,有几点特别需要注意:
- 使用
md5sum校验文件完整性 - 如果通过U盘拷贝,注意文件系统格式(建议用exFAT)
- 传输后保持原始权限(特别是config文件)
3. 分步安装指南
3.1 环境检查与清理
首先执行以下命令检查系统环境:
bash复制# 检查现有MySQL
rpm -qa | grep mysql
# 清理旧版本(如果有)
sudo yum remove mysql*
# 检查依赖项
rpm -q libaio numactl
# 安装缺失依赖
sudo yum --disablerepo=\* --enablerepo=local install libaio numactl
3.2 安装MySQL主体组件
解压bundle包后,按特定顺序安装rpm:
bash复制tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar
sudo rpm -ivh mysql-community-common-8.0.34-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-8.0.34-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-8.0.34-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-8.0.34-1.el7.x86_64.rpm
常见报错处理:如果遇到"conflicts with file from package XYZ",可以添加
--replacefiles参数强制覆盖。
3.3 初始化数据库
启动服务前的关键步骤:
bash复制sudo mysqld --initialize --user=mysql
# 注意查看临时密码
sudo cat /var/log/mysqld.log | grep "A temporary password"
4. 配置优化与安全加固
4.1 基础安全设置
首次登录后立即修改密码并运行安全脚本:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- 执行安全配置
mysql_secure_installation
4.2 关键参数调整
建议修改/etc/my.cnf中的核心参数:
ini复制[mysqld]
# 内存配置
innodb_buffer_pool_size = 1G # 建议物理内存的50-70%
key_buffer_size = 256M
# 连接配置
max_connections = 200
wait_timeout = 600
# 日志配置
slow_query_log = 1
long_query_time = 2
4.3 防火墙配置
bash复制sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
5. 验证与排错指南
5.1 服务状态检查
bash复制systemctl status mysqld
# 检查端口监听
netstat -tulnp | grep 3306
5.2 常见问题排查
问题1:启动时报错"Failed to start MySQL Server"
检查步骤:
- 查看详细日志:
journalctl -xe - 检查selinux状态:
getenforce - 检查磁盘空间:
df -h
问题2:客户端无法连接
排查流程:
- 确认服务运行状态
- 检查防火墙规则
- 验证用户权限:
SELECT Host,User FROM mysql.user;
6. 高级配置技巧
6.1 配置主从复制(可选)
在离线环境中配置主从需要特别注意:
- 确保主从服务器时间同步(配置离线NTP)
- 使用相同的MySQL版本
- 提前规划server-id
6.2 备份恢复方案
推荐物理备份方式:
bash复制# 热备份
sudo mysqlbackup --user=root --password=xxx --backup-dir=/backup backup-and-apply-log
7. 长期维护建议
- 建立定期备份机制(建议每日全备+binlog)
- 监控关键指标:连接数、QPS、慢查询等
- 每季度检查一次配置文件优化空间
我在实际运维中发现,离线环境最大的挑战其实是后续的版本升级。建议在测试环境先验证升级流程,并准备好回滚方案。对于关键业务系统,可以考虑使用MySQL Router实现高可用。
