1.
概述与适用范围
适用对象:准备将网站或应用从其他机房迁移到台湾VPS(CN2 网络)或在
台湾CN2间迁移。
目标:确保数据完整、服务可用性最小中断、DNS 切换平滑、能快速回滚。
前置假设:有 SSH 管理权限、源和目标机器均可配置防火墙、可调整 DNS TTL。
2.
迁移前的检查清单(必须项)
列出要准备的账号与权限:源站 root 或有 sudo 的系统用户、数据库管理员用户、DNS 管理权限、SSL 管理权限。
记录环境信息:操作系统版本、Nginx/Apache 版本、PHP/Node/Python 版本、数据库类型与版本、cron 任务、邮件队列、存储路径与配额。
3.
完整备份策略(文件与数据库)
文件备份:使用 tar 打包网站目录,例:tar -czpf /root/site-backup-$(date +%F).tar.gz /var/www/example.com。
数据库备份(MySQL):mysqldump -u root -p --single-transaction --routines --events --databases dbname > /root/dbname.sql。Postgres:pg_dump -U postgres -Fc dbname > /root/dbname.dump。
邮件与队列:若有邮件队列或 Redis,请导出 rdb / AOF 或使用 redis-cli save 并复制;对大型文件考虑分卷压缩。
4.
目标环境准备(软件与用户)
系统包安装(Debian/Ubuntu):apt update && apt install -y nginx mysql-client php-fpm certbot rsync;(CentOS)yum install -y nginx php-fpm mariadb-client rsync。
创建网站用户与目录,确保权限:useradd -m webuser; mkdir -p /var/www/example.com; chown -R webuser:www /var/www/example.com。
5.
传输文件的稳健方法(rsync/scp/断点续传)
推荐 rsync:rsync -avz --progress --delete --partial --bwlimit=2000 -e "ssh -p 22" /root/site-backup.tar.gz user@target:/root/。
大文件或不稳定网络:使用 --partial 与 screen/tmux;使用 scp 时加 -C 压缩与 -l 限速。若流量敏感可用 rsync --bwlimit 控制带宽。
6.
数据库迁移与同步策略
静态迁移(小站):停站写入(进入维护模式)→ 导出数据库 → 传到目标 → 导入并测试 → 切换。
大型或高可用:使用主从复制或 Percona XtraBackup;短时间切换可先做一次全备,再在切换前做增量 binlog 同步:在源上 FLUSH TABLES WITH READ LOCK,记录 binlog pos,导入到新库并设置复制。
7.
配置文件同步与必要替换
同步 Nginx/Apache 配置、php.ini、.env 等环境文件。
替换域名或 IP:使用 sed 或 wp-cli(WordPress):wp search-replace 'old-domain' 'new-domain' --skip-columns=guid。示例 sed:sed -i 's/old_ip/new_ip/g' /etc/nginx/sites-available/example.conf。
8.
SSL 证书处理与 HTTPS 流量
方式一:直接复制证书(/etc/letsencrypt/live/*)并确保私钥权限;方式二:在目标机用 certbot 重新申请(推荐)。
注意:若使用 Cloudflare 或 CDN,需同时在 CDN 上更新回 origin IP,检查 TLS 模式(full/strict)。
9.
DNS 切换的最佳实践
提前把域名 TTL 降低到 300 或 60(至少 24 小时)以便快速切换。
切换步骤:在目标就绪且已通过内网或 hosts 验证后,在 DNS 管理处修改 A 记录并观察;同时保持源站运行若干小时以便快速回滚。
10.
上线切换与验收测试
切换时间选择:低峰期,提前通知用户维护窗口(若需要短暂中断)。
上线后测试要点:curl -I https://yourdomain 检查状态码;tail -f /var/log/nginx/error.log 查看报错;执行常见业务流程(登录、下单、文件上传)。
11.
常见故障与快速排查步骤
502/504:检查 php-fpm 服务是否启动(systemctl status php7.x-fpm),查看 fastcgi_pass 配置与 socket 权限;如使用 TCP,确认端口未被防火墙阻止。
数据库连接失败:确认配置文件数据库 host、port、user、password、字符集;尝试在目标主机使用 mysql -h host -u user -p 测试连通性。
12.
网络与 CN2 相关注意事项
CN2 优势为更稳定的大陆线路,但仍需确认目标 VPS 提供商的线路出口策略与端口限制。
若出现特定地区访问不通:使用 traceroute 或 mtr 检查路由(mtr -rw domain 或 traceroute domain)。如遇端口(25 SMTP)被封,联系供应商开通或使用第三方邮件服务。
13.
回滚计划与清理工作
事先准备回滚脚本:将 DNS 改回源 IP、把备份数据库与文件恢复到源机、重启服务。
清理:迁移完成并稳定后,删除目标上临时备份与敏感密钥,检查用户与 SSH 密钥,确保仅允许必要访问。
14.
常见权限与 SELinux 问题解决
文件权限:chown -R www-data:www-data /var/www/example.com(Debian 系);若 403,检查 nginx 配置与 index 文件权限。
SELinux(CentOS/RHEL):如启用导致 socket 或文件访问异常,临时可 setenforce 0 调试,长期配置应用 chcon -R -t httpd_sys_rw_content_t /var/www/example.com 或配置策略。
15.
问:迁移过程中如何最小化停机时间?
回答:先同步静态文件并做一次全量数据库备份,降低 TTL,进入维护模式后做最后一次增量(或使用 binlog/主从),完成数据库导入并快速切换 DNS,同时保持源站一段时间以便回滚。
16.
问:迁移后访问慢或超时常见原因与排查方法?
回答:可能原因包括防火墙限速、CN2 出口路由问题、数据库未调优或缓存未启用。排查顺序:1) traceroute/mtr 检查网络;2) top/htop 查看 CPU/IO;3) 检查 Nginx/cache(varnish、redis)配置与连接数;4) 查看慢查询日志并优化。
17.
问:如果 SSL 在新机上不能正常工作我该如何快速定位?
回答:先用 openssl s_client -connect yourdomain:443 -showcerts 检查证书链与端口连通;再检查 nginx 配置 ssl_certificate 与 ssl_certificate_key 路径是否正确、权限是否允许 nginx 读取;最后确认防火墙开放 443 端口并重启 nginx。