Posted at

MySQLで特定のテーブルをdumpする方法。

More than 1 year has passed since last update.


はじめに

特定のテーブルを指定してdumpするには以下の方法で行えます。


コマンド

$ mysqldump -u<ユーザー> -p<パスワード> 【データベース】 【テーブル1】 【テーブル2】 ... --master-data --single-transaction > hogehoge.dump


データベースの後にテーブル名を並べれば良いのですが、数が増えてくると大変です。。。そんな時はテーブルリストを作成し、それを使ってdumpを行うと簡単になります。


実践

実際のデータベースを使って試してみます。

まずはrepltestというデータベースに以下のテーブルが存在します。


テーブル一覧

$ mysql -uroot repltest -e "show tables"

+--------------------+
| Tables_in_repltest |
+--------------------+
| hogehoge1 |
| hogehoge2 |
| hogehoge3 |
| hogehoge4 |
| hogehoge5 |
| test1 |
| test2 |
| test3 |
| test4 |
| test5 |
| user1 |
| user2 |
| user3 |
| user4 |
| user5 |
+--------------------+

ここで、hogeから始まるテーブルのみを抽出してみます。


hoge抽出

$ mysql -uroot repltest -N -e "show tables like 'hoge%'"

+-----------+
| hogehoge1 |
| hogehoge2 |
| hogehoge3 |
| hogehoge4 |
| hogehoge5 |
+-----------+

オプション
内容

-N, --skip-column-names
カラム名を表示しない

これをテキストに書き出すと、


テキストへ書き出し

$ mysql -uroot -phogehoge repltest -N -e "show tables like 'hoge%'" > repltest.txt



表示

$ cat repltest.txt 

hogehoge1
hogehoge2
hogehoge3
hogehoge4
hogehoge5

このようにhogeから始まるテーブルのみ一覧としてリストできました。

あとはこのリストをcatコマンドを使いながらdumpすれば完了です。


dump

$ mysqldump -uroot -phogehoge repltest `cat ./repltest.txt` --master-data --single-transaction > repltest.dump



おわりに

mysqldumpのオプションで --ignore-table=<database>.<table> があります。ですが複数テーブル除外したい場合は、その数だけ --ignore-table=<database>.<table> を並べないといけないデメリットがあります。

そんな場合は一旦dumpしたいテーブルをリストとして書き出し、そのリストを利用してdumpしてしまった方が簡単かもしれません。