#0005 WordPressをバックアップしよう (1) – フルバックアップ編 –

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

WordPressのバックアップが必要な理由

WordPressは豊富なテーマやプラグインが人気の理由ではないでしょうか。しかし、テーマの編集ミスやプラグインどうしの干渉が原因で管理画面 ( /wp-admin ) にアクセスできなくなったら・・・想像するだけで怖いです。しかし、サイトまるごとを最小限の手順でバックアップする方法さえ知っておけば、バックアップを取得した時点にまでサイトを巻き戻すことができるのです。

何をバックアップするべきか

WordPressを構成するファイルは大きく以下に別れます。

  1. WordPress本体
  2. テーマファイル
  3. プラグイン
  4. アップロードした画像や動画
  5. 投稿(固定ページ)データ

これらのデータがどこにあるか、を理解するのが最善ですが、ざっくりと分類すると「最悪壊れてもまたダウンロードして来ればよいデータ」と「壊れたり失ったりすると二度と復元できないデータ」に大別されます。

WordPress本体を構成するファイルのうち、 wp-config.php などのように自身で(あるいはwp-cliが)編集するファイルは例外として、設定値さえ覚えていれば(変更してなければ)ダウンロードし直せば復旧できます。テーマファイルやプラグインも、独自に開発したり開発者が公開を取りやめたりしたもの以外は、これもまたダウンロードし直せばよいでしょう。

しかし、アップロードした画像や動画、投稿データや各種設定は誰も代わりを作ってくれません。なので、本当に大事なデータは上記の「4. アップロードした画像や動画」「5. 投稿(固定ページ)データ」と言えるでしょう。

これらのデータを選り分けてバックアップしてもよいのですが、WordPressを再インストールしてから個別のデータをリストアするというのも手間がかかります。データ量が少ないうちは、まるっと全部をバックアップするほうが良いでしょう。

WordPressが管理するデータのうち、アップロードした画像や動画そのものは、ファイルとして管理しています。一方、投稿データや各種設定はMySQLデータベース内に格納されますので、まるっと全部をバックアップするとは言え、することは2つです。

  1. wwwディレクトリ以下のバックアップ
  2. データベースのバックアップ

今回は、これらバックアップをサーバー内に保存するところまでを行います。これらの作業はいずれもさくらのレンタルサーバーへSSHログインして行います。


wwwディレクトリ以下のバックアップ

バックアップデータの保存先ディレクトリを先に作っておきましょう。ホームディレクトリ直下に BACKUP というディレクトリを作ることにします。

% ls ${HOME} | grep BACKUP

上記コマンドでは、まだ何も表示されていないでしょう。これは、ホームディレクトリにまだ BACKUP ディレクトリを作成していないからです。それでは、以下のコマンドでホームディレクトリに BACKUP ディレクトリを作成しましょう。

% mkdir -p ${HOME}/BACKUP

BACKUP ディレクトリができたかどうか、確認してみましょう。

% ls ${HOME} | grep BACKUP
BACKUP

上記のように、バックアップディレクトリができました。それでは、次のコマンドでwwwディレクトリ以下を1つの圧縮ファイルにまとめましょう。

% cd ${HOME}/www
% pwd
/home/example/www
% tar cvzf ${HOME}/BACKUP/www-BACKUP.tar.gz .

上記コマンドですが、1行目は、さくらのレンタルサーバーで公開されるディレクトリへcdコマンドで移動しています。2行目にpwdコマンドを実行して、ホームディレクトリ直下のwwwディレクトリにいることを確認しています。3行目は、tarコマンドで wwwディレクトリの中身すべてを www-BACKUP.tar.gz というファイルにバックアップしています(多数のファイル名が表示されますが、これらのファイルがバックアップされます)。それでは、バックアップできたかどうかを確認してみましょう。

% cd ${HOME}/BACKUP
% pwd
/home/example/BACKUP
% ls
www-BACKUP.tar.gz

また、バックアップファイルの詳細を見るには、 ls コマンドに -l オプションをつけて見てみましょう。

% ls -l www-BACKUP.tar.gz 
-rw-r--r-- 1 example users 7513378 Feb 18 08:44 www-BACKUP.tar.gz

tar.gzファイルの中に目的のファイルがあるかどうかを見てみましょう。今回は wp-config.php ファイルが含まれていることを確認してみます。

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

もし、実際に www ディレクトリ直下に wp-config.php があるにもかかわらず www-BACKUP.tar.gz ファイルに含まれていない、という場合は、「tar xvzf」で圧縮する前に cdコマンドで www ディレクトリへ移動するのを忘れていないか、pwdコマンドで確認しましょう。


データベースのバックアップ

さくらのレンタルサーバーで使用しているデータベースはMySQLですが、バックアップの方法は通常2種類あります。

  1. mysqldumpコマンドでのバックアップ
  2. データベース管理ツール(phpMyAdmin)でのバックアップ

これらの手段でバックアップできるに越したことはないのですが、今回は wp-cli (wpコマンド)を使ってバックアップしてみたいと思います。その理由ですが

  1. WordPressが正常に動いている状態であれば、wpコマンドの後にデータベースのIDやパスワードを入力しなくてもよい
  2. 複数データベースがある場合でも、 wpコマンドを1回実行する都度1つのデータベースしか触れないので、誤操作で他のデータベースを破壊するリスクが極めて低い

というメリットがあります。それでは早速バックアップしてみましょう。

% cd ${HOME}/BACKUP
% pwd
/home/example/BACKUP
% wp db export --path=${HOME}/www WordPress.sql
Success: Exported to WordPress.sql

それでは、データベースがバックアップされたか確認します。まずはダンプデータの先頭5行を表示して、 MySQLサーバーのホスト名とデータベース名が記録されていることを確認してみましょう。

% head -n 5 WordPress.sql
-- MySQL dump 10.13 Distrib 5.5.32, for FreeBSD9.1 (amd64)
--
-- Host: mysqlXXX.db.sakura.ne.jp Database: example_wp0001
-- ------------------------------------------------------
-- Server version 5.5.38-log

次に、ダンプデータが最後まで記録されていることを確認してみましょう。

% tail -n 1 WordPress.sql
-- Dump completed on 2016-02-18 11:32:29

上記のように、「Dump completed」と表示されていることを確認しましょう。

wwwディレクトリ以下を圧縮したように、データベースのダンプファイルも圧縮しておきます。まずは圧縮前のファイルをlsコマンドで確認します。

% ls -lh WordPress.sql
-rw-r--r-- 1 example users 30k Feb 18 11:32 WordPress.sql

ファイルを圧縮するために、gzipコマンドを使用します。

% gzip WordPress.sql

圧縮されたかどうか、確認してみましょう。

% ls -lh WordPress.sql.gz
-rw-r--r--  1 example  users   6.4k Feb 18 11:32 WordPress.sql.gz

圧縮前のファイル「WordPress.sql」に対してgzipコマンドで圧縮をかけたことにより、データベースのダンプファイルが30kbから6.4kbになりました。また、ファイルの拡張子に「.gz」がついたことも比較できるかと思います。UNIXにはfileコマンドという便利なものがあり、例えば拡張子を偽造したとしてもどんな種類のファイルかが判別できます。WordPress.sql.gz ファイルをfileコマンドで見てみましょう。

% file WordPress.sql.gz
WordPress.sql.gz: gzip compressed data, was "WordPress.sql", from Unix, last modified: Thu Feb 18 11:32:29 2016

このように、「gzip compressed data」であることと、元のファイル名「WordPress.sql」が表示されていることで、fileコマンドでもそれが圧縮されたファイルであることがわかりました。

バックアップの基本は「同じファイルを複数箇所に保存」なので、サーバーの中だけでなく、手元のパソコンにもダウンロードしておきましょう。さくらのレンタルサーバーはFTPでも接続できますが、SFTPやSCPでも接続できますので、通信が暗号化されているSFTPやSCPでダウンロードするのがおすすめです。


次回は、バックアップしたデータをリストアする手順をご紹介したいと思います。