cronで簡単バックアップ
10/01/08 19:09
サイトを運用するなら、なにか問題が起こった時のためにバックアップがあると安心です。
でも手動でバックアップをとるのは手間がかかるし、忘れてしまうこともあるので大変。
サーバコンピュータでもmacのタイムマシーンみたいに自動で定期的にバックアップができたら便利ですよね。
Unix系のOSで使えるcronというタスクマネージャとシェルスクリプトを組み合わせることで同じようなことを実現出来ます。
cronって何?
crontab(クロンタブ、あるいはクーロンタブ、クローンタブとも)コマンドはUnix系OSにおいて、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。crontab - Wikipedia
要するに、決められた時刻に決められた仕事をしてくれる便利なコマンドです。
このcronを使ってwebサーバのバックアップの手続きを自動化してみます。
どうやって使うの?
まずはcronにシェルスクリプトを実行したい日時を指定します。
日時は分単位で指定することができ、分、時、日、月、曜日といった項目を指定出来ます。
さらに、リスト形式で複数の日時を指定したり、その他にも、範囲や、ジョブの実行間隔など細かい指示を出すことが出来ます。
細かい設定は、他に詳しく書かれている良いサイトが沢山ありますのでそちらの方を参考にしてください。cronの設定ガイド
バックアップ手順
今回はcmsを使ったサイトのバックアップということで、データベースとプログラム、そしてその他css等の静的なファイル、画像ファイル等が対象になります。
実際に使用したスクリプトは以下のようなものになりました。
dir=$(date +"%Y-%m-%d-%H%M")
mkdir $dir
cd $dir
mysqldump --default-character-set=utf8 -u {ユーザ名} -p{パスワード} ablogcms > ablogcms.sql
tar zcfv httpdocs.tgz ../../httpdocs
cd ../
find . -name "20*" | sort -r | while read deldir; do let num="${num=0}+1"; if test $num -ge 10; then rm -rf $deldir;fi; done;
上から順にみていきます。
dir=$(date +"%Y-%m-%d-%H%M") mkdir $dir cd $dir
ここではまずバックアップファイルを保存するためのディレクトリを作成しています。
実際には「2010-01-08-1844」といったような名前のディレクトリが作られます。
こうしておくとバックアップされた日時がすぐにわかりますので探すときに便利です。
mysqldump --default-character-set=utf8 -u {ユーザ名} -p{パスワード} ablogcms > ablogcms.sql
次のコマンドでデータベースをテキストファイルにダンプしてバックアップしています。
ここで注意すべきポイントは、mysqldumpコマンドに対してユーザー名だけでなくパスワードも一緒に渡していることです。
このときに「-p」オプションに対してスペースを開けずに パスワードを引渡します。
こうしておくと対話的にパスワードを求められることがなくなり手続きを自動化することができるようになります。
※注意
パスワードを直接スクリプト内に記述する必要がありますのでセキュリティには十分注意をする必要があります。
tar zcfv httpdocs.tgz ../../httpdocs
ここでwebサーバで公開しているディレクトリをまるごと圧縮してコピーしてきます。
以上で必要なファイルのバックアップは完了です。
しかしまだ作業には続きがあります。
バックアップが終わった後の後処理をしている部分を見ていきます。
cd ../
find . -name "20*" | sort -r | while read deldir; do let num="${num=0}+1"; if test $num -ge 10; then rm -rf $deldir;fi; done;
ここではバックアップされたデータのうち古いものを削除しています。
今回のバックアップでは最新の10個バックアップだけを残し、古いものは全て削除するようにしています。
こうすることでディスクの使用量を節約するとともに、気づかないうちにディスク容量が一杯になってしまうのを防いでいます。
ディスク容量を気にすることなく過去一定の期間のバックアップを残しておくことが出来ます。
おわりに
いかがでしたでしょうか。
このようにUnixコマンドをうまく使うと面倒な作業を簡単に自動化することが出来ます。
こういった便利な道具の使い方を覚えることも仕事の効率化へとつながるひとつの方法です。
投稿
記事URL
URL




