服务器迁移概述
服务器迁移是一项复杂的工作,需要仔细规划和执行。
迁移前准备
1. 清单检查
# 需要备份的关键文件和目录
# 系统配置
/etc/passwd # 用户账户
/etc/shadow # 密码哈希
/etc/group # 用户组
/etc/sudoers # sudo权限
/etc/hosts # 主机名解析
/etc/fstab # 文件系统挂载
/etc/crontab # 定时任务
/etc/resolv.conf # DNS配置
# 用户配置
~/.bashrc # Bash配置
~/.bash_profile # Bash登录配置
~/.ssh/ # SSH密钥
/root/.bashrc # Root用户配置
# 应用数据
/data # 数据目录
/var/www/ # Web应用
/var/lib/mysql/ # MySQL数据
/var/lib/postgresql/ # PostgreSQL数据
# 日志(可选)
/var/log/ # 系统日志
2. 服务清单
# 列出所有运行中的服务
systemctl list-unit-files --type=service --state=enabled
# 或使用 service 命令
service --status-all
# 记录网络连接
netstat -tuln > network_connections.txt
ss -tuln > ss_connections.txt
3. 磁盘使用情况
# 查看磁盘使用
df -h
# 查看目录大小
du -sh /var/*
du -sh /data/*
# 查看 inode 使用
df -i
数据备份
1. 使用rsync备份
# 同步到本地备份目录
rsync -avz --progress /data /backup/data/
# 同步到远程服务器
rsync -avz -e ssh /data user@remote:/backup/data/
# 增量备份
rsync -avz --delete -e ssh /data user@remote:/backup/
2. 使用tar打包
# 打包整个系统
tar -czvf backup.tar.gz \
/etc \
/var/www \
/home \
/opt \
--exclude='/proc' \
--exclude='/sys' \
--exclude='/dev' \
--exclude='/run' \
--exclude='/tmp'
3. 数据库备份
# MySQL备份
mysqldump -u root -p --all-databases > all_databases.sql
# 或指定数据库
mysqldump -u root -p mydb > mydb.sql
# PostgreSQL备份
pg_dumpall -U postgres > all_postgres.sql
# MongoDB备份
mongodump --out /backup/mongodb/
配置迁移
1. SSH配置
# 复制SSH配置
cp -r /home/.ssh /backup/.ssh
cp /etc/ssh/sshd_config /backup/sshd_config
# 设置权限
chmod 700 /backup/.ssh
chmod 600 /backup/.ssh/*
2. Nginx配置
# 备份Nginx配置
cp -r /etc/nginx /backup/nginx
# 关键文件
/etc/nginx/nginx.conf
/etc/nginx/conf.d/
/etc/nginx/sites-enabled/
3. Docker配置
# 列出所有容器
docker ps -a
# 导出容器
docker export container_name > container.tar
# 复制卷
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar cvf /backup/volume.tar -C /data .
# 保存镜像
docker save myimage:latest -o myimage.tar
服务迁移步骤
1. 停止服务
# 停止所有服务
systemctl stop nginx
systemctl stop mysql
systemctl stop php-fpm
# 或使用
service nginx stop
2. 迁移数据
# 使用rsync迁移大数据
rsync -avz --progress /data user@newserver:/data/
# 使用nc快速传输(同一网络)
# 目标服务器
nc -l 9999 | tar xf - -C /data
# 源服务器
tar cf - /data | nc newserver 9999
3. 重建服务
# 新服务器上安装相同软件
apt-get install nginx mysql-server php-fpm
# 恢复配置
cp /backup/nginx/* /etc/nginx/
cp /backup/ssh/sshd_config /etc/ssh/
4. 启动服务
# 启动服务
systemctl start nginx
systemctl start mysql
systemctl enable nginx # 开机自启
迁移后验证
1. 服务状态
# 检查所有服务状态
systemctl status nginx
systemctl status mysql
# 检查端口监听
ss -tuln | grep :80
ss -tuln | grep :3306
2. 日志检查
# 查看错误日志
tail -f /var/log/nginx/error.log
tail -f /var/log/mysql/error.log
# 查看系统日志
journalctl -xe
3. 功能测试
# 测试Web服务
curl -I http://localhost
# 测试数据库连接
mysql -u root -p -e "SHOW DATABASES;"
# 测试应用
curl http://localhost/api/health
迁移清单模板
## 服务器迁移清单
### 迁移前
- [ ] 记录当前服务器配置
- [ ] 备份所有数据
- [ ] 测试备份完整性
- [ ] 通知用户迁移时间
- [ ] 准备回滚方案
### 迁移中
- [ ] 停止服务
- [ ] 迁移数据
- [ ] 配置新服务器
- [ ] 启动服务
### 迁移后
- [ ] 验证服务运行
- [ ] 测试功能
- [ ] 监控性能
- [ ] 更新DNS
- [ ] 通知用户完成
### 回滚
- [ ] 记录问题
- [ ] 恢复备份
- [ ] 重新迁移
2026年迁移工具推荐
| 工具 | 用途 |
|---|---|
| rsync | 文件同步 |
| Duplicati | 备份工具 |
| Bacula | 企业备份 |
| Docker | 容器化迁移 |
| Ansible | 自动化配置 |
Comments