本記事では、プラグインを使わずに、WordPressをバックアップし、またバックアップしたデータを復元する手順を実際に手を動かして確認します。復元までがバックアップです。復元は仮想環境で行うことにします。
2016年4月27日追記:WordPressファイル群のコピー の節を追加。忘れていました。
やりたいこと
- CentOS 7 をインストールしたVPS上のWordPressをバックアップしたい
- いつでも復元作業ができるように、ローカル環境で復元を実行して手順を確認したい
- プラグインは使わない
プラグインを使わない理由は、データがどのように保存されているかを理解し、何かトラブルが合った時に対応できるようにするためです。プラグインを使ってボタン一発バックアップというのは確かに便利でしょうが、それではプラグインの挙動に問題が生じたとき、どうしてよいかわからなくなることが容易に想像され、長期的にはよろしくないと判断しました。バックアップがどのようになされるかを理解したうえで、信頼できるプラグインを導入し作業を簡便にするのはよいと思いますが、私は最近始めたばかりのWordPress初心者ですので、まずは手動で手順を確認します。
本作業には、Linuxとデータベースの基本的な知識が必要です。
想定する環境
本作業の環境は、ConoHaのVPS、OSがCentOS 7.1(ロケールは日本語)で、WordPressが4.4.2、またWebサーバーがApache、DBがMariaDBといったところです。ローカル環境は、Mac上にVagrantとVirtualBoxで構築します。OSは OSX 10.11 です。とはいえ、作業そのものは仮想環境上で行いますから、ホストOSが何かは本作業においては問題ではないと思います。
以下、本記事においては、バックアップ元を ドメイン example.com のサーバー上にあるものとします。また、Webサーバーのドキュメントルートは /var/www/html で、WordPressのファイルがその直下に展開されています。仮想環境のプライベートIPアドレスは、Vagrantのデフォルト設定である192.168.33.10 です。
ローカル環境の構築
ローカル環境については、「ローカルにWordPressの試験環境を Vagrant + VirtualBox + CentOS 7 で構築する : 或る阿呆の記」の第4節「WordPressを動作させるための環境を構築」までを実行して作成します。バックアップ元のサーバーとSSHでやりとりする場合は、加えてSSHの鍵認証の設定が必要です。この手順については、前述の記事「SSHで鍵認証を用いて、パスワードなしでログインする方法 : 或る阿呆の記」を参照とします。まぁファイルのやりとりさえできればよいので、ホストOS経由でもなんでもいいと思います。どうせ仮環境ですから。
バックアップ手順
おおまかにわけて、通常は /var/www/html 以下あたりに展開していると思われる、WordPressのPHPやらアップロードした画像やらのファイル群と、記事やコメント内容が格納されているデータベースのバックアップ作業が必要です。
WordPressのファイル群をコピーする
WordPressのファイルを置いている場所、Apacheを利用していて、ドキュメントルートを変更していないのであれば、/var/www/html あたりだと思いますが、フォルダまるごとコピーします。/var/www/htmlにある場合、たとえばsshを利用したコピーのコマンドは以下です。リモートホストはexample.com、ユーザー名はhackleとします。
scp -r hackle@example.com:/var/www/html .
カレントディレクトリに、example.comの /var/www/html が保存されます。
データベースをdumpする
記事の中身など、大事なところはデータベース上に保存されています。今回、データベースにはMariaDBを利用しているものとしますが、MySQLでも操作は同様だと思います。バックアップには、mysqldumpコマンドを利用します。保存したいデータベースのデータベース名、ユーザー名、パスワードを確認しておきましょう。今回、データベース名はwpdata、ユーザー名はwpdbuser、パスワードはpassとしてコマンドを実行します。
sudo mysqldump --single-transaction -u wpdbuser --password=pass wpdata > wpdata.sql
このコマンドにより、 wpdata.sql というファイルにバックアップされます。オプションの意味ですが、--single-transaction は、データの整合性を保つためのオプションとのことで、たとえばダンプに時間がかかっていても、終了した時点で最新の状態が反映されている、というようなものだそうですが、データベースについては不勉強なため、どれくらい信用してよいオプションなのかはちょっとわかりません。まぁ、つけて悪くなることはなかろうとつけています。他のオプションは名前からその意味を推測できるでしょう。
復元(リストア)手順
バックアップと復元(リストア)はセットです。せっかくバックアップしていても、いざという時に復元できなければ、それはストレージの肥やしを作成しているに過ぎませんから、いつ何が起きても慌てなくて済むように、復元手順を確認します。今回は、前々節で作成したローカル環境上で復元を実行します。
WordPress ファイル群のコピー
前節でバックアップした WordPress のファイル群を、ドキュメントルート、Apacheのデデフォルトとして考えると、/var/www/html以下にコピーします。また、ファイルの所有者を apache にします。この場合は以下のコマンドです。
$ chown -R apache:apache /var/www/html
また、念の為にwp-config.phpのユニークキーを再設定します。ユニークキーの役割は「wp-config.php の編集 - WordPress Codex 日本語版」にある通りで、クッキーに保存される情報の暗号化に用いられるキーのようです。なのでまぁ、同じサイトであれば、必ずしも再設定が必要ということはないのかもしれませんが…。ファイル群のコピーはこれでOKです。
データベースの復元
復元するデータベースを作成しておきます。
# 操作
sudo mysql
# データベースの作成(既に作成していればスキップ)
create database wpdata;
grant all on wpdata.* to wpdbuser@'localhost' identified by 'pass';
flush privileges;
# データベースがあることを確認
show databases;
データベースを作成したら、なんらかの手段により、バックアップ元サーバーの wpdata.sql をローカルに落とし、適用します。
sudo mysql -u wpdbuser --password=pass wpdata < wpdata.sql
ドメインの変更とサイトの確認
これで復元できているはずですが、192.168.33.10 にアクセスする前に、WordPressのアドレスを192.168.33.10に変更します。これをしないと、サイト内の内部リンクがすべて元のドメインを基づいて作られてしまいます。面倒なことに、サイトアドレスの情報はデータベース内にあるようなので、以下のようにデータベースの操作が必要です。
# 操作
sudo mysql
# WordPressのデータベースがあることを確認
show databases;
# Vagrant のプライベートIPアドレス(通常192.168.33.10)に変更、確認
use wpdata;
SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
UPDATE wp_options SET option_value = 'http://192.168.33.10' where option_name IN ('home','siteurl');
SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
以上の操作後、Webブラウザより 192.168.33.10 にアクセスして、サイトが正常に復元されていることを確認します。
以上より、WordPressで作成したサイトを、プラグインを使わずにバックアップ、復元しました。あとは、WordPress を展開したフォルダと、mysqldump の出力ファイルを定期的にバックアップしておけば、何か問題があった時にも慌てず復元できます。定期的なバックアップについてはまた別途。
参考
主に以下のサイト、記事を参考にさせていただきました。ありがとうございます。
コメント