logrotateで簡単に世代バックアップ(couchdb)
couchDBのデータはreplicationをするか、database fileを適当にバックアップしておいてねという仕様のよう。*1
rsyncやcpのshellを書いてもよいのですが、バックアップの世代管理を手軽に行いたいときはlogrotateを愛用してます。
今回はchefに使われているcouchdbをバックアップしていますが、プロダクトに組み込みの各種DB・ファイル等(pg_dumpだったりその他の普通のtarballだったり)いろいろ使い道はあるかと。
/etc/logrotate.d/couchdb に追記
# 日次バックアップ /var/backups/couchdb_backup_daily.tar.gz { missingok nocreate daily rotate 14 sharedscripts postrotate /bin/tar -C /var/lib/ -czf /var/backups/couchdb_backup_daily.tar.gz couchdb endscript } # 月次バックアップ /var/backups/couchdb_backup_monthly.tar.gz { missingok nocreate monthly rotate 3 sharedscripts postrotate /bin/tar -C /var/lib/ -czf /var/backups/couchdb_backup_monthly.tar.gz couchdb endscript }
頻度(rotate)は適当に変えて下さい。
管理するデータ量が多い場合は、postrotateの圧縮後に、couchDBのデータ容量を削減しておきます。(↓chefの場合)
/usr/bin/curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact
# 設定のテスト logrotate -d /etc/logrotate.d/couchdb # 手動で実行してみて、rotateされることを確認 logrotate -f /etc/logrotate.d/couchdb
logrotate.dの設定自体にはdailyより細かい指定はできないが、-fオプション付きをcronで回すことで、さらに頻繁にバックアップすることも。
(ログならともかくDBのデータでそこまでするのであれば別の方法がよさそうですが)
shを書いてcronを動作確認してという手間が無いのでlogrotateは便利なんですが、バックアップしてることが他人に伝わりにくいのが難点といえば難点でしょうか…
*1: http://wiki.apache.org/couchdb/How_to_make_filesystem_backups