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

はじめに

特定のテーブルを指定して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から始まるテーブルのみを抽出してみます。

$ 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すれば完了です。

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

# おわりに mysqldumpのオプションで `--ignore-table=.` があります。ですが複数テーブル除外したい場合は、その数だけ `--ignore-table=.