1.
准备工作与清单
- 盘点站群各VPS(IP、操作系统、服务端口、网站路径、数据库名称/用户)。
- 确认目标
香港VPS规格、带宽、操作系统版本与控制面板(如无面板建议使用SSH)。
- 设置低TTL(如60秒)计划,并准备好临时hosts测试映射。
2.
账号与访问配置
- 在目标VPS上创建相同系统用户与组,复制SSH公钥到~/.ssh/authorized_keys,确保免密登录。
- 配置防火墙允许rsync(873)/ssh(22)/数据库端口(仅在迁移阶段临时开放到源IP)。
3.
文件同步——第一次全量
- 在目标VPS执行:mkdir -p /var/www && chown www:www /var/www。
- 使用rsync做全量同步:rsync -azP --delete -e "ssh -p22" user@源IP:/var/www/ /var/www/。
- 验证权限、软连接和定制配置文件(如config.php)是否同步。
4.
数据库迁移——全量导出导入
- 在源主机执行:mysqldump --single-transaction --routines --triggers -u dbuser -p dbname > /tmp/dbname.sql。
- 传输并在目标导入:scp /tmp/dbname.sql target:/tmp/ && mysql -u dbuser -p dbname < /tmp/dbname.sql。
- 若是大库,使用mydumper/myloader或Percona XtraBackup做物理拷贝。
5.
增量同步与短停机窗口
- 在初次全量后开启定时增量rsync(每5-10分钟):rsync -az --delete ...,确保捕获新增文件。
- 对于数据库,采用二进制日志(binlog)或pt-heartbeat/gtid方案做增量复制,或在最终切换时执行一次短暂锁表的dump。
6.
切换计划与时间窗口
- 选择流量低峰期,提前通知用户并设置监控快照。
- 将DNS TTL提前24小时降为60秒,确保DNS切换后生效快速。
- 切换时停止源站写操作:systemctl stop nginx && systemctl stop php-fpm,最后执行一次增量db dump。
7.
最终切换步骤(操作顺序)
- 1) 停止源站写入服务;2) 最后一轮rsync与db dump并导入目标;
- 3) 在目标启动服务并检查网站与API响应;4) 修改DNS记录指向新IP并监控解析。
8.
测试与验证
- 使用临时hosts在本地或测试机映射新IP,验证页面、登录、支付、邮件发送等功能。
- 检查日志(/var/log/nginx、php-fpm、mysql)并比对请求响应码,确认无错误。
9.
SSL与邮件服务处理
- 证书:复制私钥与证书或在目标上用certbot重新申请(注意域名解析)。
- 邮件:若使用本地MTA,迁移邮件队列或建议切换到第三方SMTP,更新SPF/DKIM记录。
10.
回滚与应急方案
- 在切换前保留源VPS至少24-48小时,若出现问题可临时将DNS回滚到源IP。
- 记录每一步操作日志与时间点,必要时使用备份快照恢复数据。
11.
优化与长期同步策略
- 对站群采用集中存储或对象存储(如S3兼容)减轻单机迁移压力。
- 建议使用配置管理工具(Ansible)自动化重复步骤,减少人为失误。
12.
安全与合规检查
- 检查文件权限、密钥泄露、关闭无用端口并开启fail2ban/IDS。
- 若涉及用户数据,确认迁移符合当地法规和隐私政策。
13.
问:如何保证迁移期间搜索引擎收录不受影响?
- 答:先不改变URL结构,确保目标返回相同状态码与页面,用robots和sitemap保持一致,并在切换前后监控Google Search Console的抓取情况;若IP变动,等DNS传播完成再提交新站点地图。
14.
问:数据同步中如何避免数据丢失?
- 答:采用多次增量rsync与最后一次数据库瞬时dump(锁表或使用事务一致性),并在切换后核对记录数与关键业务数据;同时保留源端备份快照作为回滚点。
15.
问:常见故障与排查要点有哪些?
- 答:常见问题有DNS未及时生效(检查TTL与缓存)、权限错误导致文件不可读(检查owner/perm)、数据库字符集/版本差异(检查mysql版本与charset),以及防火墙阻断(确认安全组规则)。按日志—端口—服务顺序排查即可。
来源:香港站群Vps主机搬家迁移攻略与数据无缝切换方法