从阿里云/腾讯云迁移到香港服务器:数据无损迁移完整流程与零停机切换方案

从阿里云/腾讯云迁移到香港服务器:数据无损迁移完整流程与零停机切换方案

迁移服务器是高风险操作——数据丢失、服务中断、DNS 生效慢……每个环节都可能酿成事故。本文提供一套经过验证的零停机迁移方案,将国内云服务器迁移到香港服务器的过程拆解为可逐步验证的阶段,即使出现问题也能快速回滚。


一、迁移前规划

迁移决策检查清单

  • ☑ 确认迁移原因(免备案、降低成本、提升国际访问速度)
  • ☑ 梳理服务器上运行的所有服务(Web、数据库、定时任务、邮件等)
  • ☑ 确认所有对外 IP 的依赖(IP 白名单、支付回调地址等需提前更新)
  • ☑ 将域名 DNS TTL 提前降至 300 秒(切换前至少 48 小时操作)
  • ☑ 购买并初始化目标香港服务器
  • ☑ 确认目标服务器与源服务器间的网络带宽(测速:iperf3

迁移流程总览(四阶段)

<code">阶段一:环境复制   → 在香港服务器搭建与源服务器一致的运行环境
阶段二:数据同步   → 将数据库和文件同步到香港服务器(允许多次增量同步)
阶段三:验证测试   → 通过 hosts 绑定本地测试香港服务器的完整功能
阶段四:流量切换   → 修改 DNS,完成切换,监控异常,保留回滚能力

二、阶段一:环境复制

自动化环境信息采集(在源服务器执行)

<code">cat > /tmp/collect-env.sh << 'EOF' #!/bin/bash echo "=== OS 版本 ===" cat /etc/os-release echo "=== 已安装软件版本 ===" nginx -v 2>&1
php --version | head -1
mysql --version
python3 --version
node --version 2>/dev/null || echo "Node.js 未安装"

echo "=== PHP 扩展 ==="
php -m | sort

echo "=== Nginx 虚拟主机列表 ==="
ls /etc/nginx/sites-enabled/

echo "=== 开放端口 ==="
ss -tlnp

echo "=== 定时任务 ==="
crontab -l 2>/dev/null

echo "=== 环境变量 ==="
printenv | grep -v PASSWORD | grep -v SECRET | sort
EOF
bash /tmp/collect-env.sh > /tmp/server-env-report.txt
cat /tmp/server-env-report.txt

将输出报告下载后,在香港服务器上按相同版本安装对应软件栈。

三、阶段二:数据库迁移

方案A:mysqldump 导出/导入(停机时间 < 5分钟,适合中小库)

<code"># ── 在源服务器执行 ──
# 导出所有数据库(保留存储过程、触发器)
mysqldump -uroot -p \
  --all-databases \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --set-gtid-purged=OFF \
  | gzip > /tmp/all_databases_$(date +%Y%m%d_%H%M).sql.gz

# 传输到香港服务器
scp /tmp/all_databases_*.sql.gz root@香港服务器IP:/tmp/
<code"># ── 在香港服务器执行 ──
# 导入数据库
gunzip < /tmp/all_databases_*.sql.gz | mysql -uroot -p
echo "数据库导入完成,验证表数量..."
mysql -uroot -p -e "SELECT table_schema, COUNT(*) as table_count
  FROM information_schema.tables
  WHERE table_schema NOT IN ('information_schema','performance_schema','mysql','sys')
  GROUP BY table_schema;"

方案B:MySQL 主从同步(零停机,适合大库)

<code"># 在源服务器(主库)开启 binlog
# /etc/mysql/mysql.conf.d/mysqld.cnf 追加:
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds = 604800

# 在香港服务器(从库)配置:
CHANGE MASTER TO
  MASTER_HOST='源服务器IP',
  MASTER_USER='replicator',
  MASTER_PASSWORD='repl_password',
  MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G   # 确认 Seconds_Behind_Master 为 0

主从同步稳定后,切换流量前只需执行:

<code"># 在源服务器暂停写入(短暂停机窗口,约 10-30 秒)
FLUSH TABLES WITH READ LOCK;
# 确认从库已完全同步后,将应用指向香港服务器
UNLOCK TABLES;

四、阶段二:文件迁移(rsync 增量同步)

<code"># ── 首次全量同步(在香港服务器执行)──
rsync -avzP \
  --exclude='*.log' \
  --exclude='wp-content/cache/' \
  --exclude='wp-content/uploads/wc-logs/' \
  root@源服务器IP:/var/www/ \
  /var/www/

echo "首次同步完成,文件数:"
find /var/www -type f | wc -l
<code"># ── 切换前最终增量同步(仅同步变化文件,速度极快)──
rsync -avz --checksum \
  root@源服务器IP:/var/www/ \
  /var/www/

echo "增量同步完成,准备切换 DNS"

五、阶段三:本地验证测试

<code"># 在本地机器的 hosts 文件中临时绑定香港服务器 IP
# macOS/Linux: /etc/hosts
# Windows: C:\Windows\System32\drivers\etc\hosts

# 添加:
香港服务器IP    yourdomain.com
香港服务器IP    www.yourdomain.com

# 在不修改 DNS 的情况下,通过域名访问香港服务器
# 验证以下功能:
# ☑ 首页加载正常
# ☑ 用户登录功能
# ☑ 数据库读写(提交表单、新增内容)
# ☑ 图片/文件上传
# ☑ 邮件发送(注册验证邮件)
# ☑ 支付流程(沙箱环境测试)
# ☑ SSL 证书有效
curl -I https://yourdomain.com   # 验证 HTTPS 响应

六、阶段四:DNS 切换与零停机策略

<code"># ── 切换前准备 ──
# 1. 确认 DNS TTL 已降至 300 秒(48 小时前已操作)
# 2. 执行最后一次 rsync 增量同步
# 3. 暂停源服务器的写入(维护页面)

# 在源服务器 Nginx 开启维护模式
cat > /var/www/yourdomain/maintenance.html << 'EOF'

系统升级中,预计 5 分钟后恢复…

EOF # Nginx 配置临时维护页面 location / { return 503; error_page 503 /maintenance.html; }

<code"># ── DNS 切换 ──
# 在域名控制面板将 A 记录改为香港服务器 IP
# TTL 300 秒,约 5 分钟内全球生效

# ── 实时监控切换进度 ──
# 使用多地点 DNS 检查工具(如 whatsmydns.net)
# 或通过命令行轮询
watch -n 10 'dig +short yourdomain.com @8.8.8.8; echo "---"; dig +short yourdomain.com @114.114.114.114'

七、回滚方案

如果香港服务器出现严重问题,可在 5 分钟内完成回滚:

<code"># ── 紧急回滚步骤 ──
# 1. 将 DNS A 记录改回源服务器 IP(TTL 300 秒内生效)
# 2. 关闭源服务器维护模式
nginx_config_disable_maintenance

# 3. 如需同步香港服务器在切换期间产生的新数据
rsync -avz root@香港服务器IP:/var/www/ /var/www/

# 4. 数据库同步(如使用主从方案,此步骤自动完成)

八、切换后清理

确认香港服务器稳定运行 72 小时后:

  • 将 DNS TTL 恢复为 3600 秒(降低 DNS 查询压力)
  • 停止源服务器上的应用服务(保留实例 30 天作为最终备份)
  • 更新所有包含旧 IP 的配置(支付回调、Webhook、IP 白名单)
  • 30 天后确认无问题,释放旧服务器节省费用

九、总结

分阶段的迁移方案将高风险的「一次性切换」变为可逐步验证的「渐进式迁移」,最大化降低了迁移风险。按照本文流程操作,整个迁移过程的实际停机时间可控制在 30 秒以内。



Telegram