Record / Memo
データベースを定期バックアップ
仕様 DB データはダンプして圧縮 ( mysqldump と tar ) 1 つの sh で複数 DB をバックアップ ( 入力引数で DB 判別 ) 1 日 1 回の定期バッチでのバックアップ ( cron ) 一定
仕様
- DB データはダンプして圧縮 ( mysqldump と tar )
- 1 つの sh で複数 DB をバックアップ ( 入力引数で DB 判別 )
- 1 日 1 回の定期バッチでのバックアップ ( cron )
- 一定期間過ぎたバックアップは削除 ( ファイル削除と日付処理 )
実装方法
下記ファイルを用意し起動 sh を cron 実行する。
- cron_backup_db.sh ・・・ 起動 sh 。cron から起動される sh 。DB 数だけ実行 sh を処理する。
- backup_db_one.sh ・・・ 実行 sh 。1つの DB をバックアップする sh 。
- rm.php ・・・ heteml では cron にて rm コマンドが実行できないため、php で補う。
backup_db_one.sh 内容
- DB バックアップの設定値、引数から DB 判別
- ディレクトリーを移動して、そこで作業
- データベースをダンプ
- アーカイブと圧縮
- 一時的な sql ファイルを削除
- ローテーション処理
DB バックアップの設定値
(バックアップバッチ以外で使用する)共通ディレクトリーなどの設定値を別ファイル config.conf にし、読み込む。
# config.conf
tools_dir=${HOME}/sample-tools # サンプル sh を実行するディレクトリー
bkup_base_dir=${HOME}/sample-backup # バックアップデータを格納するディレクトリー入力パラメーター
第 1 引数
DB 名
第 2 引数
DB ユーザー名
第 3 引数
DB パスワード
第 4 引数
DB ホスト
設定値
target_db_name
入力パラメーター第 1 引数 (=DB 名)
target_db_user
入力パラメーター第 2 引数 (=DB ユーザー名)
target_db_pass
入力パラメーター第 3 引数 (=DB パスワード)
target_db_host
入力パラメーター第 4 引数 (=DB ホスト)
bkup_days
保存期間で、この日数より前のデータは削除される。
today
sh が起動された日にち。「_20140514」
past_date
保存期間を過ぎた日
bkup_dir
バックアップデータを格納するディレクトリー。DB ごとにディレクトリーを分ける。
sample-backup/db/_sample-dbname
sql_file
SQL ダンプしたフィアル、日にちごと。圧縮後削除する。
_sample-dbname_20140514.sql
bkup_file
バックアップファイル。SQL を圧縮 ( TAR 形式 + GZIP 形式 ) したファイル。一定期間保管する。
_sample-dbname_20140514.sql.tar.gz
bkup_file_past
削除対象となるバックアップファイル。
コード全体
DB データをダンプ
7.11. mysqldump — データベースバックアッププログラム
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html
ファイル削除
heteml では cron にて rm は使えないので、代わりに削除用の php を作る。
参考 : cronで rm や wget 、find コマンドは使えますか?
http://heteml.jp/support/faq/2085.html
rm.php を作成し、sh と同ディレクトリーに配置。要権限付与。
cron 設定
サイトへのアクセスが一番少ない朝4時に行うこととして、cronに登録。
cron の設定名
DB Backup 毎朝4時
cron ファイル名
cron_backup_db.sh
時間指定
0 4 *
ファイルをアップし、実行できるように権限付与
# コマンド実行
$ chmod 700 cron_backup_db.sh
$ chmod 700 backup_db_one.shcron_backup_db.sh 内容
cron から起動する sh
# cron_backup_db.sh
# 引数に DB 情報を渡す。
${tools_dir}/backup_db_one.sh sample-dbname sample-dbuser sample-dbpass sample-dbhost