Belirli tablo (ları) nasıl mysqldump yapıyorsunuz?


Yanıtlar:


540

Eğer mydb'den t1, t2 ve t3 tablolarını atıyorsanız

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

Mydb'de bir ton tablonuz varsa ve t1, t2 ve t3 dışındaki her şeyi boşaltmak istiyorsanız, şunu yapın:

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

Bir şans ver !!!

GÜNCELLEME 2014-03-06 10:15 EST

@RoryDonohue , GROUP_CONCAT işlevinin maksimum uzunluğunun uzatılması gerektiğine işaret etti. Group_concat_max_len oturum değişkenini en fazla 10K uzunluğunda cevaplarıma ekledim . Teşekkürler, @RoryDonohue.


43
Yalnızca birkaç tabloyu dışlamak için kullanabilirsiniz --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 vs.
codewaggle

@codecowboy, değiştirebileceğiniz SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"için SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Sadece test ettim ve işe yarıyor. 'Foo' içeren tüm tabloları adlarının herhangi bir yerinde ('yemek', 'aptal' vb. Dahil) almak için koşulu '% foo%' olarak değiştirebilirsiniz.
Buttle Butkus

1
Buradaki tabloları dışlama yaklaşımı , --ignore-tableargümanın varlığına dayanarak gereksiz ve fazla yüklenmemiş midir? Ve eğer öyleyse, betiğinizi cevaptan çıkarmak ve --ignore-tablebunun yerine önermek daha iyi olmaz mıydı ?
Mark Amery

@ codewaggle Tabloyu Illegal use of option --ignore-table=<database>.<table>ben belirtmediğim sürece hata veriyor schemaname.tablename.
WAF

harika şeyler, herhangi bir nedenle SQL değişkeni çok satırlı değil mi?
sdkks

72

RolandoMySQLDBA tarafından cevap genişletmek için bir not .

İçerdiği senaryo, bir tablo listesi ( and table_name in) veya dışlamak ( and table_name NOT in) için harika bir yaklaşımdır .

Yalnızca bir veya iki tabloyu dışlamanız gerekiyorsa, bunları seçenekle ayrı ayrı dışlayabilirsiniz --ignore-table:

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

29

Birkaç masadan fazlasına sahipseniz, bunun gibi bir şeyi çalıştırmak çok daha iyidir:

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]

Ya da böyle bir şey düşün:

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

Bu komutların yalnızca bir satırda yazılması gerektiğini unutmayın.


11

Basitçe aşağıdaki komutu kullanarak yapabilirsiniz:

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

4
--ignore-table, belirli tabloları dahil etmemek yerine mysqldump öğesinin dışında bırakmaktır. :)
Praveen Prasannan

3
Oysa biri hariç tutulacak tüm tabloları listeleyebildi ve geriye kalanları bırakacaktı :-)
Colin 't Hart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.