mysqldumpでテーブル毎のダンプを圧縮して取得するスクリプト

mysqldumpではデータベースを指定して一括してダンプを取得できます。テーブル毎のダンプも取得できます。

しかし、一括して取得したダンプの1つのテーブルだけをインポートすることはできません。これは1つのテーブルだけをテスト環境で復元させるときにはとても不便です。

また、テーブル毎の取得をしていては、テーブルが変わったりするごとに、スクリプトを変更しなくてはいけません。

なかなかネットでみつからなかったので、作成することにいたしました。

#!/bin/sh
USER_="MySQLユーザー名"
PASS_="MySQLパスワード"
PATH_DUMP="/ダンプの保存場所"
PATH_LOG="/ログの保存場所/dump.log"
MYSQLDUMP="$(which mysqldump)"
MYSQL="$(which mysql)"
TARGET="'DATABASE1','DATABASE2','DATABASE3'" #ダンプを取得したいデータベースを指定
DATE_INF=$(date '+%Y/%m/%d %I:%M:%S ') #ログに出力する日時

res=`$MYSQL -u $USER_ -p$PASS_ -N -e "select concat('$MYSQLDUMP -u $USER_ -p$PASS_ --no-autocommit --database ',TABLE_SCHEMA,' --table ' ,TABLE_NAME ,' | gzip > $PATH_DUMP',TABLE_SCHEMA,'.',TABLE_NAME,'.dmp.gz 2>&1 \\n')  from  information_schema.TABLES WHERE TABLE_SCHEMA not in ('information_schema','mysql') and TABLE_SCHEMA in($TARGET)"`

echo -e $res > out.sh
sh out.sh

if test -s $PATH_DUMP$R.dmp.gz
MSG="$(sh out.sh)"
then
    echo $DATE_INF "Successful!!:Get Data Dump" >> $PATH_LOG 
else
    echo $DATE_INF "Error!!:Get Data Dump" >> $PATH_LOG 
fi

これをcronで起動させれば、指定したデータベースの全てのテーブルのダンプを取得できます。

タイトルとURLをコピーしました