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 ke jawaban saya dengan panjang maksimal 10 ribu. Terima kasih, @RoryDonohue.
Untuk mengecualikan hanya beberapa tabel, Anda dapat menggunakan --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 dll.
codewaggle
@codecowboy, Anda dapat mengubahnya SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"menjadi SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Saya baru saja mengujinya dan berfungsi. Anda dapat mengubah kondisinya menjadi '% foo%' untuk mendapatkan semua tabel yang berisi 'foo' di mana saja dalam nama mereka (termasuk 'makanan', 'bodoh', dll).
Buttle Butkus
1
Bukankah pendekatan untuk mengecualikan tabel di sini berlebihan dan berlebihan mengingat adanya --ignore-tableargumen? Dan jika demikian, bukankah lebih baik untuk menghapus skrip Anda dari jawaban dan hanya merekomendasikan --ignore-tablesebagai gantinya?
Mark Amery
@codewaggle Itu memberikan kesalahan Illegal use of option --ignore-table=<database>.<table>kecuali saya menentukan tabel sebagai schemaname.tablename.
WAF
hal-hal keren, alasan SQL variabel tidak multi-line?
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 kira-kira 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.
Jawaban:
Jika Anda membuang tabel t1, t2, dan t3 dari mydb
Jika Anda memiliki banyak tabel di mydb dan Anda ingin membuang semuanya kecuali t1, t2, dan t3, lakukan ini:
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 ke jawaban saya dengan panjang maksimal 10 ribu. Terima kasih, @RoryDonohue.
sumber
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
menjadiSQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
. Saya baru saja mengujinya dan berfungsi. Anda dapat mengubah kondisinya menjadi '% foo%' untuk mendapatkan semua tabel yang berisi 'foo' di mana saja dalam nama mereka (termasuk 'makanan', 'bodoh', dll).--ignore-table
argumen? Dan jika demikian, bukankah lebih baik untuk menghapus skrip Anda dari jawaban dan hanya merekomendasikan--ignore-table
sebagai gantinya?Illegal use of option --ignore-table=<database>.<table>
kecuali saya menentukan tabel sebagaischemaname.tablename
.Catatan untuk memperluas jawaban oleh RolandoMySQLDBA .
Skrip yang ia sertakan adalah pendekatan yang bagus untuk memasukkan (
and table_name in
) atau mengecualikan (and table_name NOT in
) daftar tabel.Jika Anda hanya perlu mengecualikan satu atau dua tabel, Anda dapat mengecualikannya secara individual dengan
--ignore-table
opsi:sumber
Ketika Anda memiliki lebih dari beberapa tabel, lebih baik menjalankan sesuatu seperti ini:
Atau kira-kira seperti ini:
Ingat bahwa perintah-perintah itu harus diketik dalam satu baris saja.
sumber
Anda dapat melakukannya cukup menggunakan perintah di bawah ini:
sumber