cloud3

自宅サーバーのWordPressをCronで分散バックアップ

2015/03/30[公開]

 自宅のWordPress用WEBサーバーの自動バックアップを設定した備忘録です。ウチのDebian GNU/Linux Wheezy7.8の自宅PCサーバーの場合は何が一番怖いかというと、やはりマシンの故障でしょう。いつHDD(SSD)が壊れても不思議ではありません。それに備えたバックアップですが、バックアップデータも自宅保存だと自宅丸ごと消滅するような災害の場合、全データロストという可能性があります。そのため無料クラウドストレージを利用して危機分散します。Dropboxの設定と、BoxとDriveeの設定は出来ていて共有ディレクトリがマウント済みの前提です。

 もしWordPressのデータ全消滅なんてことになったら、心折れて一から全部やり直しする気力は無いでしょう。そんなことにならないためのバックアップ内容です。一般的なレンタルサーバーのデータバックアップとは少し趣向が違います。また複雑なスクリプトとか組めないなりに考えた方法ですのであしからず。

基本方針

 全データロストを防ぐのが最優先です。バックアップは毎日深夜3時15分にCronで実行させます。

  1. 月、金曜日にクラウドストレージのBoxにバックアップ
  2. 火、木、土曜日にローカルのUSBメモリにバックアップ
  3. 水曜日にクラウドストレージのDriveeにバックアップ
  4. 日曜日にクラウドストレージのDropboxにバックアップ

 無料で利用できる容量を考えて、Boxに2世代、DriveeとDropboxにそれぞれ1世代、ローカルのUSBメモリに3世代バックアップを取ります。

zipコマンドでバックアップ

 バックアップといえばtar | gzip で保存するのが一般的かもしれませんが、クラウドストレージを利用するので、バックアップファイルにパスワードをかけたい、さらにBoxの無料アカウントでは一ファイルの250MB制限があるのを回避するために分割保存したい、それを簡単に利用するためにzipコマンドで圧縮します。Debianでは標準リポジトリからinfo-zipをインストールしておきましょう。

MySQLのバックアップコマンド

 mysqldumpコマンドを使って、全データベースのDumpファイルをzipで圧縮してパスワードをかけます。

  •  mysqldumpでダンプ
  •  -u root でrootで実行
  •  -x でダンプ中ロックをかける
  •  –password=[mysqlpassword] でMySQLのパスワード指定
  •  –all-databases –events で全データベース対象
  •  zip -P [zippassword] でパスワード付きzipにして
  •  /[dir]/mysqldump.zip – でmysqldump.zipという圧縮ファイルの中身に”-“というファイル名のdumpファイル

  というのを一行で実行します。最後ファイル名が「-」のDumpファイルが出来上がりますがパイプで一行で済ますにはこれしかないようです。一行にする必要性も少ないですが、メモリ上で処理が進むのがいいですね。

WordPressディレクトリをバックアップ

 公開ディレクトリにあるWordPressディレクトリを丸ごとwpbackup.zipというファイル名でパスワード付き圧縮でバックアップするコマンドです。

 さらに、boxに保存するときだけ、 -s 200M のオプションを付けて200MB毎にファイルを分割します。

曜日別スクリプトファイルを作成

 曜日別にスクリプトファイルを作りCronで実行させる計画です。

  • Dropbox共有ディレクトリ /home/user/Dropbox
  • boxマウントディレクトリ /mnt/box
  • Driveeマウントディレクトリ /mnt/drivee
  • USBメモリのマウントディレクトリ /mnt/usb1
  • WordPrssディレクトリが3サイト分 /var/www 、/var/blog1、/var/blog2

 という事にした例です。

火、木、土曜日スクリプト

 サーバーに直挿ししたままのUSBメモリにバックアップします。まずはバックアップ用ディレクトリを作成しておきます。

 /usr/local/sbinにスクリプトファイルを作ります。

火曜日用ファイル /usr/local/sbin/tue_backup.sh

木曜日用ファイル /usr/local/sbin/thu_backup.sh

土曜日用ファイル /usr/local/sbin/sat_backup.sh

水曜日スクリプト

  Driveeにバックアップします。まずはディレクトリを作ります。

水曜日用ファイル /usr/local/sbin/wed_backup.sh

日曜日スクリプト

  Dropboxにバックアップします。まずはディレクトリを作ります。

日曜日用ファイル /usr/local/sbin/sun_backup.sh

月、金曜日スクリプト

 Boxへのバックアップはひと手間必要です。無料アカウントでは1ファイルのアップロードサイズの上限が250MBに制限されているため、分割されたzipファイルを任意の場所(今回は/rootに作成)に作ってからBoxにコピーします。まずはディレクトリを作成します。

月曜日用ファイル /usr/local/sbin/mon_backup.sh

金曜日用ファイル /usr/local/sbin/fri_backup.sh

スクリプトファイルに実行権限を与える

 スクリプトのパーミッションを変更します。パスワードが平文で記入されているので500にします。

Cronに曜日別に登録する

 Cronに週一ペースで各曜日別のスクリプトファイルを深夜3時15分に実行させるべく /etc/crontab に登録します。

 念のためCronを再起動させておきます。

 以上で設定完了です。しばらくは動作しているか確認が必要ですね。

 最後にひとこと

  これで扱いやすいUSBメモリにもバックアップしておき、さらに自宅消滅から日本沈没までにも対応したバックアップになったと思います。

 バックアップされたzipファイルを解凍する方法は次の記事をご覧ください。

こちらの記事もどうぞ

「自宅サーバーのWordPressをCronで分散バックアップ」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です