Ricky 叩叮俱樂部

在開始之前,先來杯長島冰茶吧~

0%

Ubuntu 18.04 LTS+Wordpress Backup/Restore

前言

說到WordPress,備份也是一件討人厭的事情
但比起備份,還原至另一台Server更是令人困擾
在工作時原本以為順利把WordPress部署至測試機後
續後處理起來會輕鬆很多,結果還是吃了不少悶虧
趁下班之餘趕緊趁忘記之前好好記起來!

Ubuntu

這邊使用的是GCP平台,因此在建立Ubuntu時可先賦予root密碼

1
$ sudo passwd root

可切換至root帳號

1
$ su -

這樣在操作下列步驟時,執行指令前就不用另外加sudo

Backup

MySQL

首先先從資料庫把資料備份出來

1
$ mysqldump -u <USER> -p <DATABASE> > <BACK_SQL>.sql

u: user / p: password

WordPress

這裡我們先以最簡單暴力的做法來呈現,也就是手動將整個WordPress備份下來

先切換至存放WordPess的目錄

1
$ cd /var/www/html

壓縮WordPress

1
$ tar -zcvf wordpress_backup.tar.gz <WORDPRESS>

c: 壓縮 / z: gzip格式 / v: 顯示過程 / f: 指定檔案(後面一定要接檔名)

其實到這邊備份的部分就完成了,是不是超級簡單
這就是最笨但也是最快速的方式

Apache

其實Apache要備份只有/etc/apache2/sites-available/<WORDPRESS>.conf這個設定檔而已
因此你可以把它直接下載下來即可

Dowload

而關於下載的部分,這邊也教一個GCP提供的功能
如果你是以SSL用瀏覽器打開的話,在畫面右上角會有一個工具欄
gcp_download_01.png

點選下載檔案
gcp_download_02.png

接著會出現視窗讓你輸入路徑
gcp_download_03.png

用這樣的方式就可以很簡單的把備份檔下載下來了
同理上傳檔案也是如此,上傳後檔案會放至在/home/<GCP_ACCOUNT>
接著就可以開始著手處理還原的部分囉~

Restore

還原就有很多小細節要注意了,如果沒有處理好,不僅是WordPress打開來畫面跟原先的不一樣
甚至有可能會出現連網頁都開不了的窘境,因此這裡會一步一步教大家如何操作

Before

我們先假設你已經將備份檔及Apache設定檔上傳至新的Server
這邊是透過GCP上傳,因此檔案會位於我GCP帳號的家目錄底下

1
$ cd /home/<GCP_ACCOUNT>

如果是需要透過FTP的話,也可以參考這一篇安裝

也已經安裝好PHP, MySQL, Apache, phpMyAdmin等工具
如果對這方面不熟悉的人可以回去參考這一篇來複習,裡頭所提及的流程這邊就暫且不多做敘述

一樣可以使用su -切換root帳號以便後續操作

MySQL

在已建立好資料庫的情況下,這邊要做的事情就是先還原

1
$ mysql -u <USER> -p <DATABASE> < <BACK_SQL>.sql

u: user / p: password

網址更換

WordPress很多資料裡頭url都是寫死的,例如超連結或是圖片檔
因此如果不論你有沒有移機,只要有更換網址的需求都要更新MySQL裡頭的資料

進入MySQL並操作WordPress資料庫

1
$ mysql -u <USER> -p <DATABASE>

以取代方式更換網址

1
2
3
4
5
6
7
UPDATE wp_options SET option_value = replace(option_value, '<OLD_URL>', '<NEW_URL>') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, '<OLD_URL>','<NEW_URL>');
UPDATE wp_posts SET post_content = replace(post_content, '<OLD_URL>', '<NEW_URL>');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'<OLD_URL>','<NEW_URL>');

# Query OK, X rows affected (0.00 sec)
# Rows matched: X Changed: X Warnings: X

可先用編輯器取代完字串後再貼進MySQL-CLI裡

退出MySQL

1
2
$ exit
# Bye

但這裡還是要留意,如果有套用主題可能會有例外
因此還是要以實際的狀況為主,這一步可以符合大部分的需求

WordPress

將備份檔移至WordPress目錄並切換過去

1
2
$ mv <WORDPRESS>.tar.gz /var/www/html
$ cd /var/www/html

解壓縮備份檔

1
$ tar zxvf wordpress-5.2.4-zh_TW.tar.gz

x: 解壓縮 / z: gzip格式 / v: 顯示過程 / f: 指定檔案(後面一定要接檔名)

可自己選擇要不要刪除壓縮檔

1
$ rm <WORDPRESS>.tar.gz

根據專案選擇要不要修改wordpres/wp-config.phpDB_NAME DB_USER DB_PASSWORD

1
2
3
4
5
6
7
8
9
10
11
...

define('DB_NAME', '<DB_NAME>');

define('DB_USER', '<DB_USER>');

define('DB_PASSWORD', '<DB_PASSWORD>');

define('DB_HOST', 'localhost');

...

Apache

將設定檔移至Apache目錄並切換過去

1
2
$ mv /home/<GCP_ACCOUNT>/<WORDPRESS>.conf /etc/apache2/sites-available
$ cd /etc/apache2/sites-available

停用預設設定檔

1
$ a2dissite 000-default.conf

啟用WordPress設定檔

1
$ a2ensite <WORDPRESS>.conf

重新啟動Apache

1
$ sudo service apache2 reload

這裡要注意的是,如果你原本的Apache有使用WordPress裡.htaccess的設定
而在Apache的.conf檔裡也有添加這幾行

1
2
3
<Directory "/var/www/html/wordpress/">
AllowOverride All
</Directory>

那你一定要記得啟動Apache mod_rewrite
要不然網頁打開來會是掛掉的情況

1
2
$ sudo a2enmod rewrite
$ sudo service apache2 reload

小小抱怨一下,我之前因為忘記做這件事,害得我花了將近一天的時間在DeBug,網頁開起來直接掛掉的當下讓我很緊張,還重舊Server上備份了好幾次,搞了老半天才意識到我沒有把mod_rewrite啟動,當下真的是想把自己給掐死,也因為這樣才衍生出了寫這篇文章的衝動。

接著你就可以在新的Server上開啟WordPress囉~

http://localhost:80/