雨云网站迁移上云实战:零停机rsync+数据库切换+DNS回滚预案

rsync 增量同步 + mysqldump 平滑导出 + DNS 低 TTL 切换,从老平台搬到雨云全程不丢数据
发布于
10

从老服务器搬到雨云云服务器,最怕两件事:迁移过程丢数据,切换域名后用户连不上。按下面这套流程走,rsync 增量同步做好预迁、数据库导出导入、DNS 用低 TTL 切换并留好回滚预案,能最大程度保证平稳上云。

一、迁移前的准备清单

  • 在雨云控制台开一台至少和老服务器同等配置的机器,系统版本建议一致;
  • 配好安全组(只放 80/443 和你的 SSH IP),安装基础环境(Nginx/PHP/MySQL 版本对齐);
  • 域名管理后台登录好,准备调 DNS;
  • 老服务器确认有足够磁盘做最终全量备份。

雨云云服务器新购用优惠码 admin01 走专属入口 https://www.jiyueip.com/link/5617 五折,迁移期间临时开两台(老一根、新一根)成本不高。

二、第一步:rsync 预同步(不停老服)

先做一次全量同步,把绝大多数文件拷过去。这段时间老服务器正常对外:

rsync -avzP --exclude='cache/' --exclude='tmp/' 
  -e "ssh -p 22" 
  /var/www/html/ root@雨云IP:/var/www/html/

–exclude 跳过缓存和临时目录,这些没迁移价值还慢。第一次 rsync 可能比较久,看数据量。

三、第二步:数据库导出导入

数据库不能一边跑业务一边拷(会不一致)。做法是先用 mysqldump 导出,在老服务器上不影响业务:

# 老服务器
mysqldump -u root -p --single-transaction --all-databases > /tmp/fullbackup.sql
gzip /tmp/fullbackup.sql
rsync -avzP /tmp/fullbackup.sql.gz root@雨云IP:/tmp/

–single-transaction 对 InnoDB 表做一致性快照,不锁表。然后在雨云新服务器上导入:

gunzip < /tmp/fullbackup.sql.gz | mysql -u root -p

四、第三步:最终增量同步 + 切换

这是唯一的短暂中断窗口。先把老服务器设为维护模式(返回 503),再做最终 rsync(只传差异部分,很快):

# 老服务器 Nginx 切维护模式
# mv /etc/nginx/sites-enabled/yoursite /tmp/
# 然后增量同步
rsync -avzP --delete --exclude='cache/' --exclude='tmp/' 
  -e "ssh -p 22" 
  /var/www/html/ root@雨云IP:/var/www/html/

确认文件同步完、数据库已导入、雨云机器上能本地 curl 通,切 DNS。

五、DNS 切换与 TTL 技巧

切入正题前几小时,先把域名的 A 记录 TTL 降到 60 秒(如果原来的很大,需提前设,TTL 是缓存到期后才生效新值)。切换时把 A 记录指向雨云 IP,最长 60 秒内用户就跑到新服务器了。

关键回滚机制:保留老服务器的配置和环境至少 48 小时,DNS 切回原 IP 也是 60 秒内生效。万一迁移后出问题,不用从备份恢复,直接切回原 IP。

六、迁移后的检查项

  • curl -I 雨云IP 看返回 200;
  • 检查 PHP 错误日志有没有报缺失扩展;
  • 登录 WordPress 后台跑一下,看文章、插件、主题是否正常;
  • 检查文件权限(www-data 读写的目录);
  • 确认 crontab 任务已迁移(老服务器的定时备份等)。

七、完整迁移时间线

步骤 操作 是否停机
T-24h DNS TTL 降到 60s
T-2h 第一次 rsync 全量
T-30min 数据库导出→导入
T-5min 老服切维护模式、最终 rsync 是(约 5 分钟)
T DNS 切指向新 IP
T+48h 确认无问题,关闭老服务器

八、几个易翻车点

  • PHP 版本不对——老服务器跑 PHP 7.4 新装 PHP 8.2,代码里有不兼容函数直接报 500。迁移前先确认版本;
  • MySQL 字符集不一致——导出文件里没指定字符集,导入后中文全变问号;
  • rsync 忘了 –delete 导致老文件残留;
  • 迁移后忘了更新 WordPress 的 siteurl 和 home 字段,后台登录跳回老域名。

常见问题

关于从其他平台迁移到雨云的常见疑问,下面一并解答。

常见问题(FAQ)

迁移过程会停机多久?
按本文流程,老服务器切换维护模式到最终 rsync 完成约 5 分钟,加上 DNS 缓存最长 60 秒,总中断窗口约 6 分钟。前面 rsync 预同步和数据库导出都在线完成。
DNS 切到雨云后还能回滚吗?
能。提前把 TTL 降到 60 秒,老服务器保留至少 48 小时。出问题直接把 A 记录改回原 IP,60 秒内恢复。只要老服务器没关、没改,回滚就是改一条 DNS 记录的事。
数据库迁移会不会丢数据?
mysqldump --single-transaction 对 InnoDB 做一致性快照导出,不会丢。如果在导出后到切换前还有用户操作,这些增量数据确实没在新数据库里——这就是为什么最后一步要在维护模式下做。
迁移到雨云后环境不兼容怎么办?
迁移前在雨云上装和老服务器相同的 PHP/MySQL 版本,先测试环境。迁移后立刻看 PHP error log,常见问题包括扩展缺失、PHP 版本差异、MySQL 严格模式导致旧代码报错。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600