Mysqlワイルドカードを用いて指定したテーブルのみdumpする方法
テスト用に最新のマスタデータだけ引っ張りたいけどだるい。
開発中にテストでマスタデータだけ抜いてローカルに入れたい。とか割とありますよね。mysqldumpのコマンドで良い塩梅にやってくれるコマンドないかなとよく探していたんですがないんですね。
落としどころとしては対象となるテーブル名をテキストファイルに列挙して、catで一行ずつ展開してdumpさせるといった方法はあったのですが、いちいちmysqlでテーブル名検索するのもだるいしなんとか1回でできないものかなと考えていて閃きました。
「あれ、findとgrepの組み合わせみたいにxargsで繋げればできるんじゃない?」
とりあえず試してみる
mysql -N -u[ユーザー名] -p [DB名] -e"show tables like 'hoge_%';" | xargs mysqldump -u{ユーザー名} -p -d {DB名}> ~/hogedump.sql
結果、mysqlの-eコマンドであいまい検索した対象テーブル(hoge_なんちゃら)のみdumpに成功!-Nコマンドはカラム名の出力を省略します。これを指定することでデータのみを単純に出力できるので、テーブル名のリストが得られるのですね。それをxargsで受けてmysqldumpに一行ずつ流し込む感じです。
xargs便利ですね。組み合わせ次第で色々捗りそう。
ちなみに悩む事なく素直にマスタデータ引っこ抜くスクリプトを1個書けば解決なんですが、頻繁に使う訳でもないしなあってことでもやもやしてたことが結果的に閃くまで考えることになりました。良いやら悪いやら。
参考サイト
http://tipszone.jp/20120526_mysqldump/