开始输入,可搜索发票、服务、域名、工单,以及 更多...
更换机房、升级配置或从其他服务商搬家时,最担心的就是数据丢失和长时间停机。本文介绍一套经过大量实践验证的迁移流程:用 rsync 增量同步文件、用 mysqldump 迁移数据库、提前降低 DNS TTL 平滑切换,大部分网站可以把停机时间控制在几分钟以内。
--single-transaction 参数可以在不锁表的情况下导出一致性快照。rsync安装 rsync:
# Debian / Ubuntu
apt install -y rsync
# RHEL / Rocky / AlmaLinux
dnf install -y rsync
| 检查项 | 说明 |
|---|---|
| 完整备份 | 迁移前对源服务器做一次完整备份或快照 |
| 磁盘空间 | 用 df -h 和 du -sh 确认目标盘空间充足 |
| 软件版本 | 对比 PHP、MySQL、Nginx 版本,避免高版本不兼容 |
| 配置文件 | 记录虚拟主机配置、计划任务(crontab -l)、SSL 证书位置 |
| 硬编码 IP | 检查程序或配置中是否写死了旧服务器 IP |
| 邮件与第三方 | 确认 MX 记录、API 白名单、支付回调地址等是否依赖旧 IP |
| DNS TTL | 至少提前 24 小时降低 TTL |
登录域名 DNS 管理后台,将网站相关 A 记录的 TTL 从默认值(常见为 3600 秒或更长)改为 300 秒甚至 60 秒。这一步要在正式切换前至少等待一个原 TTL 周期,各地递归 DNS 缓存才会过期。可以用下面的命令查看当前 TTL:
dig example.com A +noall +answer
输出中域名后的数字即剩余 TTL 秒数。
在目标服务器上生成密钥并推送到源服务器(采用"拉取"方式,便于在新机器上操作):
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -p 22 root@源服务器IP
在目标服务器上执行(示例同步网站目录):
rsync -avzP -e "ssh -p 22" root@源服务器IP:/var/www/ /var/www/
参数说明:-a 归档模式,保留权限、属主和时间戳;-v 显示详情;-z 传输压缩;-P 显示进度并支持断点续传。注意源路径末尾的 / 表示同步目录内容,漏写会多嵌套一层目录。
正式执行前,可以加 -n(--dry-run)预览将要传输的文件;需要排除缓存或日志目录时使用 --exclude:
rsync -avzPn --exclude 'cache/' --exclude '*.log' -e "ssh -p 22" root@源服务器IP:/var/www/ /var/www/
首次全量同步可以在网站正常运行时进行,不影响业务。
在源服务器导出数据库。对于 InnoDB 表,--single-transaction 可以在不锁表的情况下得到一致性快照:
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=utf8mb4 dbname | gzip > /root/dbname.sql.gz
传输到目标服务器:
rsync -avP -e "ssh -p 22" root@源服务器IP:/root/dbname.sql.gz /root/
在目标服务器上创建数据库与用户并导入:
mysql -u root -p -e "CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES;"
gunzip < /root/dbname.sql.gz | mysql -u root -p dbname
导入后可以抽查表数量是否一致:
mysql -u root -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='dbname';"
不修改 DNS,而是在本地电脑的 hosts 文件中把域名临时指向新 IP(Windows 位于 C:\Windows\System32\drivers\etc\hosts,macOS/Linux 为 /etc/hosts):
203.0.113.20 example.com www.example.com
逐一检查首页、登录、上传、支付回调等关键功能,确认无误后删除这条 hosts 记录。
--delete(会删除目标端多余文件,请谨慎使用)。建议源服务器保留至少 3–7 天再释放,以便需要时回滚。
直接重新执行同一条命令即可,rsync 会跳过已传完的文件,-P 参数还支持大文件断点续传。
可以加 --quick 减少内存占用,并通过管道压缩边导出边传输;数十 GB 以上的数据库可以考虑物理备份工具(如 Percona XtraBackup 或 mariabackup)或主从复制方式迁移。
一般是导出与导入时字符集不一致。请确保导出时指定 --default-character-set=utf8mb4,目标数据库同样使用 utf8mb4。
这是部分运营商 DNS 缓存未过期所致,通常在原 TTL 时间内自然消失。这也是旧服务器需要保留几天的原因。
一次平滑的迁移,关键在于"提前降 TTL、先全量后增量、测试后再切换"。如果你计划把网站或业务搬到 IMIDC,我们提供免费迁移协助服务:在香港、日本、新加坡、美国等地开通云服务器或独立服务器后,提交工单说明源环境与迁移需求,技术人员会与你沟通具体方案和时间窗口;迁移过程中有任何疑问,也可以随时通过 7x24 小时工单获得支持。