2009-02-03 14 views
12

मैं एक MySQL डाटाबेस के लिए स्कीमा उत्पादन के लिए निम्न आदेश का उपयोग करें:mysqldump आउटपुट में जोड़े गए टेबल (AUTO_INCREMENT = N) के लिए पंक्ति गणना को कैसे दबाया जाए?

mysqldump --no-data --skip-add-drop-table 

मैं दो डेटाबेस तुलना करना चाहता हूं लिए यह कर देगा, और उसके बाद दो आउटपुट फाइलों diff। पर्यावरण के बीच डेटाबेस परिवर्तनों को ट्रैक करने का यह मेरा कच्चा तरीका है।

हालांकि, मेरे लिए एक छोटी सी असुविधा है कि प्रत्येक तालिका के लिए पंक्ति संख्या, टेबल परिभाषा के भाग के रूप में शामिल है AUTO_INCREMENT मूल्य के रूप में है, इसलिए की तरह है:

ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1; 

मुझे लगता है कि यह होगा कि '- -no-data 'ध्वज तालिका के बारे में किसी भी जानकारी को दबाएगा जो पंक्तियों की संख्या सहित डेटा का संदर्भ देता है।

मैं इस आउटपुट में AUTO_INCREMENT = N को कैसे दबा सकता हूं?

उत्तर

22

इस समस्या पर ticket देखें। यह रूप में बंद हो गया "ठीक नहीं होगा"

आप ऐसा कर सकता है, वैकल्पिक रूप से:

mysqldump --no-data --skip-add-drop-table my_database | sed 's/AUTO_INCREMENT=[0-9]*\b//' > database.dump 
+0

धन्यवाद, मेरी इच्छा है कि इस "महान उत्तर" को चिह्नित करने का कोई तरीका था क्योंकि यह वास्तव में वास्तविक बग रिपोर्ट आदि के संदर्भ पर विचार कर रहा है। ब्रावो और धन्यवाद! – Marcus

+0

अफसोस की बात यह आदेश केवल लिनक्स (और संभवतः ओएसएक्स) के लिए है। –

+0

बहुत अच्छा, धन्यवाद! –

1
mysqldump --no-data --skip-add-drop-table | grep -v AUTO_INCREMENT 

?

+0

खैर, AUTO_INCREMENT इंजन और CHARSET रूप में एक ही लाइन पर है, कोई अंतर है, जिसमें मैं करूंगा * * देखना चाहते हैं ... तो, मैं पूरी लाइन को छोड़ना नहीं चाहता हूं। फिर भी आपका धन्यवाद! – Marcus

1

काफी अनुसंधान और फेरबदल के बाद मैंने पाया कि विंडोज पर (Powershell उपलब्ध के साथ) आप कर सकते हैं ...

mysqldump -h SERVER -u USERNAME --password=PASSWORD -d DATABASE -C | powershell -Command "$input | ForEach-Object { $_ -replace \" AUTO_INCREMENT=\S+\", \"\" }"

बस इसे स्क्रीन करने के लिए मुद्रण के बजाय एक फ़ाइल में सहेजने के लिए समाप्त करने के लिए > output.txt जोड़ें।

0

(संपादित स्वीकार किए जाते हैं जवाब सही तरह से निश्चित रूप से है। उनके सही मन में कोई भी डिफ़ॉल्ट मान "AUTO_INCREMENT = 123" के साथ एक स्तंभ बनाता है)

एक ही सवाल के साथ संघर्ष, और संदर्भित पढ़ने समाधान को हल करने के बारे में टिकट चेतावनी, मैंने --xml आउटपुट को एक घुमावदार रूप दिया, और मैं नुकसान के बिना एक समाधान समाधान के साथ आया (उदाहरण के लिए कोई डिफ़ॉल्ट मान "AUTO_INCREMENT = 123" के साथ कॉलम बना रहा है, मुझे पता है , लेकिन अभी भी ...):

mysqldump \ 
    --xml \ 
    --compact \ 
    --no-data \ 
    mydb | 
xmlstarlet ed -d ' 
    //key/@Cardinality | 
    //options/@Rows | 
    //options/@Avg_row_length | 
    //options/@Data_length | 
    //options/@Auto_increment | 
    //options/@Index_length 
' | 
xmllint --format - 

मूल रूप से यह xmlstarlet का उपयोग करके कुछ मान हटा देता है जिसे मैंने अलग देखा (यहां तक ​​कि उसी डेटाबेस के लगातार डंप से भी)। एक एक्सएसएलटी स्टाइल शीट एक ही काम कर सकती है।

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <database name="mydb"> 
    <table_structure name="SomeTable"> 
     <field Field="foo" Type="int(12)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="bar" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="baz" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <key Table="AccessControlList" Non_unique="0" Key_name="PRIMARY" 
      Seq_in_index="1" Column_name="referenceID" Collation="A" Null="" 
      Index_type="BTREE" Comment="" Index_comment=""/> 
    <options Name="SomeTable" Engine="InnoDB" Version="10" Row_format="Compact" 
      Max_data_length="0" Data_free="0" Create_time="2012-09-11 15:31:11" 
      Collation="utf8_general_ci" Create_options="" Comment=""/> 
[...] 

(XML गुणधर्मों के बीच नई-पंक्तियों पठनीयता के लिए जोड़ा गया था, और वे xmllint उत्पादन में नहीं कर रहे हैं)

संबंधित मुद्दे