如何遷移 Linux 伺服器的完整流程 文章首圖

如何遷移 Linux 伺服器的完整流程

如何遷移 Linux 伺服器的完整流程

在雲端運算與容器化技術普及的今天,伺服器遷移已不再是大型企業的專利。無論是為了降低主機成本、提升效能,還是單純為了架構優化,將資料與服務從舊伺服器搬遷至新環境,是每位系統管理員(SysAdmin)或進階使用者都必須掌握的關鍵技能。

許多初學者常誤以為遷移只是複製檔案,但實際上,一個完整的遷移流程涵蓋了環境預檢、服務停機、資料同步、配置還原以及最終的驗證測試。本文將以 Ubuntu 22.04Debian 12 為基礎,為您拆解一套安全且高效的遷移策略。

階段一:遷移前的準備工作

在動手執行任何指令之前,充分的準備能避免 80% 的突發狀況。

  1. 環境一致性檢查:確保新舊伺服器的作業系統版本、核心版本(Kernel)以及主要套件管理器(apt)相容。若舊伺服器使用 CentOS,建議在新伺服器上安裝對應的兼容層或重新部署應用,因為 RPM 與 DEB 套件系統不相容。
  2. 建立完整備份:這是遷移的保險繩。請務必對資料庫、使用者資料及系統設定進行備份。
    # 備份整個 /etc 目錄與使用者 home 資料
    tar -czvf /tmp/server_backup_$(date +%F).tar.gz /etc /home
  3. 新伺服器初始化:在新伺服器上建立相同的使用者帳號,並設定 SSH 金鑰認證,確保遷移過程中擁有完整的 root 權限。

階段二:資料與服務的遷移

對於中階使用者,我們推薦使用 rsync 進行檔案系統的增量同步,它不僅速度快,還能保留檔案屬性(如權限、時間戳記)。

1. 同步檔案系統

建議採用「預同步」與「最終同步」兩次策略。第一次同步大量資料,待服務停機後,再進行最後一次快速同步,以確保資料一致性。

# 第一次全量同步(建議在業務低峰期執行)
rsync -avz --delete /source/directory/ user@new_server_ip:/destination/directory/

# 參數說明:
# -a: 保留權限、時間、符號連結等屬性
# -v: 顯示詳細輸出
# -z: 傳輸時壓縮
# --delete: 刪除新伺服器上多餘的檔案,確保兩邊一致

2. 資料庫遷移

資料庫是遷移中最脆弱環節。請避免直接複製資料庫資料夾(如 /var/lib/mysql),這極易導致資料損毀。正確做法是使用 dumps。

# 在舊伺服器上匯出資料庫
mysqldump -u root -p --all-databases > full_backup.sql

# 將 dump 檔傳輸至新伺服器
scp full_backup.sql user@new_server_ip:/tmp/

# 在新伺服器上匯入
mysql -u root -p < /tmp/full_backup.sql

3. 服務配置還原

除了資料,Web 伺服器(Nginx/Apache)、PHP 或 Python 環境的配置也需同步。若使用 rsync 同步了 /etc/nginx 等目錄,請確保新伺服器已安裝對應的服務套件。

# 在新伺服器上安裝必要服務
apt update
apt install nginx php-fpm php-mysql -y

階段三:切換與驗證

當新伺服器準備就緒,且資料已同步完成,即可進入切換階段。

  1. DNS 切換:將域名的 A 記錄指向新伺服器的 IP 位址。建議提前降低 TTL(Time To Live)值,以縮短全球 DNS 緩存更新時間。
  2. 防火牆與安全組:確認新伺服器的 ufw 或雲端防火牆規則已開放必要端口(如 80, 443, 22)。
  3. 服務啟動與監控
    systemctl restart nginx
    systemctl status nginx

    密切監控錯誤日誌 /var/log/nginx/error.log,確保沒有因路徑或權限問題導致服務異常。

常見問題與解決方案

Q1: 遷移後網站圖片或附件無法顯示? 這通常是因為檔案權限(Permissions)或 SELinux/AppArmor 策略未正確設定。請檢查 Web 伺服器使用者(如 www-data)是否擁有資料夾的讀寫權限:

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

Q2: 資料庫連線失敗,但密碼正確? 新伺服器可能預設使用 auth_socket 插件而非密碼驗證,或 MySQL 監聽位址僅限 localhost。請檢查 /etc/mysql/mysql.conf.d/mysqld.cnf 中的 bind-address 是否設為 0.0.0.0 或新伺服器的 IP,並確認使用者權限:

ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

小結

伺服器遷移是一項需要耐心與細心的工程。透過 rsync 處理檔案、mysqldump 處理資料,並嚴格執行備份與驗證步驟,即使是中階使用者也能順利完成遷移。記住,「測試環境先行」「可逆操作」 是確保業務連續性的兩大黃金法則。祝您遷移順利!