月份: 2019 年 11 月

WordPress 的備份與還原

No Comments

使用 All-in-One WP Migration 外掛

說實在的, 此外掛就是一鍵搞定,還有什麼好談的。。。真的!現今在電腦上的各種生産力工具,都已經進步到了“生人易進”的境界了。相信只要有心摸索,肯花時間學習,何等的門外漢都可逐漸上手!

筆者的第一篇文章提到 All-in-One WP Migration 一鍵就將整個網站備份下來了,而須留意的就是它生成的檔案大小,其將會遭遇到當做網站還原而上傳時“既定的上傳檔案的size限制”。本文內容就是介紹如何來修改這樣的限制。之後的文章還會更詳細介紹到。

上傳檔案的size限制之修改

上傳檔案的大小,是由 PHP 所限制住,設定在 php.ini 內。相關的參數如下:

  • upload_max_filesize:預設值是 2MB
  • post_max_size:預設值是 8MB。作用於 HTTP request command 是 POST 時。
  • 實際的可上傳大小,由二者之最小值決定之
  • “php.ini” 的檔案路徑,可呼叫 “phpinfo();” 中的 “Loaded Configuration File” 欄位有記錄。

整個網站還原

為了測試 All-in-One WP Migration 免費版是否有限制了備份/還原的檔案大小的上限,一方面也是不要貿然就信了這個外掛,又若當前網站已相當複雜/裝了很多外掛,更須先行測試。故做了如下實驗:

  • 將前述的設定改為 512MB
  • 在 wordpress/wp-content 內,放入了400MB 左右的檔案
  • 備份,生成了近 500MB的備份檔
  • 還原:若將當前的 wordpress 網站全數刪除,卻無法還原或還原失敗,那可說會欲哭無淚。因此,在另一處重新安裝 wordpress,於該處做還原,才是最保險也最快速的方法。
  • 首先在 NO-IP 新註冊一個 hostname(使用了 Alias 別名),並在本地端新增一個 database,在另一路徑安裝一個新的 wordpress,在該處做還原。
  • 結果。。。成功!
  • 以上,後續文章都會再做詳細介紹。

此實驗的注意事項

  • 備份前,除了該存的草稿或該發佈的都完成後,務必先登出,再登入,才做備份。
  • Mysql 新增一個使用者,給新安裝的 wordpress 使用。即,解開 wordpress 至新路徑後,修改 wp-config.php,當中至少的三個欄位:新資料庫名,新使用者名及新密碼。
  • 使用新的 hostname 意謂者 web server 也要有對應的設定。
  • 網頁開啟 wordpress (從新的 hostname),是新的安裝程序,安裝完後,安裝外掛主角 wp migration。
  • 匯入成功後,重開網頁,以備份內之原使用者登入。
  • 最後確認:使用 Meld 比對二處的 wordpress。
  • 比對後其實可發現,整個網站,就是由 database 及 ./wp-content 所構成(即使用者增刪修的地方)。
  • All-in-One WP Migration (好的搬家外掛)就是幫您處理匯入新版的 wordpress 系統的相容性啣接,以及所有連結的對應的更新,乃或某些特定外掛的不相容問題的修正。
  • 非常重要:當還原時,它會在網頁內容中搜尋此網站的網址並取代成新網址。但我們有些是需要它更動,有些卻是不需要的。因此要規避這樣的誤處理,我們最好就是一遇到我們的網站網址,就用短代碼來代用。而哪些需要呢,目前筆者已知有兩種:您的廣域網址與 hostname,及 localhost。因為它們都可能做為存取網頁的 URL。

補充:使用 Insert PHP Code Snippet 外掛

承前述,aio-wp-migration 做回存時,會在文章頁面中搜尋舊的網址取代成新的網址(若我們在文章中有提到自己的網址的話。另外,“localhost”也是須注意且排除的),例如從 abc.com 搬家到 xyz.com,那麼 abc.com 將被取代成 xyz.com。此舉將造成有些是不需要被取代的卻也被置換了。例如,若圖片中有 abc.com,另有文字描述解說該圖片,那麼文字卻是 xyz.com 的話,便是出入的地方。因此一勞永逸的做法,就是把(在文章中所有有提及的)我們網站的網址以及 localhost 都用短代碼來表示。下面圖示是目前筆者使用到的短代碼,及對應的輸出結果。程式碼部份列於最後。相信不難理解來運用。

# wordpress "標示為程式碼" 區塊

# 這邊所列出的,恰是這個外掛無法轉換的(搞不好是刻意的),所以可看到原生的短代碼。若是無短代碼或許是此外掛修正了

#(輸出結果一開始確實沒轉換,但刷新後又轉換了,所以比較像是 bug。故我在關鍵字前多加了個逗號,就沒轉換了)

[,xyz-ips snippet="thelocalhost"]
[,xyz-ips snippet="the443scheme"]
[,xyz-ips snippet="the80scheme"]
[,xyz-ips snippet="myhostname"]
[,xyz-ips snippet="myhomeip"]
[,xyz-ips snippet="myhomename"]
# wordpress "未格式化文字" 區塊

# 這邊與上面有對應,應該要看到轉換後的結果

localhost
https://
http://
waterfalls.ddns.net
61.71.158.194
https://waterfalls.ddns.net
# thelocalhost
<?php
echo('localhost');
?>

# the443scheme
<?php
echo('https://');
?>

# the80scheme
<?php
echo('http://');
?>

# myhostname
<?php
echo($_SERVER['HTTP_HOST']);
?>

# myhomeip
<?php
$wp_url=get_site_url();
$host_name=parse_url($wp_url, PHP_URL_HOST);
echo(gethostbyname($host_name));
?>

# myhomename
<?php
echo(get_site_url());
?>
  • 參考資料
  • https://wordpress.org/support/article/moving-wordpress/
  • 2020/0223 更新:筆者已將設定中的大小限制改為 2048M 了,下載及上傳都是正常的。此外掛(若)會有所限制,筆者認為應是針對實體或虛擬主機以外的雲端空間吧,即購買空間及服務而非主機(作業系統要自己裝的稱為主機)。
  • 2020/0224 更新:請注意,”Insert PHP Code Snippet“這個外掛,將使用者的程式置於某函式內,即,所有您寫的程式的變數都是 local variable,及所有此前提下的限制。
  • 註:更改資料庫中的某一字串,例如網址,可如下操作,
    sudo mysqldump -u root -p [db-name] > mydat.sql
    sed -i ‘s/[old-string]/[new-string]/g’ mydat.sql(注意 ansi 字元 ‘)
    sudo mysql -u root -p [db-name] < mydat.sql
    sudo systemctl restart mysqld
  • 作還原後,原先的檔案並不會被刪除,不過既存在的檔案會被後來同樣的檔案給覆蓋。
  • 此外,尤其是使用備份還原要小心;能備份,能還原,那就放心了;而不能備份,也是可放心;但能備份不能還原,就 GG 了若原始網站網頁已捨棄。。。而這就真的發生了。
  • 解法就是使用第三方 fork 出來的 aio-wpm 外掛,如下連結或檔案。記得安裝前先把官方的停用。而當還原成功後,如其所提示者,到此連結點兩次儲存即成。
    不過此前提是,您已確認,caddy,apache,nginx,等 web servers,對於 php 能上傳的檔案大小已預期放寬,才進行此步驟(筆者原先有卡關才找來這份,但才確認是 web server settings 問題,雖此第三方外掛也試過可行,但最後並未用上它)。
    https://mysite/wp-admin/options-permalink.php#submit
  • https://github.com/d0n601/All-In-One-WP-Migration-With-Import
  • 20211002
    此外掛在操作備份後會留存一份完整的備份檔在它建立的 backup folder 內。因路徑是公開已知的,所以這些備份檔將有可能被下載。所以特別注意,自己備份收妥後,務必將該檔移除
    而截至目前為止,筆者能成功備份還原 1.7G 大小的備份檔,頻寬 4MB/s。沒有經過特殊的處理。故,雖相關的設定可能分散在不同文章中,但只要跟著本網站之各篇文章練功,也必不卡關的,筆者唯一的可用之處就是省下您寶貴的時間 ^^”
  • 20220105
    這支 AIO WP Migration 官方的免費版本,能免費無限制地使用匯出及匯入,而專項的備份功能是需付費的;前者後者功能上差異不大;故免費版就足夠我們使用備份還原,即匯出/入了。但實際確實無法盡如己意,筆者曾嘗試過匯入成功的案例,也發生過很多人都遇到的匯入時會停止在 100% 就不再有任何動作。因此解法就是用上本文前面提及的突破限制版(檔案大小可支援到 32G)。
    記得,做還原前,通常狀況是全新安裝的 wordpress,那麼其內的所有頁面(只留一個主頁),外掛,外觀(留一個使用中)等等全部清乾淨,才做還原;純粹強迫症;不清會怎樣?筆者未試過。
    其次,還原檔所使用的舊廣域網址/hostname 是什麼不重要,新的廣域網址是什麼,就一定要先確定好已上線已使用當中,即,反說,若新的先設定成 localhost,則還原後就是 localhost 了無法再更改成其他的 hostname 了。
    最後,還原後官方版和無限版會並存,保險起見,或許定期使用官方版與無限版分別備份,畢竟,官方版備份無限版還原有風險;無限版已停留在 6.77 版不曉得對最新版 WP 是否完全支援。
  • 20231231
    看來已經過四年了,不過 AIO WP Migration,仍是造成一些困擾;最近將此網站搬家用了它,再後來,才無意中發現仍有些 “http” 未轉換成 “https” 造成安全性上的警告。
    所以簡單講,上面有提到過,將資料庫 dump 出來修改掉再取代回去。記得,是 SOP 了,備份還原後,得檢查與處理 http/https 這問題。
    另外原則上,上面也提到過另一支舊版的 AIO,備份時,分別使用它,及最新版,分別備份之,如此較保險與安心。
PHP Code Snippets Powered By : XYZScripts.com