mysqldump - केवल स्वायत्तता के बिना निर्यात संरचना


87

मेरे पास एक MySQL डेटाबेस है और मैं केवल ऑटो वेतन वृद्धि मूल्यों के बिना, इसकी संरचना को निर्यात करने का एक तरीका खोजने की कोशिश कर रहा हूं। mysqldump --no-dataलगभग काम करेगा, लेकिन यह auto_increment मान रखता है। क्या PHPMyAdmin का उपयोग किए बिना ऐसा करने का कोई तरीका है (मुझे पता है कि यह कर सकता है)?


ऐसा लगता है कि MySQL 5.5 (सर्वर) के साथ, --no-dataडिफ़ॉल्ट रूप से auto_increment मानों को छोड़ देगा।
जॉय एडम्स

@JoeyAdams क्या आप सुनिश्चित हैं? यही कारण है कि व्यवहार मैं अनुभव नहीं है
एलैंड

2
@JoeyAdams MySQL 5.7। * - mysqldump-no-data का उपयोग करते समय स्वत: पुन: उपयोग नहीं करता है।
टिबेरिउ-आयनो स्टेन 10

जवाबों:


68

तुम यह केर सकते हो :

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql

जैसा कि दूसरों द्वारा बताया गया है, यदि आप sedठीक से काम करना चाहते हैं , तो g( जी लोबल रिप्लेसमेंट के लिए) इस तरह जोड़ें:

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql

(यह केवल काम करता है आप जीयूआई उपकरण स्थापित किया है, तो: mysqldump --skip-auto-increment)

नई अद्यतन टिप्पणी के लिए धन्यवाद।

\bबेकार है और कभी-कभी आदेश टूट जाएगा। स्पष्टीकरण के लिए इस SO विषय को देखें । तो अनुकूलित उत्तर होगा:

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*//g' > <filename>.sql

11
मुझे नहीं लगता --skip-auto-incrementकि एक वास्तविक विकल्प है। मैं इसे प्रलेखन में नहीं ढूँढ सकता । इस समस्या के लिए दो MySQL बग्स में से कोई भी इसका उल्लेख नहीं करता है: 20786 , 30957 । Mysqldump के किस संस्करण में यह विकल्प है?
रिच

1
--skip-auto-incrementअगर सही से याद है तो MySQL GUI Tools में एक विकल्प जोड़ा जाता है। (यकीन नहीं ^ ^) तो वास्तव में यह वास्तव में एक समाधान नहीं है! लेकिन दूसरी इनलाइन कमांड सही है, मैंने इसे यहां स्थापित किया है, जहां विषय ऑटोइन्क्रिमेंट मुद्दे पर बात कर रहा है , और sedफ़िल्टरिंग का विचार प्रदान करता है !
जोव्ड

4
यदि आप कई तालिकाओं का निर्यात करते हैं, तो केवल पिछले एक के बाद सेड का विकल्प सभी ऑटो वेतन वृद्धि को नहीं हटाएगा। इसके अलावा, --स्काइप-ऑटो-इन्क्रीमेंट एक मौजूदा विकल्प नहीं है। इस उत्तर को इतना उच्च दर्जा कैसे दिया गया?
लेक्स

3
आपको अपने sed कमांड के अंत में ag की आवश्यकता है: सभी घटनाओं को बदलने के लिए sed 's /../.../ g'।
p91paul

यह आदेश सही नहीं है। -स्काइप-ऑटो-इंक्रीमेंट मौजूद नहीं है। रेगेक्स सही नहीं है। जैसा कि p91paul ने उल्लेख किया कि सभी घटनाओं को बदलने के लिए जी संशोधक को जोड़ना होगा। इसके बजाय @ जॉन समाधान का उपयोग करें।
एलेक्सी गाबी

52

JoDev का जवाब मेरे लिए पूरी तरह से एक नियमित समायोजन के साथ काम करता है जो सीड रेगुलर एक्सप्रेशन के लिए है:

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql

1
हाँ, मुझे यकीन नहीं है कि \bयह सेड स्टेटमेंट के भीतर क्या करता है, लेकिन @ JohnW के सुझाव के अनुसार, उस स्विच को हटाने से मेरे लिए भी चाल चली जाती है।
डेविड

4

यह --create- विकल्प है, जो डिफ़ॉल्ट रूप से --opt के साथ शामिल है, जो AUTO_INCREMENT तालिका परिभाषा उत्पन्न करता है।

यदि आप केवल बेस टेबल चाहते हैं,

mysql -hlocalhost -uuser -ppass --skip-column-names --batch \
    -e "select table_name from tables where table_type = 'BASE TABLE' and table_schema = 'schemaname'" INFORMATION_SCHEMA \
| xargs mysqldump -hlocalhost -uuser -ppass \
    --no-data --skip-triggers --skip-opt --no-create-db \
    schemaname

यदि आप विचार, ट्रिगर और दिनचर्या चाहते हैं,

mysqldump -hlocalhost -uuser -ppass \
    --skip-opt --events --routines --no-data \
    schemaname

3
नोट यह भी किसी भी ऑटो वेतन वृद्धि के मैदान, चला जाता है कि drop tableहै, वर्ण सेट, आदि
Deanna

2

इस पोस्ट के लिए धन्यवाद, मैं अपने प्रश्न का उत्तर देने में सक्षम था:

मैं अपने db पर संस्करण नियंत्रण कैसे कर सकता हूं?

फिर मैंने यह स्क्रिप्ट बनाई: db_bkp.sh

#!/bin/sh
filename="db_structure.sql"
backupfolder="/var/www/"
fpath="$backupfolder/$filename"
usr="DBUSER"
pass="DBPASS"
db="DBNAME"
mysqldump --user=$usr --password=$pass --no-data $db | sed 's/ AUTO_INCREMENT=[0-9]*//g' > "$fpath"

फिर मैंने इसे कोंट्राब में जोड़ा:

30 5 * * * sh /home/scripts/db_bkp.sh

फिर मेरे रेपो में, मैंने परिणाम जोड़ा, db_structure.sqlगिट करने के लिए और परिवर्तन से पहले मैं हमेशा जाँच करता हूं कि क्या कोई संरचनात्मक परिवर्तन है जो मैं सभी डीबीएस पर करना भूल गया हूं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.