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=