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で起動させれば、指定したデータベースの全てのテーブルのダンプを取得できます。