#0005 WordPressをバックアップしよう (2) – リストア編 –

WordPressは非常に高機能で便利なCMSですが、テーマファイルの編集やプラグインの設定を誤ったりしたときはブラウザも頭の中も真っ白になってしまいます。イザというときに慌てないためにも、WordPressバックアップの手順を理解しておくことは重要です。前回はバックアップの手順を紹介しましたが、今回はバックアップしたデータからリストアする方法について解説します。

WordPressのリストアに必要なもの

前回取得したバックアップデータを用意します。ホームディレクトリの下に「BACKUP」ディレクトリを作成したので、そこに移動しましょう。

% cd ${HOME}/BACKUP/

% pwd
/home/example/BACKUP

% ls -l
total 7400
-rw-r--r--  1 example  users     6571 Feb 18 11:32 WordPress.sql.gz
-rw-r--r--  1 example  users  7513301 Feb 18 10:09 www-BACKUP.tar.gz

WordPress.sql.gz がMySQLのバックアップファイル、 www-BACKUP.tar.gz がドキュメントルート配下のファイル一式です。これら2つの圧縮されたファイルを使ってリストアします。今回は、wpコマンドを使わず、さくらのレンタルサーバーに最初からインストールされているコマンド群を使用します。


 

サイト全体のリストア手順

本来ですと、どこが壊れたのか(壊してしまったのか)を理解してリストアするのが一番なのですが、そうも言ってられない場合もあるかと思いますので、サイト全体をリストアする手順を紹介します。今回は、データベースのすべてのテーブルとドキュメントルート配下をすべて削除してしまった場合を想定します。

データベースのリストア手順

まず、mysqlコマンドを以下のように実行し、テーブルがすべて無くなっている状態を確認します。ホスト名「mysqlXXX.db.sakura.ne.jp」の部分、パスワード「XXXXXXXX」、データベース名「example_wp0001」の部分は適宜ご自身の環境に合わせて読み替えてください。

% mysql -u example -h mysqlXXX.db.sakura.ne.jp -pXXXXXXXX example_wp0001 -e "SHOW TABLES;"

上記コマンドを実行して、1行も表示されていなければ、残念ながらすべてのテーブルは失われています。また、特定のテーブルが削除されているかどうかを確認するには、次のようにします。

% mysql -u example -h mysqlXXX.db.sakura.ne.jp -pXXXXXXXX example_wp0001 -e "SHOW TABLES;" | grep wp_options

上記の例では、テーブル一覧から wp_optionsテーブルが存在するかどうかをgrepコマンドで絞り込んで表示しています。それでは、リストアしてみましょう。

% zcat WordPress.sql.gz | mysql -u example -h mysqlXXX.db.sakura.ne.jp -pXXXXXXXX example_wp0001

リストアできたかどうかを確認します。

% mysql -u example -h mysqlXXX.db.sakura.ne.jp -pXXXXXXXX example_wp0001 -e "SHOW TABLES;"
+-----------------------------+
| Tables_in_example_wp0001 |
+-----------------------------+
| wp_commentmeta              |
| wp_comments                 |
| wp_links                    |
| wp_options                  |
| wp_postmeta                 |
| wp_posts                    |
| wp_term_relationships       |
| wp_term_taxonomy            |
| wp_termmeta                 |
| wp_terms                    |
| wp_usermeta                 |
| wp_users                    |
+-----------------------------+

上記のように、削除されたテーブルが復活しました。


ファイルのリストア手順

まず、WordPressを構成するファイルすべてを復旧させる手順を紹介します。前回、ホームディレクトリの下に「BACKUP」というディレクトリを作成し、そこに www-BACKUP.tar.gz というファイルでバックアップしました。これを解凍してリストアしましょう。

% cd ${HOME}/www/
% tar xvzf ${HOME}/BACKUP/www-BACKUP.tar.gz

これで、すべてのファイルが復旧されました。ただし、既存のファイルは上書きされてしまいますので、特定のファイルのみをリストアしたい場合は次のようにします。

wp-config.php のみをリストアする手順

wp-config.php のみを誤削除してしまった、と明確にわかっている場合は、バックアップファイルから wp-config.php のみを取り出してリストアすることもできます。その場合、以下のように解凍しましょう。

% cd www/
% tar xvzf ${HOME}/BACKUP/www-BACKUP.tar.gz wp-config.php

もし、圧縮ファイルの中に wp-config.php が含まれているかわからない、という場合には、以下のようにして圧縮ファイルを解凍せずに圧縮ファイルの中身を確認することができます。上記のように、いきなり解凍せず確認してから解凍するのがよいでしょう。

% tar tvzf ${HOME}/BACKUP/www-BACKUP.tar.gz | grep wp-config.php
-rw-r--r--  0 example users    1569 Feb 14 04:30 ./wp-config.php

上記のように、圧縮ファイルの中に wp-config.php が含まれていることがわかりました。

深い階層のファイルをリストアする手順

例えば wp-admin ディレクトリ配下のファイルをリストアしたい場合、以下のようにします。今回は、 admin-ajax.php をリストアする例をご紹介します。

% cd www

% tar tvzf ${HOME}/BACKUP/www-BACKUP.tar.gz | grep admin-ajax.php
-rw-r--r--  0 example users    3641 Feb 14 04:11 ./wp-admin/admin-ajax.php

% tar xvzf ${HOME}/BACKUP/www-BACKUP.tar.gz ./wp-admin/admin-ajax.php

リストアできたか確認してみましょう。

% ls -l ./wp-admin/admin-ajax.php
-rw-r--r--  1 example  users  3641 Feb 14 04:11 ./wp-admin/admin-ajax.php

lsコマンドで表示されたので、バックアップした時点のファイルをリストアできたことがわかります。


WordPress バックアップのまとめ

WordPressに限らず、何かしらの変更を加える直前にバックアップしておく癖をつけておけば、もしブラウザからアクセスできなくなっても、慌てず騒がずリストアすることが可能になります。その際、注意しておきたいのは、次の通りです。

  1. バックアップは、ファイルとデータベースの両方を採取する必要がある
  2. リストアできるのは最後のバックアップした時点のものになる(バックアップを複数採ることで世代管理は可能です)

バックアップは採取しておしまいではなく、リストアできることを確認してはじめてバックアップができたと言えます。さくらのレンタルサーバーでは、MySQLのもう少し細かいバックアップを採ることは難しいですが、例えばバイナリログを用いたリストアをしたい、というような場合には、VPSや専用サーバーを借りて自身でMySQLサーバーをインストールし、バイナリログの設定をした上で運用するとよいでしょう。

ビジネスサイトをこれからつくる WordPressデザイン入門 サイト制作から納品までのはじめの一歩