云服务器迁移教程:网站无缝搬家全步骤(实操经验版)
网站搬家最怕什么?数据丢失、域名解析混乱、服务中断时间长。我经历过三次大迁移,从虚拟主机到云服务器,从旧云到新云,踩过不少坑。今天分享一套经过验证的迁移流程,保证你网站搬家如履平地。
第一步:准备工作(做不好后面全白搭)
1. 确认新服务器环境
别急着迁移,先确认新服务器和旧环境是否匹配。比如旧机器用CentOS 7,新机器装Ubuntu 22,数据库版本、PHP版本可能不兼容。建议:新服务器尽量选和老环境一致的系统和软件版本,除非你愿意花时间调试。
我用的是沐雨云服务器,它的镜像市场有常见Web环境模板(LNMP、LAMP),可以直接选和你旧机器一致的版本,省去装环境时间。官网:https://www.muyuyun.cn
2. 关闭网站写操作
迁移期间如果有用户提交评论、下订单,会导致数据不一致。我一般直接关站维护,或者把网站改为「只读模式」。WordPress可以装个维护插件,Discuz直接后台关闭注册和发帖。
3. 备份!备份!备份!
别只备份数据库,以下文件必须全量备份:
- 整个网站文件(包括附件、静态资源)
- 数据库(全库导出,注意字符集设为utf8mb4)
- 配置文件(Nginx/Apache配置、PHP.ini、MySQL配置)
- SSL证书文件(没有就重新申请,但备着更稳)
推荐用tar打包压缩,然后scp或ftp下载到本地。
第二步:数据迁移(核心操作)
1. 数据库迁移
旧服务器导出:
mysqldump -u root -p --all-databases --default-character-set=utf8mb4 > alldb.sql
注意加上--hex-blob参数(如果有二进制数据),以及用gzip压缩减少传输时间。
传输到新服务器:
scp alldb.sql.gz root@新IP:/tmp/
新服务器导入:
gunzip < alldb.sql.gz | mysql -u root -p
如果数据量大(超过500M),建议在新服务器上先用screen或tmux执行,防止SSH断开。
踩坑提醒:导入时如果报错“specified key was too long”,说明字符集没对上。检查旧库和新库的字符集设置是否一致,特别是MySQL版本差异大的情况下。
2. 网站文件迁移
这是最花时间的部分。我的做法:
- 旧服务器打包:
tar -czf myweb.tar.gz /var/www/html - scp传输(推荐用rsync,支持断点续传)
- 新服务器解压到对应目录
核心策略:先把大部分文件传过去,再增量同步。用rsync命令:
rsync -avP --delete root@旧IP:/var/www/html/ /var/www/html/
--delete可以删除新服务器上多余的文件,保持一致性。
如果网站附件有十几GB,建议直接在新服务器上用wget从旧服务器下载,或者用nohup后台跑。
3. 配置迁移
把Nginx/Apache的虚拟主机配置文件、SSL证书、PHP-FPM配置、Redis配置等都迁移过去。
避坑:检查新旧服务器的目录权限是否一致。比如旧服务器网站目录是www:www,新服务器可能是apache:apache,需要改归属:
chown -R www:www /var/www/html
第三步:切换域名解析(决定停机时长)
方法一:低流量网站(直接解析)
把域名A记录指向新服务器IP,TTL设成300秒(5分钟)。一般10分钟内全球生效。
注意:DNS缓存还在,老用户可能还会访问旧服务器,建议保留旧服务器24小时。
方法二:零停机方案(反向代理+预热)
在新旧服务器之间搭建Nginx反向代理,把80%流量引到新服务器,20%引到旧服务器,边测试边切到100%。这需要你有两台服务器都开着的成本,但适合电商类不能中断的网站。
方法三:数据库同步(最保险)
对于频繁写入的网站(论坛、电商),核心逻辑是:先建立主从数据库同步,等数据一致后再切域名。操作如下:
- 旧服务器开启二进制日志,作为主机(Master)
- 新服务器作为从机(Slave)同步
- 同步完成(Seconds_Behind_Master为0)后,暂停旧服务器写入
- 切域名到新服务器
第四步:收尾检查(千万别急着删除旧服务器)
必须检查清单:
- 网站能否正常访问(首页、文章页、搜索页)
- 后台登录是否正常(Cookie是否能保存)
- 图片、CSS、JS是否加载正常(看浏览器F12有没有404)
- SSL证书是否生效(HTTPS绿锁)
- 后台的附件上传、主题/插件更新功能是否正常
- API接口是否正常(比如微信支付回调、邮件发送)
- 服务器资源监控(CPU、内存、磁盘IO是否正常)
常见翻车:
- 文件权限问题导致无法写缓存
- 数据库连接配置里的主机名还是旧IP
- PHP版本差异导致函数弃用报错
第五步:收尾清理(给后续维护留后路)
保留旧服务器3-7天,以防域名解析出问题需要回滚。建议:
- 旧服务器保持开机,但网站关闭写入
- 定期再同步一次数据(如果网站有新数据)
- 7天后确认无问题再释放旧服务器
确认一切正常后,在新服务器上:开启自动备份(每周全量+每天增量)、设置Swap分区(如果内存小)、开启防火墙(如iptables或firewalld)、安装Fail2ban防爆破。
最后说句大实话: 云服务器迁移这件事,省什么都不能省测试时间。你测试得越仔细,上线后越省心。沐雨云服务器支持免费迁移协助(看他们官网说明),如果数据量大或者你手生,不妨联系客服帮忙搭把手,比自己踩坑强。