WordPressのバックアップをrsyncで行う

ハードディスク

前回までは格安SIMのIIJmioについて紹介してきました。

今回は少しスマホネタを離れてWordPressについての話を紹介したいと思います。

BackWPupプラグイン

このサイトはWordPressというコンテンツマネージメントシステムで構築しています。開設から4年もたっていて記事は600件近くになっています。

このデータを失ってしまうとショックが大きいので、バックアップは重要です。

WordPressにはバックアップを行うプラグインがいくつかあり、私はBackWPupというプラグインを利用しています。

BackWPup - WordPress Backup Plugin

BackWPupにはフリー版と有料版があり、フリー版はWordPressのダッシュボードで、「プラグイン」→「新規追加」で「BackWPup」を検索すると出てくるのですぐにインストールすることができます。

ちなみにフリー版と有料版の違いは下記の通りです(クリックで拡大します)。基本的な動作はフリー版で問題ないと思いますが、Google Drive等のクラウドへのバックアップなどを行いたい場合は有料版(PRO版)が必要になります。

BackWpupの比較

BackWPupの使い方

BackWPupは「ジョブ」という単位で作業内容を設定します。ジョブに設定できる作業内容(タスク)としては

    データベースのバックアップ
    MySQLのデータをSQL形式でエクスポートする
    ファイルのバックアップ
    指定したディレクトリのファイルをバックアップする(tarやzipで固めて指定したディレクトリに保存)
    WordPressのXMLエクスポート
    記事データなどをデータをXML形式で出力し、指定したディレクトリに保存する
    インストール済みのプラグインリスト
    インストールしているプラグインの一覧をテキストファイルで指定したディレクトリに保存する
    データベーステーブルのチェック
    これはバックアップではありません。MySQLのデータに矛盾や破壊がないかどうかチェックをします

ジョブは複数作れますので、バックアップ作業ごとにジョブを分けて管理することもできます。また一つのジョブに複数の作業を登録することもできます。

WrodPressのダッシュボードから「BackWPup」→「新規ジョブを追加」を選択すると次のようが画面が現れます。この画面で何をするのかを設定していきます・・・と説明しようと思ったのですが、詳しく紹介しているサイトがあったので、そちらを参照するとOKだと思います。

両方ともちょっとプラグインのバージョンが古いですが、問題ないと思います。むしろ最近のBackWPupは日本語化されていますので簡単になっているかと思います。

BackWPupの悩み

私はBackWPupを使って

  • データベース
  • WordPressのXMLデータ
  • アップロードしたデータ(これはファイルバックアップを利用)

などを毎日バックアップするように設定しています。

しかし問題はそのバックアップしたファイルをどこに置いておくか、ということです。ブログにためにアップロードしたデータなどを含めると数百MBになってしまいます。これをメールなどで送るわけにも行けません。

そこで私はBackWPupの機能を使ってバックアップしたデータをSugerSyncに転送するように設定しました。

これならば何らかの事故でサーバのデータがすべてなくなってしまっても、データはSugerSyncにあるのでブログを復活させることができます。SugerSyncは5GBまでフリーで使えるので、バックアップデータも5世代ほど残す運用でも余裕があります。

SugerSyncの無料トライアル終了

SugerSyncがサービスの変更を発表しました。

  • SugarSyncサービス内容変更についてのご案内

残念ながら無料で5GB使えたサービスは2015年5月31日を持って終了となります。このためバックアップデータの退避先を探さなくてはいけません。

サーバ上にバックアップファイルを残すことはできますが、操作ミスや事故などでサーバのデータが失われることもあり得ますので、やはり別の場所にバックアップファイルを退避させる必要があります。

自宅のPCへのバックアップデータの退避

BackWPupが対応している別のクラウドサービス(Dropbox等)を使う手もありますが、自宅でLinuxを動かしているPCがあるので、そのPCにBackWPupで生成されたファイルを持ってくるように運用することにしました。

もちろん手動でやるのは面倒なので自動でバックアップファイルの取得(同期)を行うようにします。

rsyncのインストール

rsyncはバックアップ先(自宅のLinux PC)にインストールする必要があります。

Debianならば

apt-get update
apt-get install rsync

でOKです。

SSHの設定

自動でバックアップを行うために、自宅のPCからサーバに対して自動的にSSHでログインできるようにする必要があります。これにはSSHの鍵認証機能を利用します。下記で紹介しているので、「クライアントがLinuxの場合」に従って鍵ペアを生成して、公開鍵をサーバがに転送しておきましょう。

VPSのSSHサーバに鍵認証で接続 訂正版
VPSのSSHサーバに鍵認証で接続 訂正版
今回は鍵認証方式でVPSのSSHに接続する方法を改めて紹介します。以前はサーバ側で公開鍵と秘密鍵のペアで鍵認証をしていましたが、これを各クライアントで鍵のペアを作成して、公開鍵をサーバに登録するようにしました。こちらのほうが安全で運用も楽ですので、サーバ側の鍵ペアを利用している方がいましたら修正をお勧めします。

BackWPupの設定

BackWPupのジョブの設定で、バックアップファイルをサーバ上の特定のフォルダに保存するように設定します。

ジョブの設定の「一般」のタブの「バックアップファイルの保存方法」で「フォルダにバックアップ」を選択します。

バックアップ方法の指定

すると「宛先: フォルダ」というタブができるので、このタブを選んでファイルを保存する先のディレクトリと、南星台ファイルを残すのかを設定します。

バックアップ先の指定

とりあえずサーバの「/home/backup/wordpress」というディレクトリに5世代分のバックアップファイルを保持するような設定にしてみました。

ここで指定したディレクトリはあらかじめ作成しておきます。また、Webサーバが動作しているユーザ権限で書き込めるようにしておきます。

ここまでできたら一度ジョブを実行して、バックアップファイルが所定のディレクトリにできることを確認しましょう。

複数のジョブがある場合には同じフォルダにバックアップファイルを保存するように設定しておきます。

rsyncのテスト実行

それではいよいよrsyncの設定をしてきます。

以降の操作はすべて自宅のLinux PC上での操作になります。

まず、自宅のLinux PCのどこにバックアップファイルを持ってくるかを決めておきましょう。今回は

  • /backup/server

以下にバックアップファイルを持ってくることにします。当然このディレクトリはバックアップを行うユーザ(SSHでサーバにログインできるユーザ)が書き込めるようにしておきます。

そして次のコマンドを実行します。

rsync --dry-run –auv –-delete -e 'ssh -p 9876' foo@example.com:/home/backup/wordpress/ /backup/server

指定しているオプションの意味は次の通りです。

  • –dry-run:

    テストなので実際にファイルの転送を行わないことを指示します

  • -auv:

    aは「ディレクトリをたどる、日付を維持するなどのバックアップに適した動作」、uは「差分のみファイル転送する」、vは「動作状況を表示する」ことを示しています。

  • –delete:

    サーバ側でファイルが削除された場合に、転送先(自宅PC)でもそのファイルを削除します。

    バックアップファイルはBackWPupによって新しく作られると古いファイルは自動的に削除されます。このオプションがないと自宅のPCにどんどんファイルがたまっていくことになりますので必ず指定しましょう。

  • -e ‘ssh –p 9876’:

    接続にはsshを使用し、ポート番号は9876を使うことを指示しています。セキュリティのため、sshのポート番号を変えている場合はこのように指定します。

  • foo:

    サーバ上のユーザ名です。SSHで接続できるユーザ(公開鍵を登録したユーザ)を指定します。

  • example.com:

    バックアップファイルがあるサーバのホスト名です

  • /home/back/wordpress/:

    サーバ上のバックアップファイルがあるディレクトリです。最後に「/」を付けた場合とつけない場合で動作が違うので、試してみてください。
  • /backup/server:

    バックアップファイルを保存する自宅のPCのディレクトリです。こちらは最後に「/」を付けようがつけまいが動作は変わりません。

うまくいくと

receiving incremental file list
./
wordpress/
wordpress/ファイル名1
wordpress/ファイル名2
・・・

sent 199 bytes  received 2673 bytes  1914.67 bytes/sec
total size is 1942752992  speedup is 676446.03 (DRY RUN)

というような表示が出るはずです。バックアップしたいファイルが表示されていることを確認してください。

次のようなエラーが出る場合はサーバ側の「.profile」「.bashrc」「.cshrc」などで何か余分なメッセージを出している可能性があります。これらのファイルに「echo」という行があったら削除してみてください。

protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(174) [Receiver=3.0.9]

rsyncの実行!

テスト実行がうまくいったら「–rdry-run」を削除してrsyncコマンドを実行してみましょう。

rsync --dry-run –auv –-delete -e 'ssh -p 9876' foo@example.com:/home/backup/wordpress/ /backup/server

今回は実際にファイルを転送するためそこそこ時間がかかるはずです。

このコマンドが完了したらバックアップ先(自宅のLinux PCの/backup/server)にバックアップファイルができているはずです。

定期的なrsyncの実行

ここまで来たらあとはrsyncを定期実行するようにして、サーバ上のバックアップファイルを順次自宅のLinux PCに退避させるようにしましょう。

定期実行にはcronを使います。上記のrsyncを実行したユーザのアカウントで

crontab -e

を実行するとエディタが開いてcronの設定ファイルが表示されますので次の行を追加します。

0 6 * * * rsync -au --delete -e 'ssh -p 9876' foo@example.com:/home/backup/wordpress/ /backup/server

先頭の5項目(「11」「8」「」「」「*」)はコマンドを実行するタイミングです。

  • 1番目: 分 (0~59)
  • 2番目: 時 (0~23)
  • 3番目: 日 (1~31)
  • 4番目: 月 (1~12)
  • 5番目: 曜日 (0を日曜日として、0~6)

」は毎回実行することを意味します。たとえば日の項を「」とすると毎日という意味になります。上記の例では毎日6時0分にコマンドを実行することになります。

タイミングの指定の後には実行するコマンドを記載します。先ほど実行したrsyncのコマンドをそのまま記載してOKですが、cronで実行する場合は動作状況を表示してもしょうがないので「-auv」となってる部分は「-au」にしておきます。

セーブしてエディタを終了すればcronに設定が反映されます。

これで毎日サーバ上のバックアップファイルが自宅のLinux PCに退避することになります。

まとめ

今回はWordPressのBackWPupプラグインとrsyncを連携させるバックアップ方法を紹介しました。

これでバックアップファイルをサーバ上と自宅のPCとに保持できるのでリスクを分散することができます。バックアップ先にSugerSyncを使っている方は変更しておきましょう。

次回はこのブログを置いているVPSからの移転を検討します。