1. 项目概述
最近在给某金融机构做系统迁移时遇到一个典型场景:他们的生产环境服务器完全隔离外网,但需要部署MySQL数据库集群。这种离线环境下的数据库部署,和常规在线安装有着完全不同的技术路线和注意事项。今天我就把这次实战经验整理成详细指南,包含每个步骤的完整操作截图和避坑要点。
离线部署MySQL在金融、军工、政务等对网络安全要求严格的领域非常普遍。这类场景往往需要先在可联网环境准备好所有依赖包,再通过安全介质传输到内网机器。整个过程涉及包完整性校验、依赖关系处理、系统兼容性验证等关键技术环节,任何一个步骤出错都可能导致部署失败。
2. 环境准备阶段
2.1 资源规划要点
在开始下载安装包前,需要明确以下关键参数:
- MySQL版本:建议选择长期支持版本(如8.0.34)
- 操作系统版本:精确到次版本号(如CentOS 7.9.2009)
- 硬件架构:x86_64或ARM
- 内存规划:建议专用服务器内存≥8GB
- 存储规划:数据目录建议单独挂载SSD
重要提示:生产环境务必保证下载环境与目标环境系统版本完全一致,避免glibc等基础库版本不兼容。
2.2 离线包获取方案
推荐两种可靠的依赖包获取方式:
- 官方仓库镜像(推荐):
bash复制# 创建本地仓库目录
mkdir -p /opt/mysql-offline/{rpms,boost,mysql}
# 下载MySQL官方Bundle包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar
# 下载Boost库(MySQL 8.0必需)
wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
- 使用yumdownloader工具:
bash复制# 安装下载工具
yum install yum-utils -y
# 下载完整依赖树
repotrack mysql-community-server
repotrack mysql-community-client
2.3 依赖包完整性验证
传输到内网前必须做完整性检查:
bash复制# 校验MD5
md5sum mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar
# 对比官方值(从官网获取)
echo "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" > original.md5
md5sum -c original.md5
3. 详细安装步骤
3.1 传输包到目标服务器
建议使用物理介质传输时:
- 使用ext4格式的U盘或移动硬盘
- 提前格式化并检查坏块
- 采用rsync确保完整传输:
bash复制rsync -avzP /media/usb/mysql-offline/ root@target:/opt/mysql-offline/
3.2 安装前系统检查
关键检查项:
bash复制# 1. 检查SELinux状态
getenforce # 建议设置为Disabled
# 2. 检查防火墙规则
iptables -L # 需开放3306端口
# 3. 检查已有MySQL进程
ps -ef | grep mysql # 确保无冲突进程
# 4. 检查libaio依赖
rpm -qa | grep libaio # 必须存在
3.3 分步安装过程
- 解压Boost库:
bash复制tar -zxvf boost_1_77_0.tar.gz -C /usr/local/
- 安装MySQL主包:
bash复制tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.34-1.el7.x86_64.rpm
- 初始化数据库:
bash复制mysqld --initialize --user=mysql
# 注意记录生成的临时密码
cat /var/log/mysqld.log | grep "A temporary password"
4. 配置优化指南
4.1 安全加固配置
编辑/etc/my.cnf添加:
ini复制[mysqld]
# 密码策略
validate_password.policy=STRONG
# 禁用符号链接
symbolic-links=0
# 禁止本地infile加载
local-infile=0
# 启用SSL
require_secure_transport=ON
4.2 性能调优参数
根据服务器配置调整:
ini复制innodb_buffer_pool_size=4G # 建议物理内存的50-70%
innodb_log_file_size=1G # 生产环境建议≥1G
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000 # SSD建议值
5. 常见问题排查
5.1 依赖缺失问题
典型报错:"libssl.so.10: cannot open shared object file"
解决方案:
bash复制# 查找系统已有版本
find / -name "libssl.so*"
# 创建软链接
ln -s /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.10
5.2 初始化失败处理
如果初始化报错"Failed to initialize DD Storage Engine":
- 检查/var/lib/mysql目录权限
- 确认磁盘空间充足(df -h)
- 删除残留文件后重试:
bash复制rm -rf /var/lib/mysql/*
chown mysql:mysql /var/lib/mysql
5.3 连接数优化
修改最大连接数(需重启服务):
sql复制SET GLOBAL max_connections=500;
# 永久生效需写入my.cnf
[mysqld]
max_connections=500
6. 运维管理技巧
6.1 备份方案设计
推荐物理备份+binlog组合:
bash复制# 每日全量备份
mysqldump --single-transaction --master-data=2 --all-databases > fullbackup.sql
# 实时binlog备份
mysqlbinlog --raw --read-from-remote-server --host=localhost --user=repl --password --result-file=/backup/ binlog.00000*
6.2 监控指标配置
关键监控项:
- QPS/TPS:SHOW GLOBAL STATUS LIKE 'Questions'
- 连接数:SHOW STATUS LIKE 'Threads_connected'
- 缓冲池命中率:
sql复制SELECT (1 - (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_reads') /
(SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_read_requests')) * 100 AS hit_rate;
6.3 升级回滚方案
离线环境升级需特别注意:
- 先在测试环境验证升级包
- 准备回滚脚本:
bash复制# 备份配置文件
cp -a /etc/my.cnf /etc/my.cnf.bak
# 备份数据目录
rsync -avzP /var/lib/mysql /backup/mysql-data-$(date +%F)
在实际操作中发现,离线部署最大的挑战其实是依赖包的完整获取。有次在政务云项目中就因为漏掉了systemd-devel包导致服务注册失败。后来我养成了用以下命令验证所有依赖的习惯:
bash复制rpm -qpR *.rpm | grep -v "mysql" | sort | uniq