LoginSignup
80
87

More than 5 years have passed since last update.

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

Posted at

はじめに

特定のテーブルを指定して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してしまった方が簡単かもしれません。

80
87
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
87