mysqldumpでDBをバックアップ

このサイトが稼動してから2ヶ月以上たち、コンテンツが増えてきました。
そろそろバックアップも考えないと、ということでまずはDBバックアップから仕込んでみました。
※まさかこの後/var/www/htmlを丸ごと吹っ飛ばすことになろうとは・・・

スクリプト組み立て

SQLで手っ取り早くDBバックアップといえばdumpを取ること。これはmysqlでもpostgresqlでもかわりありません。
そしてdumpデータはZIPで圧縮し、一定期間保管後削除します。
またsqlユーザ/パスワードや保存先、バックアップ保持期間など後からメンテしやすいように変数で指定します。
これらを踏まえて作ったのが次のスクリプトです。

■mysqlbackup.sh

#!/bin/bash
## 変数に値を設定
HOSTNAME=XXXXXXXX
SQLUSER=YYYYYYY
SQLPASSWD=ZZZZZZ
DESTINATION=/data/backup/ #バックアップ先
BACKUP_RETENTION_PERIOD=14 #バックアップ期間(14日間)

## mysqldump実行
mysqldump --opt --events -u${SQLUSER} -p${SQLPASSWD} -x --all-databases | gzip > ${DESTINATION}${HOSTNAME}_dbackup_`date +%Y%m%d`.gz

## BACKUP_RETENTION_PERIODで設定した期間以前のものは自動削除
find ${DESTINATION} -mindepth 0 -mtime +${BACKUP_RETENTION_PERIOD} -exec rm -f {} \;

exit

あとはmysqlbackup.shに実行権限を付与してからcrontab -eで実行スケジュールを指定したり、/etc/cron.daily にシンボリックリンクを設定して定期的に実行するだけです。