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


318

他のdbテーブルを含めずに、特定のテーブルまたはテーブルセットをダンプするにはどうすればよいですか。

+1

参照:[バックアップのためにデータベースを無視するためのmysqldumpのオプション](http://dba.stackexchange.com/q/35081/1192) 19 3月. 162016-03-19 12:32:16

431

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。

+29

ごく少数のテーブルを除外するには、 - ignore-table = Table 1 --ignore-table = Table 2 --ignign-table = Table 3などを使用します。 13 12月. 122012-12-13 13:06:49

  0

@ codecowboy、 'SQL =" $ {SQL} AND table_name NOT IN( 't1'、 't2'、 't3') "'を 'SQL =" $ {SQL} AND table_name NOT LIKE 'foo \ _に変更することができます。 % '"'。私はちょうどそれをテストしました、そしてそれはうまくいきます。条件を '%foo%'に変更して、名前のどこにでも( 'food'、 'fool'などを含む) 'foo'を含むすべてのテーブルを取得できます。 23 12月. 142014-12-23 02:55:37

  0

'--ignore-table'引数が存在することを考えると、ここでのテーブルを除外するアプローチは冗長であり、やり過ぎないでしょうか。もしそうなら、答えからあなたのスクリプトをスクラップして、代わりに '--ignore-table'をお勧めするほうが良いでしょうか? 26 9月. 162016-09-26 17:34:31

  0

@codewaggleこれはエラー 'オプションの不正使用--ignore-table =を与える

'schemaname.tablename'と指定しない限り。 – 10 1月. 172017-01-10 14:33:31

  0

クールなもの、なんらかの理由でSQL変数が複数行になっていませんか。 23 6月. 172017-06-23 04:32:56

  0

「データベースを選択するときにデータベースt1へのユーザーのアクセスが拒否されました」だけでは動作しません。 07 2月. 182018-02-07 12:44:57


24

あなたが数個以上のテーブルを持っているとき、それはこのような何かを実行するほうがずっと良いです:

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行に入力してください。


65

the answer by RolandoMySQLDBA拡張するthe answer by 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

8

下記のコマンドで簡単に実行できます。

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

--ignore-tableはmysqldumpから特定のテーブルを除外するためのもので、含めるためのものではありません。:) 16 9月. 132013-09-16 07:02:50

+1

それでも、除外するすべてのテーブルを一覧表示し、残りのテーブルだけをダンプすることもできます。 07 1月. 152015-01-07 18:17:40