快速结论
- 迁移前必做:完整备份数据 + 验证备份可恢复 + 编写回滚方案
- 核心技术:DNS切换 + 双写过渡期 = 真正零停机迁移
- 工具推荐:阿里云SMC(服务器迁移中心)一键迁移最省事
- 风险最高的操作:数据库迁移,必须验证数据一致性后再切换
迁移场景分类
场景一:同云内迁移
- 同地域不同可用区(最简单)
- 跨地域迁移(北京 -> 上海)
- 调整实例规格(升降配)
场景二:跨云迁移
- 阿里云 -> 腾讯云
- 腾讯云 -> 华为云
- AWS -> 国内云
场景三:物理机/IDC上云
- 自建机房迁移到公有云
- 托管服务器迁移到云
要不要上云、什么规模适合混合架构,见云服务器 vs 物理服务器。
迁移前准备清单
第一步:资产梳理
迁移前,彻底摸清要迁移的内容:
## 服务器资产清单
### 操作系统
- OS版本:CentOS 7.9
- 内核版本:3.10.0-1160
- 已安装软件:Nginx 1.18, Node.js 18, MySQL 8.0, Redis 7.0
### 应用
- 前端:静态文件,/var/www/html/
- 后端:Node.js进程,端口3000,PM2管理
- 定时任务:Crontab(5个任务)
### 数据
- MySQL数据库:mydb(50GB)
- Redis缓存:约500MB
- 文件存储:/data/uploads/(120GB图片)
- 日志文件:/var/log/(可不迁移)
### 外部依赖
- 域名:yourdomain.com(DNS解析在阿里云)
- SSL证书:Let's Encrypt
- 第三方服务:微信支付、短信API
- 数据库白名单:旧IP需要替换为新IP
### 网络配置
- 安全组规则清单
- 防火墙规则
- 内网IP依赖(有无hardcode的内网IP?)第二步:创建迁移测试方案
迁移前在新服务器上模拟一遍:
- 恢复数据库,验证数据完整性
- 启动所有服务,验证功能正常
- 运行自动化测试套件
- 压测性能,确认新配置满足需求
第三步:编写回滚方案
出了问题怎么回滚?
## 回滚方案
1. DNS切换:将域名解析改回旧服务器IP(<5分钟)
2. 旧服务器保留运行状态:迁移后保留7天,确认稳定后再关闭
3. 数据库:迁移期间旧库保持只读,新旧同步,随时可回切零停机迁移技术
核心思路
阶段1:准备新环境(不影响现有服务)
阶段2:数据同步(双写或复制)
阶段3:流量切换(DNS切换,5-30分钟TTL)
阶段4:验证新环境(监控30分钟)
阶段5:清理旧环境(7天后)数据库零停机迁移
数据库迁移是最复杂的部分,关键在于迁移期间数据不丢。
方案一:MySQL主从复制(推荐)
# 在新服务器上配置MySQL从库,实时同步旧库
# 1. 旧库开启binlog
# my.cnf
[mysqld]
log_bin = mysql-bin
server_id = 1
binlog_format = ROW
# 2. 新库配置为从库
CHANGE MASTER TO
MASTER_HOST='旧服务器IP',
MASTER_USER='repl',
MASTER_PASSWORD='replpassword',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
# 3. 验证同步状态
SHOW SLAVE STATUS\G
# 检查 Seconds_Behind_Master 是否为0
# 4. 切换时:停止写入旧库 → 等待同步完成 → 应用连接新库方案二:阿里云DTS(数据传输服务)
阿里云DTS支持实时数据迁移,业务无感知:
功能:
- 支持MySQL、PostgreSQL、MongoDB、Redis迁移
- 支持全量迁移 + 增量同步
- 延迟通常<1秒
- 支持跨云厂商迁移
价格:
- 按实例规格计费,小规格约680元/月文件数据迁移
大文件迁移(推荐rsync):
# 使用rsync增量同步文件
# 第一次全量同步(可能需要几小时)
rsync -avz --progress \
/data/uploads/ \
user@新服务器IP:/data/uploads/
# 之后每小时增量同步
# 切换前最后一次增量同步,确保数据最新
rsync -avz --checksum \
/data/uploads/ \
user@新服务器IP:/data/uploads/对象存储迁移(OSS -> COS):
# 使用ossutil迁移到腾讯云COS
ossutil cp oss://source-bucket/ cos://target-bucket/ \
--recursive \
--jobs 10实战:物理机迁移到阿里云
使用SMC(服务器迁移中心)
阿里云SMC是迁移神器,支持将任意物理机/虚拟机迁移到阿里云ECS。
迁移流程:
# 1. 下载SMC客户端
wget https://p2v-tools.oss-cn-hangzhou.aliyuncs.com/smc/Alibaba_Cloud_Migration_Tool.zip
unzip Alibaba_Cloud_Migration_Tool.zip
# 2. 配置AccessKey
cd go2aliyun_client_linux_x86_64
# 编辑 client_data 文件(或通过环境变量配置)
export ACCESS_KEY_ID=your_access_key
export ACCESS_KEY_SECRET=your_secret
# 3. 运行迁移客户端
./go2aliyun_client
# 4. 在SMC控制台监控迁移进度
# 通常需要2-8小时(取决于数据量)SMC迁移特点:
- 支持Windows和Linux
- 数据块级别迁移,效率高
- 支持断点续传
- 迁移过程中源服务器继续运行,不影响业务
DNS切换:最后一步
DNS切换是真正的流量切换时刻,需要精心准备:
切换前准备
# 1. 提前降低TTL
# 切换前24小时,将DNS TTL从3600秒改为60秒
# 这样切换后最多60秒全球生效
# 2. 在新服务器上验证功能
curl -H "Host: yourdomain.com" http://新服务器IP/api/health
# 3. 准备回滚DNS配置(一键可回切)切换步骤
# 切换DNS解析(以阿里云DNS为例)
aliyun alidns UpdateDomainRecord \
--RecordId your_record_id \
--RR "@" \
--Type A \
--Value 新服务器IP \
--TTL 60
# 验证DNS生效
dig yourdomain.com @8.8.8.8切换后监控
切换后30分钟内密切关注:
- 错误率(应<0.1%)
- 响应时间(应与迁移前相近)
- 服务器日志(有无异常报错)
- 业务指标(订单量、用户登录量)
跨云迁移(腾讯云 -> 阿里云)
跨云迁移不像同云迁移有官方工具,需要手动操作:
- 数据库:mysqldump导出 -> 传输 -> 导入目标云
- 文件:rsync跨云传输(建议走内网专线或VPN,避免公网带宽费用)
- 应用:在目标云部署相同应用,通过自定义镜像加速
- 配置:修改内网IP、数据库连接字符串、存储桶地址等
跨云传输加速技巧:
# 使用压缩减少传输量
tar czf - /data/ | ssh user@新服务器 "tar xzf - -C /data/"
# 使用内网VPN避免公网带宽费用(两云之间建立VPN)推荐方案
同云跨区域:阿里云镜像复制 + 快照复制,最简单
物理机上云:阿里云SMC或腾讯云在线迁移,一键迁移
数据库迁移:使用DTS/阿里云数据同步,零停机
迁移不必恐慌,充分准备是关键。按照本文的步骤一步一步来,绝大多数迁移都能平稳完成。
延伸阅读:2026 云服务器选购避坑指南 · 对象存储 OSS/COS 对比与迁移 · 服务器监控与告警指南 · 云服务器价格对比 · 成本优化顾问