網站搬家最怕的不是步驟多,而是你把順序做錯,結果網站中斷、資料沒同步、DNS 提前切走。這篇會用比較實務的角度,帶你把搬家這件事按順序排好,包含 DNS 切換策略和回滾計畫。
你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。
你會學到什麼
- 知道網站搬家不是只有把檔案複製過去。
- 理解資料庫、設定檔與 DNS 切換應該怎麼配合。
- 學會 DNS TTL 降低策略,把切換風險降到最低。
- 搬家前後知道怎麼測試與保留回頭空間。
- 準備好回滾計畫,萬一出事能快速回退。
什麼情況最適合先看這篇
- 第一次自己管理 Linux 主機,想把操作做穩而不是只會貼指令的人
- 你現在正要處理「網站搬家」這類操作
- 你希望做完之後不只功能能用,連驗證與排錯也有概念
開始前先確認
- 先做舊站完整備份(檔案 + 資料庫 + 設定檔)。
- 新 VPS 先把環境建好(Web Server、PHP、資料庫)。
- 安排低流量時段進行切換。
- 記錄目前 DNS 設定,截圖備查。
先提醒你一件事
VPS 最怕的不是不會下指令,而是你不知道指令會影響到哪個服務、哪個設定檔、哪個對外連線。
詳細教學與操作步驟
本文將引導你完成網站搬家的完整流程,教你如何安全地將網站檔案與資料庫從舊主機遷移到侃瑞科技的新 VPS 伺服器。
為什麼選擇搬家到 VPS?
當你的網站流量成長,或者需要更靈活的伺服器配置時,從共享主機搬家到 VPS 是一個明智的決定。VPS 能提供專屬資源,讓你的網頁加載速度更快。如果你不想自己處理搬家流程,我們提供 全代管 VPS 服務,讓專家為你省下煩惱。
步驟一:搬家前 48 小時 -- 降低 DNS TTL
這一步很多人會忽略,但它決定了你的 DNS 切換能多快生效。
TTL(Time To Live)是 DNS 記錄的快取時間。如果你的 TTL 設為 86400(24 小時),代表 DNS 切換後最長要等 24 小時,全球所有使用者才會連到新伺服器。
操作方式:
- 登入你的 DNS 管理後台(CloudFlare、GoDaddy、Gandi 等)。
- 找到你的 A 記錄。
- 把 TTL 從原本的值(通常是 3600 或 86400)改成 300 秒(5 分鐘)。
- 等待原本 TTL 時間過去,讓舊的快取全部失效。
# 用 dig 檢查目前 TTL 值
dig example.com +short
dig example.com | grep -i ttl
# 如果你看到 TTL 還是很大的數字,代表舊快取還沒過期
# 需要繼續等待
為什麼要提前 48 小時? 如果原本 TTL 是 86400 秒(24 小時),你需要至少等 24 小時讓全球快取失效。提前 48 小時是為了保留緩衝。
步驟二:完整備份舊主機
在開始搬家前,請確保你有一個完整的備份。備份不是只有一種方法,視你的舊主機類型而定:
cPanel 主機:
- 登入 cPanel,找到「備份」或「JetBackup」。
- 下載完整帳號備份(包含檔案 + 資料庫 + 信箱)。
- 或手動透過 SFTP 下載
public_html下的所有檔案。
VPS / 純 SSH 環境:
# 壓縮整個網站目錄
tar -czf /tmp/website-backup.tar.gz /var/www/
# 備份 Nginx 或 Apache 設定
tar -czf /tmp/webserver-config.tar.gz /etc/nginx/ /etc/apache2/
# 列出所有 cron job
crontab -l > /tmp/crontab-backup.txt
步驟三:匯出資料庫
對於大多數動態網站(如 WordPress),你需要備份資料庫:
方法一:用 mysqldump(推薦)
# 匯出單一資料庫
mysqldump -u root -p your_database > /tmp/db-backup.sql
# 匯出時加上觸發器和預存程序
mysqldump -u root -p --routines --triggers your_database > /tmp/db-backup.sql
# 大型資料庫加上壓縮
mysqldump -u root -p your_database | gzip > /tmp/db-backup.sql.gz
方法二:用 phpMyAdmin
- 在舊主機進入 phpMyAdmin。
- 點選你的網站資料庫。
- 選擇「匯出」,使用預設的 SQL 格式下載到電腦。
資料庫大小超過 100MB? 用 mysqldump 命令列會比 phpMyAdmin 穩定得多。phpMyAdmin 容易在大資料量時逾時。
步驟四:在新 VPS 上建立環境
在新伺服器上,你需要建立網站空間。如果你是自行管理 VPS,可以參考我們的 Nginx 與 PHP 環境安裝教學。如果是使用控制面板(如 cPanel 或 CyberPanel),請先建立對應的網域空間。
新 VPS 環境檢查清單:
- Web Server 已安裝並運行(Nginx 或 Apache)
- PHP 版本與舊站一致(用
php -v確認) - PHP 擴充模組齊全(用
php -m對照舊站的phpinfo()頁面) - MySQL / MariaDB 已安裝
- SSL 憑證已準備好(Let's Encrypt 或商業憑證)
- 防火牆已開放 80 和 443 port
- 資料庫字元集設為
utf8mb4(與舊站一致)
步驟五:上傳檔案並匯入資料庫
上傳網站檔案:
# 方法一:用 SCP 從本機上傳到新 VPS
scp website-backup.tar.gz root@新VPS_IP:/var/www/
# 方法二:從舊主機直接傳到新主機(更快)
# 在舊主機上執行
rsync -avz --progress /var/www/html/ root@新VPS_IP:/var/www/html/
# 方法三:如果檔案很大,用 rsync 的壓縮傳輸
rsync -avz --compress --progress /var/www/ root@新VPS_IP:/var/www/
匯入資料庫:
# 在新 VPS 上建立資料庫
mysql -u root -p -e "CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 建立資料庫使用者
mysql -u root -p -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'strong_password';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON your_database.* TO 'dbuser'@'localhost';"
mysql -u root -p -e "FLUSH PRIVILEGES;"
# 匯入備份
mysql -u root -p your_database < /tmp/db-backup.sql
# 如果是壓縮檔
gunzip < /tmp/db-backup.sql.gz | mysql -u root -p your_database
修改設定檔:
WordPress 的 wp-config.php:
define('DB_NAME', 'your_database');
define('DB_USER', 'dbuser');
define('DB_PASSWORD', 'strong_password');
define('DB_HOST', 'localhost');
設定檔案權限:
# 設定正確的擁有者
chown -R www-data:www-data /var/www/html/
# 設定目錄權限
find /var/www/html/ -type d -exec chmod 755 {} \;
# 設定檔案權限
find /var/www/html/ -type f -exec chmod 644 {} \;
步驟六:本機測試(hosts 檔案法)
在正式切換 DNS 前,你可以修改電腦的 hosts 檔案,讓你的瀏覽器直接連到新伺服器測試。
macOS / Linux:
sudo nano /etc/hosts
# 加入以下行
新VPS的IP example.com www.example.com
Windows:
用系統管理員身份編輯 C:\Windows\System32\drivers\etc\hosts,加入同樣的內容。
測試清單:
- 首頁是否正常載入(含圖片、CSS、JS)
- 後台管理介面是否能正常登入
- 表單提交是否正常運作
- 購物車 / 結帳流程是否完整
- 聯絡表單 / 信件發送是否正常
- 網站內部連結是否正確
- SSL 憑證是否有效
- 上傳檔案功能是否正常
- 排程任務(cron)是否設定完成
- 重導向規則(.htaccess 或 Nginx rewrite)是否生效
測試完記得把 hosts 改回來!
步驟七:DNS 切換(零停機策略)
確認新站測試一切正常後,開始正式切換。
切換流程:
- 在舊站做最終一次資料庫匯出(抓取切換前最新的資料)。
- 將最終備份匯入新站資料庫。
- 到 DNS 管理後台,把 A 記錄的 IP 改成新 VPS 的 IP。
- 如果有 AAAA(IPv6)記錄也要一起改。
- MX 記錄如果信箱沒搬,不要動。
# 確認 DNS 切換是否已經傳播
dig example.com +short
# 應該顯示新 VPS 的 IP
# 從多個位置檢查 DNS 傳播狀態
# 可以使用 https://www.whatsmydns.net/ 線上工具
零停機的關鍵: 因為你已經提前降低了 TTL 到 300 秒,DNS 切換後最多 5 分鐘內全球就會開始指向新伺服器。在這 5 分鐘的過渡期內,部分使用者會連到舊站、部分會連到新站,但兩邊都有完整的網站內容,所以使用者不會感到中斷。
特別注意 -- 如果使用 CloudFlare:
CloudFlare 的 proxy 模式(橘色雲朵)會自動處理切換,TTL 由 CloudFlare 控制。你只需要在 CloudFlare 後台把 A 記錄指向新 IP 即可,通常幾分鐘內就生效。
步驟八:切換後監控與驗證
DNS 切換後的 48 小時是關鍵觀察期:
# 檢查新 VPS 的 access log 是否開始有流量
tail -f /var/log/nginx/access.log
# 檢查錯誤日誌
tail -f /var/log/nginx/error.log
# 確認 PHP 沒有報錯
tail -f /var/log/php8.3-fpm.log
# 檢查 SSL 憑證
curl -vI https://example.com 2>&1 | grep "SSL certificate"
回滾計畫
萬一新站出了問題,你需要能快速切回舊站。這就是為什麼我們要求舊站至少保留 48 小時。
回滾步驟:
- 到 DNS 管理後台,把 A 記錄改回舊 VPS 的 IP。
- 因為 TTL 還是 300 秒,5 分鐘內就會切回舊站。
- 找出問題原因,修復後再重新切換。
回滾前先確認:
- 舊站在切換期間是否有新訂單或新資料?
- 如果有,需要先把這些資料匯出,之後合併到新站。
- 這就是為什麼動態網站搬家建議在凌晨低流量時進行。
搬家後 48 小時確認穩定,再做以下收尾:
- 把 DNS TTL 改回原本的值(例如 3600 或 86400)。
- 舊站的 Web Server 設定 301 重導向到新站(保險措施)。
- 確認自動備份已在新站設定完成。
- 關閉舊站服務。
常見問題
Q:搬家過程中網站會中斷嗎? 如果按照上面的 TTL 降低策略操作,你可以實現近乎零停機的轉移。在 DNS 生效前,部分訪客會看到舊網站,部分會看到新網站,但對訪客而言服務是不會中斷的。
Q:搬家後網站出現 500 Error 怎麼辦?
這通常是權限設定或 PHP 版本不相容造成的。請檢查檔案目錄的權限是否為 755,檔案是否為 644,並確認新伺服器的 PHP 模組是否完整安裝。查看錯誤日誌會給你最明確的方向:tail -50 /var/log/nginx/error.log。
Q:WordPress 搬家後後台打不開?
常見原因是 wp-config.php 裡的資料庫連線資訊沒改對,或是 wp_options 表格裡的 siteurl 和 home 還是舊網址。修正方式:
# 進入 MySQL
mysql -u root -p your_database
# 更新網址(如果你換了網域的話)
UPDATE wp_options SET option_value = 'https://newdomain.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://newdomain.com' WHERE option_name = 'home';
Q:搬家後信件收不到了? DNS 切換時如果不小心動到 MX 記錄,信箱會受影響。搬家前先確認 MX 記錄指向正確的郵件伺服器。如果信箱不搬家,DNS 切換時千萬不要動 MX 記錄。
Q:大型網站(幾十 GB)怎麼搬比較有效率? 用 rsync 分次同步,先做第一次完整同步(可以在白天跑),切換前再做增量同步只傳新改的檔案:
# 第一次完整同步(耗時但不影響舊站)
rsync -avz /var/www/html/ root@新IP:/var/www/html/
# 切換前做增量同步(只傳有變動的檔案,很快)
rsync -avz --delete /var/www/html/ root@新IP:/var/www/html/
做完後怎麼確認自己真的有設對
- 從不同網路環境(手機 4G、家裡 Wi-Fi)開啟網站,確認都能正常顯示。
- 用 DNS 傳播檢查工具 確認全球各地都已指向新 IP。
- 確認 SSL 憑證正常,網址列有鎖頭。
- 後台功能逐一測試:登入、發文、上傳圖片、表單、金流。
- 檢查 Google Search Console 是否有新的爬蟲錯誤。
- 確認自動備份在新站有正常運作。
這一題最常踩的坑
- DNS 先切,網站資料卻還沒同步完成。
- 只測首頁,不測後台、表單或結帳流程。
- 搬家後忘了處理快取與網址設定。
- 沒有降低 TTL 就直接切 DNS,結果等了一整天。
- 舊站太早關掉,出問題沒辦法回滾。
- MX 記錄被誤改,導致信箱收不到信。
如果你要往下一步走
如果你還沒建好環境,先回頭看 Nginx 與 PHP 教學 或 VPS 快速入門教學。搬家完成後建議設定 自動備份 保護你的新環境。DNS 方面的深入設定可以參考 網域指向 VPS 主機教學。如果你準備開始自己架服務,可以直接對照侃瑞的 VPS 方案與價格 選環境。