网站运行一段时间后,可能需要更换服务器(原服务器太慢、太贵、服务商不好、升级配置等)。服务器迁移是站长必备技能,这篇教程教你零停机、零数据丢失的完整迁移步骤。
一、迁移前准备
- 明确迁移原因和目标:
- 为什么要迁移?(速度慢、价格贵、配置不够、服务商问题、地域调整)
- 新服务器要满足什么要求?(配置、带宽、地域、价格)
- 迁移后预期达到什么效果?
- 选择新服务器:
- 根据网站需求选择配置(CPU、内存、硬盘、带宽)
- 选择合适的地域(靠近目标用户,国内用户选国内节点)
- 选择靠谱的服务商(阿里云、腾讯云、华为云等)
- 新服务器系统版本尽量和原服务器一致(如都是CentOS 7或Ubuntu 20.04)
- 新服务器配置不低于原服务器(至少持平,建议略高)
- 时间选择:
- 选择网站访问量最低的时段(通常凌晨2-5点)
- 避开重要节日、活动、促销期间
- 预留足够的时间(通常1-3小时,复杂网站可能更久)
- 提前通知用户(如果是论坛或社区,提前公告维护时间)
- 信息记录:
- 记录原服务器的配置信息(系统版本、Nginx版本、PHP版本、MySQL版本)
- 记录网站配置(域名、根目录、数据库名、数据库用户名密码)
- 记录Nginx/Apache虚拟主机配置
- 记录PHP配置(php.ini中的重要设置)
- 记录SSL证书情况(是否有证书、证书来源)
- 保存所有密码(服务器、数据库、后台、FTP)
- 通知相关方:
- 如果网站有CDN,准备好修改CDN回源地址
- 如果有第三方服务(邮件、短信、支付),确认是否需要修改IP白名单
- 如果有搜索引擎站长平台,迁移后关注抓取情况
• 完整备份:迁移前一定要完整备份网站文件和数据库,异地备份,防止迁移失败数据丢失
• 测试迁移流程:如果是重要网站,建议先在测试服务器上演练一次迁移流程
• 不要在原服务器到期当天迁移:提前几天迁移,留出回滚和解决问题的时间
• 不要删除原服务器数据:新服务器运行正常至少1周后,再考虑删除原服务器数据
• 降低TTL:迁移前1-2天将域名DNS的TTL改为60秒(1分钟),让DNS切换更快生效
二、备份原服务器数据
- 备份网站文件:
- 方法1:宝塔面板 → 网站 → 备份 → 立即备份(整站备份)
- 方法2:宝塔文件管理 → 选中网站根目录 → 压缩为zip/tar.gz → 下载到本地
- 方法3:用FTP/SFTP下载整个网站目录(适合小网站)
- 备份内容:网站根目录所有文件(HTML、PHP、图片、主题、插件、上传文件等)
- 备份数据库:
- 方法1:宝塔面板 → 数据库 → 对应数据库 → 备份 → 立即备份
- 方法2:phpMyAdmin → 选择数据库 → 导出 → 选择SQL格式 → 执行下载
- 方法3:命令行 mysqldump -u用户名 -p 数据库名 > 备份.sql
- 如果有多个数据库,每个都要备份
- 备份配置文件:
- Nginx配置:/www/server/panel/vhost/nginx/ 目录下的配置文件
- PHP配置:php.ini(可以在宝塔PHP设置中查看)
- SSL证书:如果是自己安装的证书,备份证书文件(宝塔可以在SSL设置中查看)
- 宝塔配置:如果用宝塔,记录软件版本和设置
- 验证备份完整性:
- 检查备份文件大小是否合理(和网站实际大小差不多)
- 解压备份文件,检查文件是否完整
- 用文本编辑器打开SQL备份文件,检查是否有数据(不是空文件)
- 建议在本地测试恢复一次,确保备份可用
- 异地保存备份:
- 将备份文件下载到本地电脑
- 同时上传到云存储(七牛云、阿里云OSS等)
- 确保至少有2份备份在不同地方
三、新服务器环境配置
- 购买并初始化新服务器:
- 在云服务商购买新服务器,选择系统(推荐CentOS 7+或Ubuntu 20.04+)
- 设置root密码或SSH密钥
- 安全组开放必要端口:80(HTTP)、443(HTTPS)、22(SSH,建议改端口)、8888(宝塔面板)
- 记录新服务器的IP地址
- 安装宝塔面板:
- SSH登录新服务器
- 执行宝塔安装命令(参考宝塔官网,CentOS和Ubuntu命令不同)
- 等待安装完成(通常5-15分钟)
- 记录宝塔面板地址、用户名、密码
- 登录宝塔面板,修改默认面板端口和用户名密码
- 安装网站环境:
- 宝塔首次登录会提示安装环境套件,选择LNMP(推荐)或LAMP
- 软件版本尽量和原服务器一致:
- Nginx:和原服务器相同版本(如1.20)
- MySQL:和原服务器相同版本(如5.7或8.0,注意8.0兼容性)
- PHP:和原服务器相同版本(如7.4,注意PHP 8兼容性)
- 点击"一键安装",等待安装完成(通常10-30分钟)
- 安装完成后,在"软件商店"中检查是否需要安装额外的PHP扩展(如原服务器用了什么特殊扩展)
- PHP配置:
- 宝塔 → 软件商店 → PHP → 设置 → 配置修改
- 调整重要参数:
- upload_max_filesize:上传文件大小限制(如50M)
- post_max_size:POST数据大小(如50M)
- max_execution_time:脚本执行时间(如300秒)
- memory_limit:内存限制(如256M)
- 和原服务器的PHP配置保持一致
- 保存并重启PHP
- 创建网站和数据库:
- 宝塔 → 网站 → 添加站点
- 域名:填写你的域名(如 www.example.com 和 example.com)
- 根目录:默认即可(/www/wwwroot/域名)
- FTP:可以不创建(用SFTP更安全)
- 数据库:选择MySQL,设置数据库名、用户名、密码(记录下来)
- PHP版本:选择和原服务器一致的版本
- 点击"提交"
- 配置SSL(可选,迁移后配置也行):
- 宝塔 → 网站 → 对应网站 → SSL
- 可以先不配置,等DNS切换到新服务器后再申请Let's Encrypt免费证书
- 如果原服务器有证书,可以导出证书文件,在新服务器导入
四、数据迁移与配置
- 上传网站文件到新服务器:
- 方法1:宝塔文件管理 → 进入网站根目录 → 上传备份压缩包 → 解压 → 将文件移动到根目录
- 方法2:用FTP/SFTP客户端(FileZilla)连接新服务器,上传网站文件(适合小网站)
- 方法3:在原服务器用scp/rsync直接传输到新服务器(适合大网站,速度快):
scp -r /www/wwwroot/域名/* root@新服务器IP:/www/wwwroot/域名/
- 确保所有文件都上传完整,没有遗漏
- 检查文件权限:目录755,文件644(宝塔默认正确,如果不对批量修改)
- 导入数据库:
- 方法1:宝塔 → 数据库 → 对应数据库 → 管理(phpMyAdmin)→ 导入 → 选择SQL备份文件 → 执行
- 方法2:宝塔数据库页面,点击"从备份导入",上传SQL文件
- 方法3:命令行导入:
mysql -u用户名 -p 数据库名 < 备份.sql
- 如果数据库很大(超过100MB),建议用命令行导入,phpMyAdmin可能超时
- 导入完成后,检查数据库表是否完整,数据量是否和原服务器一致
- 修改网站配置:
- 如果新数据库的用户名/密码和原服务器不同,需要修改网站配置文件:
- WordPress:修改 wp-config.php 中的 DB_NAME、DB_USER、DB_PASSWORD
- Typecho:修改 config.inc.php
- 其他CMS:找到对应的数据库配置文件修改
- 如果网站路径变了,检查配置文件中的路径设置(大部分CMS会自动识别,部分可能需要修改)
- 如果有缓存,先删除缓存文件(WordPress的wp-content/cache目录等)
- 如果新数据库的用户名/密码和原服务器不同,需要修改网站配置文件:
- 配置Nginx伪静态:
- 宝塔 → 网站 → 对应网站 → 伪静态
- 选择对应的CMS规则(WordPress、Typecho、Discuz等,宝塔有预设规则)
- 如果原服务器有自定义的Nginx配置,复制过来
- 保存配置
- 本地测试(修改hosts):
- 在切换DNS之前,先在本地电脑测试新服务器是否正常
- 修改本地hosts文件(Windows:C:\Windows\System32\drivers\etc\hosts;Mac/Linux:/etc/hosts)
- 添加一行:新服务器IP 你的域名(如 1.2.3.4 www.example.com)
- 保存hosts文件
- 刷新DNS缓存(Windows:ipconfig /flushdns)
- 在浏览器访问你的域名,此时访问的是新服务器
- 全面测试:
- 首页是否正常打开
- 文章页、分类页是否正常
- 后台能否登录(域名/admin)
- 图片、CSS、JS是否正常加载
- 评论、搜索、注册等动态功能是否正常
- 数据库连接是否正常(没有数据库错误)
- 网站速度是否正常
- 测试通过后,恢复hosts文件(删除添加的那行),准备切换DNS
• 增量同步:先全量传输一次,切换前再用rsync增量同步一次(只传输变化的文件),减少停机时间
• 数据库主从:非常大的网站可以配置数据库主从同步,原服务器为主,新服务器为从,同步完成后切换
• 分块传输:网站文件很大时,分目录分批传输,避免一次传输超时
• 利用云服务商迁移工具:阿里云、腾讯云都有服务器迁移工具,可以一键迁移
• 降低TTL:迁移前1-2天将DNS TTL改为60秒,切换后DNS很快生效,减少访问旧服务器的时间
五、DNS切换与测试
- 切换前最后同步:
- 如果网站有新内容(如用户注册、新评论),在切换前最后同步一次数据库和文件
- 可以临时关闭网站(显示维护页面),确保切换期间没有新数据写入
- 用rsync增量同步变化的文件
- 重新导出并导入数据库(如果有关键数据变化)
- 修改DNS解析:
- 登录域名DNS管理控制台(阿里云、腾讯云、Cloudflare等)
- 找到网站域名的A记录(或CNAME记录)
- 将记录值从原服务器IP改为新服务器IP
- TTL设置为60秒(1分钟),让切换更快生效
- 保存修改
- 如果有CDN,同时修改CDN的回源地址为新服务器IP
- 等待DNS生效:
- DNS修改后,全球DNS服务器会逐步更新,通常几分钟到几小时生效
- 可以用 https://www.whatsmydns.net/ 检查全球DNS解析情况
- 本地可以用 nslookup 域名 或 ping 域名 查看解析到的IP
- 生效期间,部分用户可能还访问旧服务器,部分访问新服务器,这是正常的
- 新服务器配置SSL:
- DNS生效后,在新服务器申请SSL证书(宝塔 → 网站 → SSL → Let's Encrypt → 申请)
- 开启"强制HTTPS"
- 测试HTTPS访问是否正常
- 如果原服务器有付费证书,可以导出证书文件在新服务器导入,不需要重新申请
- 全面测试新服务器:
- 访问网站前台所有页面,确保正常
- 登录后台,测试所有功能
- 测试图片、视频、文件下载是否正常
- 测试表单提交、评论、注册登录等动态功能
- 测试移动端访问
- 用站长工具测试全国各地访问速度(如17ce.com、站长工具测速)
- 检查服务器资源使用(CPU、内存、带宽)是否正常
- 查看Nginx、PHP、MySQL错误日志,是否有报错
- 搜索引擎和第三方服务:
- 百度站长平台、Google Search Console:关注抓取情况,如有异常重新提交sitemap
- CDN:确认回源地址已改为新服务器IP
- 邮件服务:如果用服务器发邮件,新服务器IP可能需要配置发信域名和SPF/DKIM
- 支付接口、短信接口等:如果有IP白名单限制,添加新服务器IP
- 统计代码(百度统计、Google Analytics):不需要修改,自动继续统计
- 原服务器保持运行:
- 原服务器不要立即关闭或删除,保持运行至少1-2周
- 因为DNS完全生效需要时间,部分用户可能还访问旧服务器
- 如果新服务器出问题,可以快速切回旧服务器(回滚)
- 1-2周后,确认新服务器稳定运行,再考虑关闭或释放原服务器
六、迁移后检查与FAQ
- 每天检查(迁移后第一周):
- 网站是否能正常访问
- 服务器CPU、内存、带宽是否正常
- Nginx、PHP、MySQL错误日志是否有报错
- 网站功能是否正常(后台、评论、搜索等)
- 搜索引擎抓取是否正常(百度站长平台、GSC)
- 网站流量是否正常(百度统计、GA)
- 一周后检查:
- 网站稳定运行,没有频繁故障
- 服务器资源使用率合理,不需要紧急升级
- 搜索引擎收录和排名恢复正常(迁移可能短暂波动,一周左右恢复)
- 用户没有反馈访问问题
- 确认无误后,可以考虑释放原服务器
- 优化新服务器:
- 根据网站实际负载调整PHP、MySQL配置
- 配置缓存(OPcache、Redis、Memcached)
- 配置自动备份(宝塔自动备份到云存储)
- 配置安全防护(防火墙、Fail2ban、安全插件)
- 配置监控告警(宝塔监控、云监控)
如果迁移后新服务器出现严重问题,无法快速解决,可以回滚到原服务器:
1. 将DNS解析改回原服务器IP
2. 等待DNS生效(几分钟到几小时)
3. 用户恢复访问原服务器
4. 在新服务器上排查问题,解决后重新迁移
5. 这就是为什么原服务器要保持运行至少1-2周
回滚不会丢失数据,因为原服务器的数据还在(切换期间新产生的数据可能需要手动同步,但通常影响不大)。
Q:迁移会影响SEO和排名吗?
A:如果操作正确,迁移对SEO影响很小,可能短暂波动(几天到一周),然后恢复。关键是:①确保新服务器速度不低于原服务器;②URL结构不变,不要改链接;③301重定向正确(如果有URL变化);④及时在百度站长平台和GSC更新信息;⑤sitemap正常提交。如果服务器IP变化,搜索引擎会自动识别,不需要特别处理。避免频繁迁移,每次迁移都有短暂波动。
Q:迁移期间网站会打不开吗?
A:如果操作熟练、提前配置好,迁移期间网站几乎不会中断。正确的流程是:①新服务器配置好并测试通过;②修改DNS,DNS生效期间新旧服务器同时运行,用户访问哪个都能正常打开;③DNS完全生效后,所有用户访问新服务器。整个过程网站都能正常访问,不会打不开。只有在切换前最后同步数据库时,如果数据量大可能需要短暂关闭网站几分钟,但大部分小网站不需要。
Q:数据库版本不同可以迁移吗?
A:可以,但要注意兼容性。MySQL 5.7升级到8.0,大部分网站兼容,但部分老程序可能有问题。建议新服务器的MySQL版本和原服务器一致,避免兼容性问题。如果必须升级版本,迁移后要全面测试网站功能,特别是数据库相关的功能。如果是从MySQL迁移到MariaDB(或反过来),大部分情况兼容,但也要测试。
Q:PHP版本不同有影响吗?
A:有影响。PHP 7.x升级到PHP 8.x,部分老插件/主题可能不兼容(PHP 8废弃了一些函数)。建议新服务器PHP版本和原服务器一致,迁移稳定后再考虑升级PHP。如果必须升级,先在测试环境测试兼容性,再在生产环境升级。WordPress 5.9+支持PHP 8,但部分第三方插件可能不支持。
Q:迁移后网站变慢了怎么办?
A:①检查新服务器配置是否足够(CPU、内存、带宽);②检查服务器地域是否靠近目标用户(如国内用户用了海外服务器会慢);③检查网络质量(ping服务器看延迟和丢包);④检查Nginx/PHP/MySQL配置是否优化;⑤检查是否有错误日志导致性能问题;⑥开启缓存(OPcache、页面缓存、数据库缓存);⑦接入CDN加速;⑧如果是云服务器,检查是否是共享型实例(性能受限),可以升级为独享型。
Q:可以用云服务商的迁移工具吗?
A:可以,阿里云、腾讯云、华为云都有服务器迁移工具(如阿里云的"服务器迁移中心SMC"、腾讯云的"在线迁移"),可以将原服务器(可以是其他服务商的)一键迁移到新服务器,自动完成环境和数据迁移。优点是简单方便、适合新手;缺点是可能迁移多余的文件、配置不一定最优、大网站迁移时间长。建议新手可以用迁移工具,有经验的站长手动迁移更可控。