残りのdbテーブルを含めずに、特定のテーブルまたはテーブルセットをダンプするにはどうすればよいですか?
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
試してみる !!!
@ RoryDonohue は、 GROUP_CONCAT 関数は最大長を拡張する必要があることを指摘しました。セッション変数 group_concat_max_len を最大長10Kで回答に追加しました。ありがとう、@ RoryDonohue。
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
テーブルがいくつかある場合は、次のようなものを実行するほうがはるかに適切です。
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行だけで入力する必要があることに注意してください。
以下のコマンドを使用するだけで実行できます。
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql