特定のテーブルをどのようにmysqldumpしますか?


回答:


540

mydbからテーブルt1、t2、およびt3をダンプする場合

mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql

mydbに大量のテーブルがあり、t1、t2、およびt3以外のすべてをダンプする場合は、次のようにします。

DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql

試してみる !!!

更新2014-03-06 10:15 EST

@RoryDonohueは、GROUP_CONCAT関数の最大長を拡張する必要があることを指摘しました。セッション変数group_concat_max_lenを最大長10Kで回答に追加しました。ありがとう、@ RoryDonohue。


43
いくつかのテーブルのみを除外するには、--ignore-table = Table1 --ignore-table = Table2 --ignore-table =
Table3

@codecowboy、あなたは変更することができますSQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"。私はちょうどそれをテストし、動作します。条件を「%foo%」に変更して、名前に「foo」を含むすべてのテーブル(「food」、「fool」などを含む)を取得できます。
バトルビュータス14

1
ここでテーブルを除外するためのアプローチは、--ignore-table引数の存在を前提として冗長で過剰ではありませんか?もしそうなら、答えからスクリプトを削除し、--ignore-table代わりに推奨する方が良いと思いませんか?
マークアメリー

@codewaggle Illegal use of option --ignore-table=<database>.<table>テーブルをとして指定しない限り、エラーが発生しますschemaname.tablename
-WAF

クールなもの、SQL変数が複数行ではない理由は何ですか?
sdkks

72

RolandoMySQLDBAによる回答を拡張するメモ。

彼が含めたスクリプトは、テーブルのリストand table_name inを含める()または除外する(and table_name NOT in)ための優れたアプローチです。

1つまたは2つのテーブルを除外する必要がある場合は、--ignore-tableオプションを使用して個別に除外できます。

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql

29

いくつかのテーブルがある場合、次のようなものを実行する方がはるかに優れています。

mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"' 
       | grep -v Tables_in 
       | xargs mysqldump [databasename] -u [root] -p [password] > [target_file]

または、次のように考えてください:

mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';" 
       | mysql -u[user] -p[password] databasename 
       | sed '/Tables_in/d'` > [target_file]

これらのコマンドは1行のみで入力する必要があることに注意してください。


11

以下のコマンドを使用して簡単に実行できます。

mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql

4
--ignore-tableは、特定のテーブルをmysqldumpから除外するものであり、含めるものではありません。:)
Praveen Prasannan

3
しかし、1は除外するすべてのテーブルを一覧表示することができ、それだけのもの、残り:-)をダンプするだろう
コリン・「tはハート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.