アレアレ

お役立ち情報、お悩み解決情報を発信!

WordPress

UpdraftPlusのバックアップから最新のものだけを展開する方法

UpdraftPlusのバックアップから最新のものだけを展開する方法

今回は、WordPressのバックアップをプラグインのUpdraftPlusを利用して行なっている人に伝えたい情報です。

お伝えしたいのは、UpdraftPlusの圧縮された複数のバックアップファイルから、最新の1セットだけを展開するBashのシェルスクリプトです。

UpdraftPlusのバックアップファイルは設定次第で複数のセットができる

私は、UpdraftPlusのバックアップしたサーバー上にあるファイルを、自分のパソコン上にコピーして来て使うことがたまにあります。例えば、テーマを変えるときや、影響が大きそうなプラグインを導入するときなど、そのようにします。

サーバー上の実際のWordPressで試す前に、ローカルのパソコン上にWordPressを作って、試したいわけですね。そのローカル環境を作るのに、UpdraftPlusのバックアップファイルを利用しています。これを使うと、最新の記事のあるサーバー上と同じ状況を、ローカル側に作れるからです。

そのUpdraftPlusのバックアップファイルは、その設定次第では、複数のセットができます。例えば、次の図は、このブログのバックアップファイルの様子です。

WordPressのプラグインUpdraftPlusで保存されたバックアップファイル

この図では、「2017-10-22」と「2017-10-23」の2セットのバックアップファイルができています。これは、私がUpdraftPlusの設定を「1日一回、サーバー上に2セット残す」という設定にしているのでこうなっています。

ローカルに展開するにあたり最新の1セットだけ行いたい

さて、サーバー上にあるUpdraftPlusのバックアップファイルをローカル側に全てコピーして来たとしましょう。その次にするのは、そのバックアップファイルの展開(解凍)です。

UpdraftPlusのバックアップファイルは、DBが「.gz」で、それ以外のファイルが「.zip」で圧縮されています。なので、それらをWordPressに読み込みやすいフォルダ構成に展開する必要があるわけです。

そして、その展開にあたり、最新の1セットだけ(上の例で言うと、2017-10-23のものだけ)を対象にしたいわけです。ローカル環境を作るにあたり、最新の1セットのバックアップだけで十分だからです。

UpdraftPlusのバックアップから最新のものだけを展開するBashのシェルスクリプト

そこで、それをコマンド一発で行えるようにするためのBashのシェルスクリプトを作りました。次の通りです。

# db.gzで終わる最新のファイル名を1件を取得する
# (head -1するので、このループは1度しか実行されない)
dbfiles=($(ls -t | grep "\-db.gz" | head -1))
for dbfile in ${dbfiles[@]}; do
    
    ## そのDBファイルを解凍する
    gzip -cd ${dbfile} > ./tmp.sql
    echo -e "SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION';\n" > ./install_wordpress.sql
    cat ./tmp.sql >> ./install_wordpress.sql
    rm  ./tmp.sql

    ## そのDBファイルと同じプリフィックスをもつZIPファイルを解凍する
    zipfiles=($(ls -t | grep ${dbfile/\-db.gz/}.*zip))
    for zipfile in ${zipfiles[@]}; do
        unzip -o -d ./wp-content ${zipfile}
    done
done

このスクリプトを任意の名前のテキストファイルとして、UpdraftPlusのバックアップファイルがあるフォルダに保存し、実行権をつけて実行すれば、最新のものだけをWordPressに取り込みやすい形で展開できます。

例えば、そのファイル名として「extract.sh」という名前をつけたとしましょう。その場合は、次のようにして、ターミナルから実行します。

chmod +x extract.sh
./extract.sh

macのターミナルでUpdraftPlusの展開スクリプトを実行する様子

正しく、実行されると、次の図のように、DBは「install_wordpress.sql」というファイル名で展開され、それ以外ファイルは、「wp-content」フォルダの下に展開されます。

UpdraftPlusのバックアップファイルを展開した様子

ちなみに「install_wordpress.sql」の最初の方を見ると、これが最新のバックアップから展開されたものと確認できます。このファイルが作成された日付が書いてあるからです。

また、DBのファイルには、次の処理で1行目にある設定を追記しています。

    echo -e "SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION';\n" > ./install_wordpress.sql

これは、MySQLサーバーのバージョン違いによって起こる、Insert文の初期値のエラーを起こさないようにするために、設定しています。サーバー側とローカル側のMySQLのバージョンの違いによって、UpdraftPlusのバックアップデータがうまく取り込めないことがあるんですね。その対策として、一手間行なっています。

uploadsが複数に分割されるときに特に便利

さて、このローカルでの圧縮されたバックアップファイルの展開作業ですが、今回のファイル数くらいでは、手作業でもできなくはありません。ただ、コマンド一発でできる点、また、それをWordPressに取り込みやすいフォルダ構成に展開している点で、これを利用した方が便利です。

また、UpdraftPlusのバックアップファイルは、「uploads」に大量の画像がある場合は、uploadsが分割して圧縮されます。「…-uploads.zip、…-uploads2.zip、…uploads3.zip、…」のような感じに複数に分かれるんですね。この分割数が多くなると、さすがに手作業で解凍するのが面倒になります。

Return Top