本篇是將 WordPress 網站從舊的共享主機轉移至 Linode VPS LEMP 伺服器的過程紀錄。

前陣子因為舊網站空間的 MySQL 資料庫出問題,所以從 Linode 買了一個新的 VPS 主機空間,安裝並設定好 Ubuntu Linux 系統之後,架設了一個 LEMP 伺服器,接下來就是要將既有的 WordPress 網站搬到新的 VPS 主機空間了。


在更換主機空間的過程中,從一開始的 Linux 系統安裝到 LEMP 伺服器的各種設定等過程,都可以很輕鬆的來處理,這中間如果不小心出差錯,頂多只是把搞砸的虛擬主機刪掉,重新再裝一次就好了,不會影響到現行網站的運作,但在 LEMP 伺服器安裝好之後,開始轉移 WordPress 網站時,就要十分注意,這個部份如果一不小心沒處理好,就可能會讓網站斷線,直接影響網站的營運!

以下是 WordPress 網站遷移的步驟。

Step 1
首先確定 WordPress 的使用者都已經登出了,不會有人在網站遷移時還在線上編輯文章,或是做任何會更動網站內容的動作。

Step 2
將 WordPress 網站從舊的網頁空間中備份出來,因為只是更換網頁空間,網址並沒有更動,這種搬移方式非常單純,只要備份下列兩個部分:

  1. 所有 WordPress 的檔案。
  2. WordPress 所使用的 MySQL 資料庫。

MySQL 資料庫的備份可以使用主機商提供的 phpMyAdmin,或是使用 mysqldump,例如:

mysqldump --host localhost --opt --user=USERNAME --password='MYSQL_PASSWORD' DB_NAME | gzip > mysql_backup.sql.gz

而 WordPress 的檔案可以直接使用 FTP 抓取,或是使用 rsync 備份:

rsync -avz username@old.webhost.com:/path/to/www .

如果新舊主機都可以使用 SSH 登入的話,其實可以直接在新主機上使用 rsync,直接把檔案搬到新主機上,這樣子是最快的。

Step 3
設定新主機的 MySQL 資料庫與帳號,我們需要在新的 MySQL 伺服器上新增一個 WordPress 網站專用的 MySQL 資料庫與一個帳號,資料庫與帳號的名稱可以自己任意取,假設要新增一個 blogdb 資料庫與一個本機的 dbuser 使用者,首先用 MySQL 管理者的權限進入資料庫:

mysql -h localhost -u root -p

接著新增 blogdb 資料庫:

CREATE DATABASE blogdb;

新增本機的 dbuser 使用者,並且開啟其使用 blogdb 資料庫的權限:

CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON blogdb.* TO 'dbuser'@'localhost';

由於這裡新增的 dbuser 使用者是專門給 WordPress 用的,平常我們不會用這個帳號登入,所以建議可以使用亂數的方式產生比較複雜的密碼,這樣安全性比較高。

Step 4
建立好 WordPress 用的 MySQL 資料庫與使用者之後,就可以將剛剛備份的 WordPress 資料庫倒進去了,我們可以使用 phpMyAdmin 將資料匯入剛剛新建的 blogdb 資料庫,或是使用 mysql 指令匯入:

zcat mysql_backup.sql.gz | mysql -h localhost -u dbuser -p blogdb

這樣資料庫的部分就完成了。

Step 5
將 WordPress 的檔案放置到適當的位置,在 Ubuntu Linux 中大家通常習慣會把網頁資料放在 /var/www 之下,所以我也就直接把 WordPress 的網頁檔案放在這裡,依照網站建立目錄:

sudo mkdir -p /var/www/blog.gtwang.org

接著就將剛剛從舊空間備份出來 WordPress 檔案放進來這個目錄,或是直接在這裡使用 rsync 將檔案搬過來。搬過來之後,先編輯 wp-config.php 這個設定檔,更新一下資料庫的設定:

define('DB_NAME', 'blogdb');
define('DB_USER', 'dbuser');
define('DB_PASSWORD', 'PASSWORD');
define('DB_HOST', 'localhost');

最後還要變更一下檔案的擁有者:

sudo chown -R www-data:www-data /var/www/blog.gtwang.org