मैं बिना डीबी की बाकी मेजों को शामिल किए एक विशिष्ट टेबल या सेटों को कैसे डंप कर सकता हूं?
मैं बिना डीबी की बाकी मेजों को शामिल किए एक विशिष्ट टेबल या सेटों को कैसे डंप कर सकता हूं?
जवाबों:
यदि आप 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
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
करने के लिए SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
। मैंने अभी इसका परीक्षण किया है और यह काम करता है। आप अपने नाम ('भोजन', 'मूर्ख' इत्यादि सहित) में कहीं भी 'फू' वाली सभी तालिकाएँ प्राप्त करने के लिए स्थिति को '% foo%' में बदल सकते हैं।
--ignore-table
है? और अगर ऐसा है, तो बेहतर होगा कि आप उत्तर से अपनी स्क्रिप्ट को स्क्रैप न करें और --ignore-table
इसके बजाय सिर्फ सिफारिश करें ?
Illegal use of option --ignore-table=<database>.<table>
जब तक मैं तालिका निर्दिष्ट नहीं करता, तब तक @codewaggle त्रुटि देता है schemaname.tablename
।
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
जब आपके पास कुछ टेबलों से अधिक है तो यह कुछ इस तरह से चल रहा है:
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]
याद रखें कि उन आदेशों को केवल एक पंक्ति में टाइप किया जाना चाहिए।
आप इसे केवल कमांड का उपयोग करके कर सकते हैं:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql