開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
更換機房、升級配置或從其他服務商搬家時,最擔心的就是資料丟失和長時間停機。本文介紹一套經過大量實踐驗證的遷移流程:用 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 小時工單獲得支援。