自宅のWordPress用WEBサーバーの自動バックアップを設定した備忘録です。ウチのDebian GNU/Linux Wheezy7.8の自宅PCサーバーの場合は何が一番怖いかというと、やはりマシンの故障でしょう。いつHDD(SSD)が壊れても不思議ではありません。それに備えたバックアップですが、バックアップデータも自宅保存だと自宅丸ごと消滅するような災害の場合、全データロストという可能性があります。そのため無料クラウドストレージを利用して危機分散します。Dropboxの設定と、BoxとDriveeの設定は出来ていて共有ディレクトリがマウント済みの前提です。
もしWordPressのデータ全消滅なんてことになったら、心折れて一から全部やり直しする気力は無いでしょう。そんなことにならないためのバックアップ内容です。一般的なレンタルサーバーのデータバックアップとは少し趣向が違います。また複雑なスクリプトとか組めないなりに考えた方法ですのであしからず。
このページの目次
基本方針
全データロストを防ぐのが最優先です。バックアップは毎日深夜3時15分にCronで実行させます。
- 月、金曜日にクラウドストレージのBoxにバックアップ
- 火、木、土曜日にローカルのUSBメモリにバックアップ
- 水曜日にクラウドストレージのDriveeにバックアップ
- 日曜日にクラウドストレージのDropboxにバックアップ
無料で利用できる容量を考えて、Boxに2世代、DriveeとDropboxにそれぞれ1世代、ローカルのUSBメモリに3世代バックアップを取ります。
zipコマンドでバックアップ
バックアップといえばtar | gzip で保存するのが一般的かもしれませんが、クラウドストレージを利用するので、バックアップファイルにパスワードをかけたい、さらにBoxの無料アカウントでは一ファイルの250MB制限があるのを回避するために分割保存したい、それを簡単に利用するためにzipコマンドで圧縮します。Debianでは標準リポジトリからinfo-zipをインストールしておきましょう。
# aptitude install zip
MySQLのバックアップコマンド
mysqldumpコマンドを使って、全データベースのDumpファイルをzipで圧縮してパスワードをかけます。
mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /[dir]/mysqldump.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というファイル名でパスワード付き圧縮でバックアップするコマンドです。
zip -P [zippassword] -r /[dir]/wpbackup.zip [WP_dir1] [WP_dir2] [WP_dir3]
さらに、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メモリにバックアップします。まずはバックアップ用ディレクトリを作成しておきます。
cd /mnt/usb1 mkdir tue_backup thu_backup sat_backup
/usr/local/sbinにスクリプトファイルを作ります。
火曜日用ファイル /usr/local/sbin/tue_backup.sh
#!/bin/sh rm -r /mnt/usb1/tue_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /mnt/usb1/tue_backup/mysqldump.zip - cd /var zip -P [zippassword] -r /mnt/usb1/tue_backup/wpbackup.zip www blog1 blog2
木曜日用ファイル /usr/local/sbin/thu_backup.sh
#!/bin/sh rm -r /mnt/usb1/thu_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /mnt/usb1/thu_backup/mysqldump.zip - cd /var zip -P [zippassword] -r /mnt/usb1/thu_backup/wpbackup.zip www blog1 blog2
土曜日用ファイル /usr/local/sbin/sat_backup.sh
#!/bin/sh rm -r /mnt/usb1/sat_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /mnt/usb1/sat_backup/mysqldump.zip - cd /var zip -P [zippassword] -r /mnt/usb1/sat_backup/wpbackup.zip www blog1 blog2
水曜日スクリプト
Driveeにバックアップします。まずはディレクトリを作ります。
mkdir /mnt/drivee/wed_backup
水曜日用ファイル /usr/local/sbin/wed_backup.sh
#!/bin/sh rm -r /mnt/drivee/wed_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /mnt/drivee/wed_backup/mysqldump.zip - cd /var zip -P [zippassword] -r /mnt/drivee/wed_backup/wpbackup.zip www blog1 blog2
日曜日スクリプト
Dropboxにバックアップします。まずはディレクトリを作ります。
mkdir /home/user/Dropbox/sun_backup
日曜日用ファイル /usr/local/sbin/sun_backup.sh
#!/bin/sh rm -r /home/user/Dropbox/sun_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /home/user/Dropbox/sun_backup/mysqldump.zip - cd /var zip -P [zippassword] -r /home/user/Dropbox/sun_backup/wpbackup.zip www blog1 blog2
月、金曜日スクリプト
Boxへのバックアップはひと手間必要です。無料アカウントでは1ファイルのアップロードサイズの上限が250MBに制限されているため、分割されたzipファイルを任意の場所(今回は/rootに作成)に作ってからBoxにコピーします。まずはディレクトリを作成します。
mkdir /root/mon_backup /root/fri_backup /mnt/box/mon_backup /mnt/box/fri_backup
月曜日用ファイル /usr/local/sbin/mon_backup.sh
#!/bin/sh rm -r /root/mon_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /root/mon_backup/mysqldump.zip - cd /var zip -P [zippassword] -r -s 200M /root/mon_backup/wpbackup.zip www blog1 blog2 rm -r /mnt/box/mon_backup/* cp -f /root/mon_backup/* /mnt/box/mon_backup
金曜日用ファイル /usr/local/sbin/fri_backup.sh
#!/bin/sh rm -r /root/fri_backup/* mysqldump -u root -x --password=[mysqlpassword] --all-databases --events | zip -P [zippassword] /root/fri_backup/mysqldump.zip - cd /var zip -P [zippassword] -r -s 200M /root/fri_backup/wpbackup.zip www blog1 blog2 rm -r /mnt/box/fri_backup/* cp -f /root/fri_backup/* /mnt/box/fri_backup
スクリプトファイルに実行権限を与える
スクリプトのパーミッションを変更します。パスワードが平文で記入されているので500にします。
chmod 500 /usr/local/sbin/*_backup.sh
Cronに曜日別に登録する
Cronに週一ペースで各曜日別のスクリプトファイルを深夜3時15分に実行させるべく /etc/crontab に登録します。
# m h dom mon dow user command 15 3 * * 0 root /usr/local/sbin/sun_backup.sh 15 3 * * 1 root /usr/local/sbin/mon_backup.sh 15 3 * * 2 root /usr/local/sbin/tue_backup.sh 15 3 * * 3 root /usr/local/sbin/wed_backup.sh 15 3 * * 4 root /usr/local/sbin/thu_backup.sh 15 3 * * 5 root /usr/local/sbin/fri_backup.sh 15 3 * * 6 root /usr/local/sbin/sat_backup.sh #
念のためCronを再起動させておきます。
/etc/init.d/cron restart
以上で設定完了です。しばらくは動作しているか確認が必要ですね。
最後にひとこと
これで扱いやすいUSBメモリにもバックアップしておき、さらに自宅消滅から日本沈没までにも対応したバックアップになったと思います。
バックアップされたzipファイルを解凍する方法は次の記事をご覧ください。