大多数痛苦的迁移都是顺序错误,而不是技术问题。有人先改 DNS,随后才发现数据库已经过期。按下面的顺序操作,访客就不会察觉你搬了家。
第 1 步:提前调低 DNS TTL
在迁移前至少一天,把 A 和 AAAA 记录的 TTL 设为 300 秒。已经缓存旧值的服务器需要时间才会过期,所以这一步在迁移当天来不及补救。
第 2 步:先搭建新服务器
创建新的 VPS,应用加固清单,并安装相同的技术栈:Web 服务器、PHP 或 Node 版本、数据库引擎。版本一致能避免大多数意外。要复制配置,而不只是内容。
第 3 步:复制文件
rsync -aHAX --info=progress2 -e ssh /var/www/ user@NEW_IP:/var/www/
现在先运行一次。第一次很慢,重复运行时很快,这正是目的所在。
第 4 步:复制数据库
# on the old server
mysqldump --single-transaction --routines --triggers mydb | gzip > mydb.sql.gz
scp mydb.sql.gz user@NEW_IP:~/
# on the new server
gunzip < mydb.sql.gz | mysql mydb
这是一次演练,它会给你一份可用于测试的可运行副本。
第 5 步:在任何人被引导过去之前先测试
通过编辑本机的 hosts 文件,让你自己的电脑指向新服务器:添加 NEW_IP example.com www.example.com。浏览网站、登录、提交表单并下一笔测试订单。在公众仍然访问旧服务器的时候修复出现的问题。使用 DNS 验证方式安装 TLS 证书,这样在切换前它就能正常工作。
第 6 步:冻结、最后一次同步、切换
- 把旧站点设为维护模式或只读模式。
- 重复执行
rsync以及数据库的导出和导入。 - 把 DNS 记录改为指向新 IP。
- 删除 hosts 文件中的条目,并从另一个网络进行检查。
只读窗口通常只有几分钟。如果是商店或带登录功能的网站,请安排在访问量较低的时段。
第 7 步:观察,然后下线旧服务器
旧机器请保留几天。有些解析器会忽略 TTL,所以仍会有少量流量到来。如果可以,把这些流量转发或代理到新 IP,检查日志,然后把 TTL 调回正常值。在删除旧服务器之前,先从新服务器做一次全新备份。
同时还要迁移到不同的司法管辖区?请先在离岸托管司法管辖区对比中比较各个选项。