网宝
新闻中心 / / 正文

数据零损失从其他服务商迁移到网宝操作手册

2026-04-05 17:13
技术部
← 返回

 

前言

服务器迁移是很多站长最担心的操作之一——担心数据丢失、担心网站宕机时间过长、担心迁移后出现各种奇怪的问题。

但实际上,只要按照正确的流程操作,服务器迁移可以做到:

  • 数据零损失:完整备份和验证确保没有任何数据丢失
  • 宕机时间最短:合理安排DNS切换时机,宕机时间控制在10分钟以内
  • 迁移后完全可用:提前测试确保所有功能正常

本文提供一套经过实战验证的迁移流程,覆盖从准备到完成的每一个细节步骤。


一、迁移前准备:先做这四件事

准备一:记录原服务器所有配置信息

迁移之前,把原服务器的关键配置记录下来:

 
 
bash
# 查看Nginx版本和配置路径
nginx -v
nginx -t

# 查看PHP版本
php -v

# 查看MySQL版本
mysql --version

# 查看已安装的PHP扩展
php -m

# 查看当前开放的端口
ss -tlnp

# 查看系统环境变量(.env文件)
cat /www/wwwroot/你的域名/.env

将这些信息保存到本地文档,新服务器需要搭建完全相同的环境。

准备二:在新服务器上搭建好运行环境

迁移数据之前,先在新服务器(网宝香港服务器)上完成环境搭建:

  1. 安装宝塔面板(参考《宝塔面板安装与配置完整教程》)
  2. 安装与原服务器相同版本的Nginx、MySQL、PHP
  3. 安装原服务器上使用的PHP扩展

验证环境一致性:

 
 
bash
# 在原服务器执行
php -m | sort > /tmp/php_extensions_old.txt

# 在新服务器执行
php -m | sort > /tmp/php_extensions_new.txt

# 对比两个文件的差异
diff php_extensions_old.txt php_extensions_new.txt

差异项在新服务器上逐一安装。

准备三:降低DNS的TTL值

迁移前24~48小时,将域名DNS的TTL值从默认的3600秒(1小时)降低到300秒(5分钟)甚至60秒。

TTL降低后,DNS切换生效时间从最长1小时压缩到5分钟,大幅缩短切换窗口期,减少用户访问到错误服务器的时间。

在域名注册商(如Cloudflare)修改TTL:

  • 进入DNS管理 → 找到A记录 → 将TTL从"Auto(自动)"改为"1 Min(1分钟)"

准备四:选择最佳迁移时间

选择网站流量最低的时间段(通常是凌晨2~4点)进行迁移,即使出现意外,影响的用户数量最少。


二、数据库迁移:最关键的步骤

步骤一:导出原服务器数据库

方法一:使用宝塔面板导出(推荐)

在原服务器宝塔面板 → 数据库 → 找到对应数据库 → 导出 → 选择压缩格式(.sql.gz),下载到本地。

方法二:命令行导出

 
 
bash
# 导出所有数据库
mysqldump -u root -p --all-databases > all_databases.sql

# 导出指定数据库(推荐,更精确)
mysqldump -u root -p 数据库名 > database_backup.sql

# 带压缩的导出(大数据库推荐)
mysqldump -u root -p 数据库名 | gzip > database_backup.sql.gz

导出完成后,必须验证备份文件:

 
 
bash
# 验证sql文件是否完整(检查末尾是否有完成标记)
tail -5 database_backup.sql
# 应该看到类似:-- Dump completed on 2026-04-14 12:00:00

# 验证压缩文件是否可读
gzip -t database_backup.sql.gz && echo "文件完整" || echo "文件损坏"

步骤二:将数据库文件上传到新服务器

 
 
bash
# 使用scp上传(从本地到新服务器)
scp -P 新服务器SSH端口 database_backup.sql root@新服务器IP:/tmp/

# 或使用rsync(支持断点续传,大文件推荐)
rsync -avz -e "ssh -p 新服务器SSH端口" database_backup.sql root@新服务器IP:/tmp/

步骤三:在新服务器上导入数据库

 
 
bash
# 登录新服务器
ssh -p 端口 root@新服务器IP

# 创建新数据库和用户
mysql -u root -p << 'EOF'
CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '数据库用户名'@'localhost' IDENTIFIED BY '数据库密码';
GRANT ALL PRIVILEGES ON 数据库名.* TO '数据库用户名'@'localhost';
FLUSH PRIVILEGES;
EOF

# 导入数据库
mysql -u root -p 数据库名 < /tmp/database_backup.sql

# 验证导入是否成功
mysql -u root -p -e "USE 数据库名; SHOW TABLES;" | wc -l

导入后表的数量应与原服务器一致。


三、网站文件迁移

方法一:直接服务器间传输(推荐)

如果新旧服务器可以互相SSH连接,最高效的方式是直接服务器间传输:

 
 
bash
# 在新服务器上执行,从原服务器拉取文件
rsync -avz --progress \
    -e "ssh -p 原服务器SSH端口" \
    root@原服务器IP:/www/wwwroot/你的域名/ \
    /www/wwwroot/你的域名/

rsync的优势:

  • 支持增量同步(只传输变化的文件)
  • 支持断点续传(网络中断后继续)
  • 保留文件权限和时间戳
  • 显示传输进度

方法二:打包后传输

如果文件量大,先打包再传输效率更高:

 
 
bash
# 在原服务器上打包网站文件
cd /www/wwwroot/
tar -czf /tmp/website_backup.tar.gz 你的域名/

# 下载到本地,再上传到新服务器
# 或直接从原服务器传到新服务器
scp -P 新服务器端口 /tmp/website_backup.tar.gz root@新服务器IP:/tmp/

# 在新服务器上解压
cd /www/wwwroot/
tar -xzf /tmp/website_backup.tar.gz

迁移后设置正确的文件权限

 
 
bash
# 设置网站文件的所有者为Web进程用户
chown -R www:www /www/wwwroot/你的域名/

# 设置目录权限为755
find /www/wwwroot/你的域名/ -type d -exec chmod 755 {} \;

# 设置文件权限为644
find /www/wwwroot/你的域名/ -type f -exec chmod 644 {} \;

# WordPress wp-content目录需要写权限
chmod -R 755 /www/wwwroot/你的域名/wp-content/

四、配置文件更新

迁移完成后,需要更新配置文件中指向原服务器的数据库连接信息。

WordPress站点

编辑 wp-config.php

 
 
php
// 更新为新服务器的数据库信息
define('DB_NAME', '新数据库名');
define('DB_USER', '新数据库用户名');
define('DB_PASSWORD', '新数据库密码');
define('DB_HOST', 'localhost');

如果网站域名不变,wp-config.php中的其他配置通常无需修改。

其他程序(Laravel、CodeIgniter等)

更新 .env 文件中的数据库连接配置:

 
 
bash
DB_HOST=localhost
DB_DATABASE=新数据库名
DB_USERNAME=新数据库用户名
DB_PASSWORD=新数据库密码

五、新服务器本地测试(DNS切换前)

在正式切换DNS之前,必须在不影响线上服务的前提下测试新服务器是否正常。

修改本地hosts文件(仅本机生效)

Mac/Linux:

 
 
bash
sudo vi /etc/hosts

Windows: 编辑 C:\Windows\System32\drivers\etc\hosts

添加:

 
 
新服务器IP    你的域名.com
新服务器IP    www.你的域名.com

保存后,在本机浏览器访问你的域名,实际访问的是新服务器,线上用户仍访问原服务器。

测试清单

  • 网站首页正常加载
  • 所有主要页面可以访问
  • 用户登录/注册功能正常
  • 购物车和下单流程完整测试
  • 图片和文件正常显示
  • 网站速度正常(使用GTmetrix检测)
  • SSL证书已申请,HTTPS访问正常
  • 管理后台可以正常登录和操作
  • 数据库查询正常(检查商品数量、用户数量是否与原服务器一致)

所有测试通过后,才进行DNS切换。


六、DNS切换:最关键的10分钟

切换步骤

第一步:记录当前DNS解析记录

在进行任何修改前,截图保存原来的DNS配置,以便出现问题时快速回滚。

第二步:修改A记录指向新服务器

在域名注册商(Cloudflare/Namecheap/GoDaddy)控制台:

  • @(根域名)的A记录改为新服务器IP
  • www 的A记录改为新服务器IP

第三步:等待DNS生效

如果前面已将TTL改为60秒,5分钟内全球大多数地区的解析会更新。

使用以下工具监控DNS生效情况:

  • dnschecker.org:从全球多个节点检查DNS是否已更新
  • nslookup 你的域名:在本地验证解析结果

第四步:监控新服务器状态

DNS切换后,立即观察新服务器的访问日志和资源使用情况:

 
 
bash
# 实时查看访问日志
tail -f /www/wwwlogs/你的域名.log

# 监控服务器资源
htop

确认流量已切换到新服务器,且服务器运行正常。


七、迁移后处理

保留原服务器一段时间

DNS切换后,不要立即关闭原服务器。建议保留至少48小时:

&a
QQ客服 提交工单