はじめに
「データベースの自動バックアップって出来ませんか?」
とのお話しがありました。
コードを見てみると独自フレームワークのようです。
工数を減らすためにWordPressのプラグインでバックアップを取るように設定してみました。
実際にやってみたところ、ウェブで「バックアップする時間」「範囲」「メール送信先」などを簡単に設定できて良い感じでした。
構築に掛かる時間は慣れたら一時間ぐらいかなと思っています。
バックアップスクリプト
データベースのバックアップといえば
「スクリプトを書いて(拾ってきて)Cronで回して…」
と考えていました。
バックアップファイルはサーバに書き出してFTPで落としてもらって、といったものです。
毎日のダウンロードが大変だからメール送信で、とも考えましたが、動作確認とか大変ですし、エラー時にログを飛ばしてもらえるかといった問題もあります。
またバックアップは放っておくと容量が大きくなりすぎるため、世代管理も重要です。
またしばらく経った後にルールを変更したい、といった際に担当者さんでできるかといった事もありました。
BackWPUp
WordPressのバックアップツールにある「BackWPUp」が非常に便利です。
データベースやファイルのバックアップを完全に取ることができます。
- テーブルごとのバックアップ
- 世代管理
- ログのメール送信
- スケジュール管理
- バックアップ先(メール、フォルダ、DropBoxなど)を選べる
これらをウェブから設定する事ができます。便利ですね。
メリットデメリット
WordPress + BackWPUpをバックアップツールとして使う際のメリットとデメリットについてです。
メリット
- バックアップタスクの管理が容易(ウェブでできる)
- バックアップに必要なこと(メール送信やバックアップ手段の選択)が一通り揃っている
デメリットとしては
- WordPress自体がアタックを受けて改ざんなどをされる可能性がある
- WordPress用のテーブルが増えて管理が煩雑化する
- バックアップ用のログイン情報などの管理が増える
- Cronでウェブアクセスをしなければならない
といったことが挙げられます。
特にWordPressを使うことで、ボットからのランダムアタックを受ける可能性は高く、セキュリティリスクは確実に増えます。
最も基本的なセキュリティ対策はWordPress本体のアップデートですが、低コストで運用したいという場面であればWordPressのアップデートが行われない可能性も高いです。
本体、プラグインの自動バックアップをオンにしておき、自動でのアップデートはされるようにしておきます。
Cronについて、WordPressは外部からのウェブアクセスによってスケジュールを発動させています。バックアップ用途のサイトですとアクセスが来ませんので、内部的にアクセスする必要があります。
実際の設定
WordPressとプラグインのインストール
WordPressとBackWPUpをインストールします。
このときにバックアップを取りたいデータベースにWordPressをインストールします。
この際に初期ウィザード、または設定で「Googleなどにインデックスされないようにする」をオンにしておきます。
Basic認証の導入
Basic認証を入れました。
.htaccess による認証用 パスワード暗号化ツール
http://www.luft.co.jp/cgi/htpasswd.php
AuthUserFile /path/to/.htpasswd
AuthName "Enter your ID and password."
AuthType Basic
require valid-user
経験則なお話しですが、Basic認証を入れるだけアタックなどの耐性がかなり上がると思っています。
どんな公開サーバでもBotによる無差別攻撃が多く、既知の脆弱性攻撃、ブルートフォースアタックなどを仕掛けてきます。
Basic認証を入れることでそれらをほぼ防ぐことができると考えています。
場合によっては、Basic認証と併せてIPアドレスベースで制限を掛けることで十二分なセキュリティを確保できると考えています。
「BackWPUp」の設定
お好みの設定を施します。
最も重要な「バックアップするテーブル」の設定を漏らさないようにします。
Cronを設定
WordPressのCronは、外部からのアクセスを元に発動しています。(たぶん)
外部からのアクセスは保障されないので、WordPressのCron、バックアップのスケジュールイベントが発動しません。
今回は稼働しているサーバにて自分自身にアクセスするようにして発動させました。
crontab -e
でトップページにアクセスが行くように設定します。
(レンタルサーバによっては設定が変わると思います)
今回はさくらインターネットの「さくらのレンタル」でした。
「さくらのレンタル」のOSはFreeBSDです。OSによってwgetのパスやcurlを使うべきか、標準エラー出力あたりが変わったりします。
*/5 * * * * /usr/local/bin/wget --user=basicuser --password=basicpasswd http://example.com/backup_wp/wp-cron.php > /dev/null 2>&1
--user
と--password
でBasic認証のオプションを付けています。
確認
最後にちゃんとバックアップされているかの確認を行って終わりです。
ちゃんとSQLが出来ているか、手元でリストアできるか確認しました。
まとめ
古くからバックアップのスクリプトがありますが、メンテナンス性の高さからいくとこういったやりかたも有りかなと思いました。
お手軽ですし、あとから色々と変える事が出来ます。
WordPressの知名度も高いので担当者さんに経験があればスムーズかなと思いました。
参考サイト
MySQLのバックアップ関連で最低限やるべき項目
http://qiita.com/yu_0105/items/528d627c35412c92c2ef
mysql の定期的なバックアップ
http://qiita.com/crimson_21/items/6171a95f8ddb2861e2e6
MySQLのバックアップを自動化
http://qiita.com/abgata20000/items/d5f8c13a4af1bcb1e394
BackWPup - WordPressを丸ごとバックアップできるプラグイン
http://netaone.com/wp/backwpup/