आप mysqldump की विशिष्ट तालिका कैसे हैं?


403

मैं बिना डीबी की बाकी मेजों को शामिल किए एक विशिष्ट टेबल या सेटों को कैसे डंप कर सकता हूं?


जवाबों:


540

यदि आप 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 ईएसटी

@RoryDonohue ने मुझे बताया कि GROUP_CONCAT फ़ंक्शन को अपनी अधिकतम लंबाई बढ़ाने की आवश्यकता है। मैंने सत्र चर group_concat_max_len को अधिकतम 10K की लंबाई के साथ अपने उत्तर में जोड़ा । धन्यवाद, @RoryDonohue


43
सिर्फ कुछ तालिकाओं को बाहर करने के लिए आप --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 आदि का उपयोग कर सकते हैं
कोडवर्ड

@codecowboy, आप बदल सकते हैं SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"करने के लिए SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"। मैंने अभी इसका परीक्षण किया है और यह काम करता है। आप अपने नाम ('भोजन', 'मूर्ख' इत्यादि सहित) में कहीं भी 'फू' वाली सभी तालिकाएँ प्राप्त करने के लिए स्थिति को '% foo%' में बदल सकते हैं।
बुटिक बटुक

1
क्या तर्क निरपेक्षता को देखते हुए यहाँ निरर्थक और ओवरकिल को बाहर करने के लिए दृष्टिकोण नहीं --ignore-tableहै? और अगर ऐसा है, तो बेहतर होगा कि आप उत्तर से अपनी स्क्रिप्ट को स्क्रैप न करें और --ignore-tableइसके बजाय सिर्फ सिफारिश करें ?
मार्क एमी

Illegal use of option --ignore-table=<database>.<table>जब तक मैं तालिका निर्दिष्ट नहीं करता, तब तक @codewaggle त्रुटि देता है schemaname.tablename
WAF

शांत सामान, किसी भी कारण SQL चर बहु-रेखा नहीं है?
sdkks

72

RolandoMySQLDBA द्वारा उत्तर पर विस्तार करने के लिए एक नोट ।

उन्होंने जो स्क्रिप्ट शामिल की है, वह ( and table_name in) या ( and table_name NOT in) तालिकाओं की सूची को शामिल करने के लिए एक शानदार तरीका है ।

यदि आपको केवल एक या दो टेबल को बाहर करने की आवश्यकता है, तो आप उन्हें व्यक्तिगत रूप से --ignore-tableविकल्प के साथ बाहर कर सकते हैं :

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

29

जब आपके पास कुछ टेबलों से अधिक है तो यह कुछ इस तरह से चल रहा है:

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]

याद रखें कि उन आदेशों को केवल एक पंक्ति में टाइप किया जाना चाहिए।


11

आप इसे केवल कमांड का उपयोग करके कर सकते हैं:

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

4
-ignore-table को कुछ टेबल को mysqldump से बाहर करना है, शामिल नहीं करना है। :)
प्रवीण प्रसन्न

3
फिर भी एक को बाहर करने के लिए सभी तालिकाओं को सूचीबद्ध किया जा सकता है और यह केवल शेष लोगों को डंप करेगा :-)
कॉलिन 'टी हार्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.