作为阿里云代理商,我们帮客户处理过不少迁移需求,每次都会遇到一些文档里没写、但实际操作中必然碰到的问题。这篇教程整理了完整的操作流程,以及容易出错的地方。
动手之前先搞清楚这件事
国内版和国际版账号体系完全不互通
很多用户以为用同一个阿里云账号登录,就能在国内版和国际版之间切换资源,实际上两边是完全独立的产品体系,账号不互通,资源不互通,控制台虽然界面相似,但背后是两套系统。
说白了就是没有"迁移"按钮,你要做的是在国际版重新建一套环境,再把国内服务器的数据搬过去。本质是重建 + 数据搬运,不是资源转移。
动手前,把迁移范围列清楚
很多人开始操作之后才发现漏了东西。一个完整的迁移通常涉及:
- 网站文件:/www 或 /var/www/html 等目录
- 数据库:MySQL、PostgreSQL 等
- 运行环境配置:Nginx/Apache 配置文件、PHP 版本、环境变量
- 域名解析:需要在新服务器测试完成后才改
- OSS 文件:如果有用到对象存储,里面的文件要单独处理
- SSL 证书:不用迁,重新签一张就好
建议在动手之前,把这几项逐一确认,避免迁到一半发现有东西漏了。
节点和配置怎么选
三个主要节点的实际 差别
阿里云国际版常用的节点是香港、新加坡和日本(东京)。这三个节点适用的场景不太一样:
香港节点对大陆用户访问最友好,延迟低,是出海业务里用得最多的节点;但近年香港线路在高峰时段偶尔有抖动,稳定性不如以前。新加坡节点在东南亚覆盖最好,线路稳定,适合面向东南亚市场的业务,价格比香港略高一点。日本节点延迟在东亚地区表现不错,价格相对有优势,但对大陆用户访问不如香港直接。
配置规格建议
迁移初期建议选跟国内版一致或稍高一档的规格,等迁移完稳定运行一段时间之后,再根据实际资源占用来调整。不要为了省钱在迁移阶段选低配,迁移本身会额外占用 CPU 和内存,配置太低容易出问题。
带宽计费的 差别
国际版 ECS 默认按流量计费 ,而国内版很多人用的是按固定带宽计费。
两种方式的成本结构完全不一样。
流量计费的好处是:网站访问量小的时候成本低。坏处是:如果网站有大量图片、视频或者文件下载,出站流量一多,账单会超出预期。建议在创建实例之前,估算一下每月大概的出站流量,再决定用哪种计费方式,别到月底看到账单才后悔。
完整迁移步骤
第一步:注册国际版账号并完成支付设置
国际版账号需要单独注册,地址是 international.aliyun.com。
注册过程中需要绑定一张能走境外交易的信用卡,Visa 或 Mastercard 都行,国内发行的信用卡有时候因为风控被拦截导致支付验证失败。
如果没有境外信用卡,或者注册过程中遇到支付验证失败、账号被限制等情况可以通过阿里云国际代理商开通账号。
二步:创建 ECS 实例和安全组
账号注册好、支付方式绑定完之后,进控制台创建 ECS 实例。这里有几个要注意的地方:
安全组规则要在创建实例时就配置好,至少放开 22 端口(SSH)、80 端口(HTTP)、443 端口(HTTPS)。安全组没配对是迁移完之后网站访问不了的高频原因,排查起来容易绕弯子。
系统镜像选跟国内版一样的操作系统和版本,减少环境差异带来的问题。
第三步:搭建运行环境(细节在这里)
新实例起来之后,先把运行环境搭好再搬数据。PHP 版本、数据库版本、Web 服务器(Nginx 或 Apache)都要跟国内版对齐,版本不一致是迁移完之后程序报错的主要原因之一。
有一个细节很多人忽略:时区。国际版 ECS 默认是 UTC,国内版一般是 CST(UTC+8),差了整整 8 小时。如果你的应用有定时任务、日志记录、订单时间戳等跟时间相关的逻辑,时区不对会导致这些全部乱掉,到时候排查起来非常麻烦。
bash
查看当前时区timedatectl# 改成上海时区timedatectl set-timezone Asia/Shanghai
搭环境的时候顺手就改掉,比迁完之后再排查省事得多。
第四步:数据库迁移
用 mysqldump 导出,然后传到新服务器导入。
bash
在国内服务器上导出mysqldump -u root -p --default-character-set=utf8mb4 数据库名 > backup.sql# 传到国际版服务器scp backup.sql root@国际版服务器IP:/root/# 在国际版服务器上导入mysql -u root -p 数据库名 < backup.sql
导出时加上 --default-character-set=utf8mb4 这个参数,跟后面要说的字符集乱码问题有关。
导入完成后,记得修改程序里的数据库连接配置,把 host 地址改成新服务器的地址。
第五步:网站文件迁移
打包之后用 scp 传,比逐个文件传快很多。
bash
在国内服务器上打包tar -czf site_backup.tar.gz /www/wwwroot/你的网站目录# 传到国际版服务器scp site_backup.tar.gz root@国际版服务器IP:/root/# 在国际版服务器上解压到对应目录tar -xzf site_backup.tar.gz -C /www/wwwroot/
解压完之后有一步很多人会漏掉:文件权限。从另一台服务器传过来的文件,属主信息可能对不上,导致 Web 服务器读写时报错,表现为上传文件失败或者缓存目录写不进去。
bash
chown -R www:www /www/wwwroot/你的网站目录
第六步:本地测试,别急着改 DNS
环境搭好、数据迁过来之后,先本地测试,不要直接动 DNS。
方法是修改本地电脑的 hosts 文件,把域名临时指向国际版服务器的 IP,然后浏览器访问,把网站主要功能过一遍:页面加载、用户登录、数据库读写、图片显示、表单提交都测一下。
hosts 文件位置:
- Windows:C:\Windows\System32\drivers\etc\hosts
- Mac/Linux:/etc/hosts
加一行:
国际版服务器IP 你的域名
测完把这行删掉就行,不影响其他人正常访问旧服务器。
第七步:域名解析切换
本地测试没问题之后,去域名管理后台把 A 记录改成国际版服务器 IP。DNS 生效时间一般是几分钟到几小时,这段时间新旧服务器要同时保持运行。
改完之后用手机切 4G(绕开本地 hosts 缓存)访问网站,确认已经指向新服务器,再做一次完整功能测试。
迁移过程中最常 犯的错
时区没改,时间全部乱掉
上面步骤里已经提到,这里再强调一次,因为确实有不少人迁完之后才发现这个问题。定时任务执行时间偏 8 小时、日志时间对不上、前端显示的时间不对,这些都是时区没改的典型表现。迁完之后第一件事,先确认时区。
数据库字符集不一致,中文变乱码
导入之后发现中文显示乱码,通常是导出时没有指定字符集,或者新数据库的默认字符集跟原来不一样。先查一下原数据库用的是什么字符集:
sql
SHOW VARIABLES LIKE 'character_set%';
然后确认新数据库设置一致。如果已经导入了乱码数据,没有捷径,需要重新导出、清空数据库、重新导入。
文件权限错误,网站读写报错
表现是页面能打开,但上传图片失败、某些功能报错、缓存写不进去。用 chown 把文件属主改成 Web 服务器用户就能解决,通常是 www 或 nginx。
OSS 数据忘了迁,图片全挂
如果国内版的网站用了 OSS 来存图片或者静态文件,这部分数据不会随着网站文件一起过来。国内版的 OSS bucket 和国际版是隔离的,必须单独处理。
你需要在国际版重新创建 OSS bucket,把数据同步过去,然后修改程序里的 OSS 配置,包括 endpoint、bucket name 和 AccessKey。关于国际版 OSS 的创建和配置流程,可以参考阿里云国际版 OSS 怎么用?这篇。
关于 SMC 工具,适不适合用
阿里云有个叫 Server Migration Center(SMC)的工具,可以把整个系统盘的快照迁移过去,国内版迁国际版理论上也能用。
坦白说,SMC 更适合从物理机或者其他云平台迁移到阿里云的场景。用来做国内版迁国际版,需要在两端分别配置 AccessKey,迁移完还要处理网络、安全组等一堆设置,操作复杂度并不比手动迁低,出了问题反而更难定位。
什么情况下考虑 SMC:服务器上部署了很多定制化服务,运行环境非常复杂,手动重建成本太高。如果只是普通的网站或者小型应用,手动迁更直接、更可控。
迁移完成后的收尾核查
切换完 DNS、新服务器运行起来之后,不要立刻释放国内的 ECS 实例。建议再跑一周,确认以下几件事:
- 新服务器 CPU 和内存使用率是否正常,有没有异常的资源占用
- 网站各项功能是否稳定,有没有偶发性报错
- 流量计费是否在预期范围内(国际版按流量计费,第一个月要重点关注)
- 日志里有没有持续出现的报错信息
一周下来没有问题,再去把国内实例停机或释放。这样即便发现漏了什么,还有退路。
除此之外,还有几个收尾动作容易忘:
- 更新程序里写死的国内服务器 IP 或内网地址
- 检查所有定时任务的执行时间是否正常
- 确认邮件发送功能是否正常(国际版对出站邮件有不同的限制策略)
- 重新申请 SSL 证书并配置 HTTPS
自己搞不定怎么办
迁移涉及的细节比较多,时区、字符集、文件权限、OSS、DNS 切换时机,任何一个环节没处理好都可能导致迁完之后出问题。如果中途卡住了,或者不想自己一步步来,找有实际操作经验的代理协助是个合理的选择,至少可以省掉踩坑的时间成本。