it-swarm.asia

Bagaimana Anda membuat tabel khusus mysqldump?

Bagaimana saya bisa membuang tabel atau set tabel tertentu tanpa menyertakan sisa tabel db?

423
markdorison

Jika Anda membuang tabel t1, t2, dan t3 dari mydb

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

Jika Anda memiliki banyak tabel di mydb dan Anda ingin membuang semuanya kecuali t1, t2, dan t3, lakukan ini:

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

Cobalah !!!

UPDATE 2014-03-06 10:15 EST

@ RoryDonohue menunjukkan kepada saya bahwa fungsi GROUP_CONCAT perlu diperpanjang panjangnya. Saya menambahkan variabel sesi group_concat_max_len pada jawaban saya dengan panjang maksimal 10K. Terima kasih, @RoryDonohue.

571
RolandoMySQLDBA

Catatan untuk memperluas jawaban oleh RolandoMySQLDBA .

Skrip yang ia sertakan adalah pendekatan yang bagus untuk memasukkan (and table_name in) atau tidak termasuk (and table_name NOT in) daftar tabel.

Jika Anda hanya perlu mengecualikan satu atau dua tabel, Anda dapat mengecualikannya secara individual dengan --ignore-table pilihan:

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

Ketika Anda memiliki lebih dari beberapa tabel, lebih baik menjalankan sesuatu seperti ini:

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]

Atau sesuatu seperti ini:

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

Ingat bahwa perintah-perintah itu harus diketik dalam satu baris saja.

31
grosshat

Anda dapat melakukannya cukup menggunakan perintah di bawah ini:

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