猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

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

投稿日:2012年12月13日 更新日:

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

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

MySQLにファイルからSQLを読み込む

MySQLにファイルからSQLを読み込む方法は 意外と知られていない方法ですのでメモっておきます。 INDEX1 MySQLにログイン中の場合2 スクリプトから実行する場合3 おまけのコマンドで指定す …

mysql

MySQLの連続INSERTを高速にする

もししらなければ確実に、そして恐ろしく効果を発揮できると思います。 INSERTを連続実行する際にボトルネックとなるのはコミットです。 オートコミットをオフにするという手もあるのですが、 INSERT …

mysql

vmwareをアップデートしたらMySQLが起動しなくなった

[root@centos100 log]# service mysql restart MySQL server PID file could not be found! [失敗] Starting …

sqlserver

SQL Server Browser を起動する方法

SQL Server構成マネージャーより起動できるはずが、なぜか開始も停止もできない。 コントロール パネル > システムとセキュリティ > 管理ツール > サービス を見ると、SQL Server …

sqlserver

SQL Server Management Studio の「上位200行の編集」を変更したい

恐らく私が十分に使用できていないだけで、機能はたくさんありそうなSQL Server Management Studio。最近新しいものに入れ替えたら(OS毎再インストールするハメになったのですが)、 …