1.
概述与准备工作
准备清单:源VPS与目标(香港)VPS的SSH访问、root或sudo权限、域名控制面板、DNS账号、备份空间。
建议:先在两边都配置相同的时间、安装rsync、tar、openssl、mysqldump/pg_dump等工具;生成并交换SSH公钥,测试ssh root@目标 -p 端口能无密码登录。
2.
在源VPS上创建基础备份与用户
创建备份账号:sudo adduser backupuser && sudo usermod -aG sudo backupuser;
停止可选服务(短暂停止减少变更):sudo systemctl stop nginx && sudo systemctl stop php-fpm;
打包静态文件:sudo tar -czpf /root/webfiles_$(date +%F).tar.gz -C /var/www .
3.
数据库备份(MySQL/MariaDB 与 PostgreSQL)
MySQL:sudo mysqldump --single-transaction --routines --events -u root -p数据库名 | gzip > /root/db_$(date +%F).sql.gz;
Postgres:sudo -u postgres pg_dump -Fc 数据库名 > /root/db_$(date +%F).dump;
验证:gunzip -c db_*.sql.gz | head -n 5 或 pg_restore -l *.dump 查看格式。
4.
使用rsync进行文件同步(含示例命令)
初次全量同步(保留权限,显示进度):rsync -azP --delete --exclude='cache/' -e "ssh -p 22" /var/www/ backupuser@目标IP:/var/www/;
建议先做一次测试到目标的临时目录,再移动到正式目录,避免直接覆盖产生问题。
5.
使用VPS快照和备份面板
在目标
香港VPS面板创建快照:迁移前和迁移后各留一个快照。
用途:若切换失败,直接从快照恢复实例并改回DNS,速度最快;同时保留原VPS快照以便回滚。
6.
大数据库或高并发场景的增量同步
对于TB级别数据库:使用binlog或逻辑复制(MySQL GTID/replication)或使用Percona XtraBackup进行热备份;
增量策略:先做一次全量备份,然后开启增量binlog同步,切换时停止写入并应用最后的binlog,再切换DNS。
7.
SSL证书与域名TTL调整
在切换前48小时将域名TTL调低到60-300秒(在域名控制面板)。
证书迁移:若使用Let's Encrypt,可在目标上用certbot certonly --manual或从源复制/etc/letsencrypt(注意权限和私钥);测试HTTPS访问。
8.
最终切换操作步骤(执行窗口)
步骤:1) 在低峰窗口,将源服务置为只读或停止写入。2) 执行最后一次rsync:rsync -azP --delete /var/www/ backup@目标:/var/www/。3) 导入最后一次数据库dump并重启服务。4) 在域名面板更改A记录指向新IP并监控TTL生效。
9.
验证、监控与回滚方案
验证清单:访问首页、登录、核心业务接口、检查错误日志(/var/log/nginx/error.log)、数据库连接正常。
回滚:若问题严重,快速将DNS指回旧IP并从快照或备份恢复服务,或在目标恢复旧数据并继续排查。
10.
问:如何实现零停机或最低停机时间?
答:通过先做全量同步并启用增量(binlog/replication),最后在短时窗口停止写入、应用增量并切换DNS。把TTL提前调低能缩短DNS生效时间,结合数据库主从切换能做到几分钟甚至无明显中断。
11.
问:备份应保留多久及加密保存技巧?
答:常规建议保留最近7-30天的每日备份和长期的周/月备份。备份文件可用openssl加密:openssl enc -aes-256-cbc -salt -in db.sql.gz -out db.sql.gz.enc,并把密钥保存在安全的密钥管理处。
12.
问:DNS切换中需要注意哪些常见问题?
答:注意降低TTL提前生效、确保目标已完全准备好、更新所有相关子域和MX记录、准备回滚IP、监控CDN缓存和浏览器缓存问题。切换后检查从全球不同地点的解析是否已更新。
来源:迁移指南 香港vps吧 社区分享的无缝切换与数据备份步骤