テーブルを丸ごとバックアップする方法で今までバックアップをとってきたんだが、
ある特定の業務アプリで、データが膨大なものが存在してた。
エディタでいちいちひらいてテーブルの名前から探して…みたいなことをしてたみたいで、
ちょっと手間がかかるなと。で、緊急時にリストアする際に、特定のテーブルだけしたいという
リクエストをうけたので探してみた。
それっぽいのはあったんだけどまあ、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