テーブルを丸ごとバックアップする方法で今までバックアップをとってきたんだが、
ある特定の業務アプリで、データが膨大なものが存在してた。
エディタでいちいちひらいてテーブルの名前から探して…みたいなことをしてたみたいで、
ちょっと手間がかかるなと。で、緊急時にリストアする際に、特定のテーブルだけしたいという
リクエストをうけたので探してみた。
それっぽいのはあったんだけどまあ、100%ってものがなかったのでとりあえず自作。
一週間で上書きっていう簡単なやつにしてみたよ。
Shellスクリプトもいろいろ面白いでつね。
#!/bin/sh
#DAYは数字で曜日。
DAY=`date '+%w'`
WORK_DIR=バックアップするディレクトリ
FILE_NAME=dump_$DAY
BACKUP_DIR=/tmp/
USER=DBのユーザ名
PASS=DBのパスワード
DB_NAME=データベース名
#バックアップディレクトリに移動
cd $BACKUP_DIR
#バックアップディレクトリがなかったら
if [ ! -d $WORK_DIR ]; then
#ディレクトリを作成する
mkdir $WORK_DIR
fi
#そのディレクトリに入る
cd $WORK_DIR
#事前にあったファイルは全部消す
rm ./*
#データベース内にあるテーブルリストを作成し、個別にテーブルのダンプデータを作成する
#-eはその後コマンドを実行するというオプション。
#-Bは余計な表示をせずに一覧を出力させる。
#-Nは一番上の見出しを削除する
for TABLENAME in ` mysql -u $USER -p$PASS -B -N -e 'show tables' $DB_NAME`
do
#echo $TABLENAME
mysqldump --opt -c -u $USER -p$PASS -x $DB_NAME $TABLENAME > $TABLENAME.sql
done
#移動する
cd $BACKUP_DIR
#該当する日付のディレクトリをまるごと圧縮する
tar -czf $DB_NAME$DAY.tar.gz $WORK_DIR