搬到新服务器,主要是细心复制和耐心等待,而真正造成麻烦的很少是网站本身,而是它周围的东西:存放在旧主机账户上的邮件、只接受旧服务器 IP 地址请求的支付网关、没人知道存在的计划任务。如果您打算把网站迁移到新主机,按照下面的顺序一步步来,大多数意外都会变成清单上的条目。

把网站迁移到新主机之前:先做清点盘点

主机迁移清单从现有的情况开始,而不是从复制开始:

  • 每一部分在哪里。域名注册商、DNS 服务商、网站托管和邮件往往是四个不同的账户。写下每一项由哪家公司负责,以及谁持有登录信息。
  • 软件版本:PHP 版本和扩展、数据库服务器及其版本、Web 服务器以及所有缓存层。
  • 数据库及其大小,包括没人记得的旧安装所使用的数据库。
  • Cron 任务和其他计划任务:备份、数据源、订单导出、缓存预热。
  • 邮件。邮箱是否在同一个主机账户上?网站是通过本地服务器发送邮件,还是通过外部服务?
  • IP 白名单。只接受来自当前服务器流量的支付网关、物流和 ERP 连接或合作伙伴 API。新服务器的出站地址会不同。

复制文件和数据库

文件最适合通过 SSH 使用 rsync 迁移,它可以重复运行,只复制有变化的部分。对于 MySQL 和 MariaDB,带有 --single-transaction 选项的 mysqldump 能在运行期间不锁定网站的情况下,为 InnoDB 表生成一致的快照。在新服务器上导入转储文件后,对比关键表的行数:订单、客户、文章。

要留意那些会悄悄造成损害的细节:

  • 字符集。一个旧的 latin1 数据库如果被草率地按 utf8mb4 导入,会出现带重音的字母和符号乱码。导入前后都要检查字符集和排序规则。
  • 版本跨度。从 MySQL 迁移到 MariaDB,或迁移到更新的大版本,可能改变某些查询和设置的行为。请先在副本上演练。
  • 配置文件中硬编码的路径和网址。如果域名也一并更改,WordPress 需要一个能识别序列化数据的搜索替换工具,例如 WP-CLI 内置的那个。

通过 hosts 文件在新服务器上测试

在任何 DNS 更改之前,您就可以从自己的电脑上看到新服务器上的网站。在电脑的 hosts 文件中添加一行,把域名映射到新服务器的 IP 地址,您的浏览器就会加载新的副本,而其他人看到的仍是旧站。登录、提交表单、运行一笔测试订单、触发一封重置密码邮件,并查看新服务器上的错误日志。

提前规划好迁移后的 SSL 证书。Let's Encrypt 等机构签发的证书通常通过 HTTP 验证,而这只有在 DNS 指向新服务器后才行得通。您可以把现有证书复制过去用于切换,也可以改用 DNS 记录来验证,或者在切换之后立即签发新证书。要避免的是访客在有效证书就位之前就到达了新服务器。这种先测试的方式是我们主机与数据库迁移服务的核心。

DNS 切换:TTL、域名服务器与传播

世界各地的解析器会按每条记录的 TTL(生存时间)所允许的时长缓存 DNS 应答。提前一天或更久,把您要更改的记录(例如域名和 www 的 A 记录)的 DNS TTL 降低到几分钟。等待的时间至少要和旧 TTL 一样长,这样所有人缓存的就是那个较短的值。切换当天更改记录,大多数访客几分钟内就会跟上。

人们所说的 DNS 传播,其实是旧的缓存应答过期。所以在同一个 DNS 服务商处更改记录很快,而同时决定更改域名服务器则较慢:域名的委派信息由顶级域名的服务器缓存,往往长达两天。如果 DNS 服务商也必须更换,请先复制每一条记录(MX、用于 SPF、DKIM 和 DMARC 的 TXT 记录、验证记录以及子域名),并把域名服务器的迁移安排在与服务器切换不同的一天。

如何在不丢失邮件的情况下迁移网站

如果邮件托管在别处,例如 Microsoft 365 或 Google Workspace,就不要动 MX 记录,邮件不会察觉这次搬迁。如果邮箱位于旧的主机账户上,它们需要单独迁移,并且只有在复制完成之后才能更改 MX。我们的迁移邮件到 Microsoft 365 或 Google Workspace服务涵盖这一点,而更换主机往往也正是把邮件与 Web 服务器分离开来的合适时机。

切换之后:把网站迁移到新主机

  1. 对于商店和会员网站,先短暂暂停新订单,运行最后一次数据库同步,然后再更改 DNS,这样最后一次复制之后就没有任何内容写入旧服务器。
  2. 在新服务器上重新创建 cron 任务,并在旧服务器上停用它们,否则客户可能会收到每封定时邮件两遍。
  3. 在新服务器上设置备份和监控;它们不会随文件一起迁移。
  4. 观察旧服务器的访问日志。当剩下的访客只有机器人时,切换就完成了。
  5. 在取消之前,把旧主机再保留一两周,以防冒出被遗忘的文件或邮箱。

常见问题:把网站迁移到新主机

DNS 传播需要多长时间?

对于提前设置了短 TTL 的记录更改,大多数访客几分钟内就会生效。对于域名服务器的更改,请预留一到两天,因为委派信息由注册局的服务器缓存。

网站可以零停机迁移吗?

对于展示型网站和博客,可以:在 DNS 切换期间,两台服务器提供相同的内容。商店则需要在最后同步期间短暂暂停新订单,最好安排在一周中最清闲的时段。

应该同时迁移 DNS 托管吗?

最好不要。一次只改一件事:先换服务器,等一切稳定之后,再换 DNS 服务商或域名注册商。

更换主机能解决网站变慢的问题吗?

只有当服务器是瓶颈时才行。如果服务器响应很快而页面仍然加载缓慢,原因通常出在主题、图片或插件上,光换服务器没有用。先测量。

要迁移 WordPress、WooCommerce、Magento 或 Joomla 网站,或者把整个 cPanel 账户迁到云服务器?我们的网站与数据库迁移服务涵盖复制、数据库检查、最终同步和 DNS 切换。请告诉我们网站目前托管在哪里、要迁往何处,以及 DNS 和邮件在哪里管理,我们可以与您一起规划这次搬迁。