वास्तविकता यह है कि हम जो चाहते हैं वह यह है: http://www.liquibase.org/
लिकिबेज एक खुला स्रोत (अपाचे 2.0 लाइसेंस प्राप्त) है, जो डेटाबेस परिवर्तनों को ट्रैक करने, प्रबंधित करने और लागू करने के लिए डेटाबेस-स्वतंत्र पुस्तकालय है। यह एक सरल आधार पर बनाया गया है: सभी डेटाबेस परिवर्तनों को एक मानव पठनीय अभी तक ट्रैक करने योग्य रूप में संग्रहीत किया जाता है और स्रोत नियंत्रण में जांच की जाती है।
हालाँकि हमारी विकास प्रक्रिया इसका समर्थन नहीं करती है। हम आम तौर पर असतत स्क्रिप्ट के माध्यम से डेटाबेस को संशोधित नहीं करते हैं जो हम खुद लिखते हैं, हम उन प्लगइन्स का उपयोग करते हैं जिन्हें हम सक्रिय करते हैं। हम लुक-अप डेटा को संशोधित करने के लिए DML स्क्रिप्ट नहीं लिखते हैं जो हम तब सोर्स कोड कंट्रोल में जांचते हैं, हम एडमिन पेज पर UI का उपयोग करते हैं और इसलिए माइग्रेशन के दौरान उस परिवर्तन को दोहराने के लिए बाद में उपयोग के लिए कोई सोर्स कोड नहीं होता है।
हालाँकि, हम इसका कुछ अनुकरण कर सकते हैं - इस पृष्ठ पर सूचीबद्ध कुछ उपकरणों का उपयोग करते हुए:
/programming//q/225772/149060
उदाहरण के लिए, लिक्विडबेस में एक अलग विशेषता होती है जो डेटा में परिवर्तन को वैकल्पिक रूप से शामिल करती है। हम संभावित रूप से, स्कीमा और डेटा को स्क्रिप्ट में अलग कर सकते हैं, परीक्षण डेटा (यानी पोस्ट, आदि) को शामिल करने की संभावना वाले कुछ तालिकाओं को छोड़कर (संभव के रूप में) और फिर स्क्रिप्ट को उत्पादन डेटाबेस में लागू करते हैं।
MySQLDiff (StackOverflow प्रश्न पर चर्चा) स्कीमा भिन्न होता है, और यह लेखक मेज-वार डेटा भिन्नता के लिए mysql_coldiff की सिफारिश करता है - दोनों पर्ल में लागू होते हैं, यदि जावा उपकरण (लिक्विडबेस आपके सर्वर के लिए बहुत अधिक संसाधन हैं - हालांकि दोनों डेटाबेस को स्थानीय रूप से लाएं और अपने पीसी पर उपकरण चलाने से समस्या हल हो जाती है ...
यदि हम वास्तव में इसे सही करना चाहते हैं, तो हमें किसी भी sql को लॉग इन करना चाहिए जो सेटिंग्स, विकल्प, या अन्य कॉन्फ़िगरेशन परिवर्तन से संबंधित हो, और कोई स्कीमा परिवर्तित हो - और लॉग कोड को माइग्रेशन स्क्रिप्ट में परिवर्तित करके हमारे उत्पादन सर्वर के विरुद्ध खेलने के लिए परिवर्तित करें। सर्वर के खिलाफ माइग्रेशन स्क्रिप्ट खेलें, वर्डप्रेस साइट फ़ाइलों (अपलोड को छोड़कर, यदि लागू हो) को कॉपी करें और हम सोने हैं।
तो, यह मुझे लगता है, कि सबसे अच्छा तरीका है, एक डेवलपर का माइग्रेशन-बिल्डर-प्लगइन है जो हमें ज़रूरत पड़ने पर एसक्यूएल को फँसाता है, इसे संग्रहीत करता है और फिर लॉग इन कोड से एक माइग्रेशन स्क्रिप्ट उत्पन्न करता है, बजाय डेटाबेस मर्ज करने का एक तरीका बनाने के लिए मचान और उत्पादन के बीच। एक सरल समस्या भी हल करने के लिए लगता है।
अगर हम प्रेरणा के लिए @bueltge के इंस्ट्रूमेंट हुक कॉल्स प्लगइन के कोड को देखते हैं: https://gist.github.com/1000143 (SAVEQUERIES और शटडाउन हुक की दिशा में मुझे इंगित करने के लिए G + के माध्यम से रॉन रेनिक के लिए धन्यवाद), मुझे इसे खोजने के लिए नेतृत्व)
- इसके बजाय SAVEQUERIES आउटपुट प्राप्त करने के लिए इसे बदल दें
- एडमिन में रहते हुए ही चलाएं
- सभी चयनों को फ़िल्टर करें
- शटडाउन हुक में तालिका के लिए परिणाम सहेजें
- इस समय हम जो कर रहे थे, उसके आधार पर हम आउटपुट ट्रैपिंग को चुन सकते हैं।
उदाहरण के लिए:
कैप्चर नाम: प्लगिन XYZ को सक्रिय और कॉन्फ़िगर करें
कैप्चर स्टेट टॉगल - ऑन
... प्लगइन स्थापित करें और कॉन्फ़िगर करें XYZ
कैप्चर स्टेट टॉगल - ऑफ
निर्यात माइग्रेशन स्क्रिप्ट के लिए: सक्रिय करें और प्लगइन XYZ कॉन्फ़िगर करें
प्रेस एक्सपोर्ट बटन - फ़िल्टर किए गए एसक्यूएल के साथ पॉपअप टेक्स्ट फ़ील्ड का उत्पादन करने के लिए - आदर्श रूप से पूर्व-स्वरूपित एक शेल स्क्रिप्ट के रूप में कमांड लाइन कॉल के साथ mysql। इसे अपने माइग्रेशन कोड फ़ोल्डर में कॉपी और पेस्ट करें और अपने सोर्स कोड रिपॉजिटरी में जोड़ें।
ध्यान रखें कि जब आप काम कर रहे हों, तब कैप्चर पर ध्यान दें और आप अपने उत्पादन डेटाबेस को अपने स्टेजिंग डेटाबेस के बराबर कॉन्फ़िगरेशन में ले जाने के लिए सही माइग्रेशन स्क्रिप्ट उत्पन्न कर पाएंगे।
क्या बेहतर है, आपके पास एक स्क्रिप्ट (या उसी की श्रृंखला) होगी जिसे आप टेस्ट कर सकते हैं। नकल करने योग्य, परीक्षण करने योग्य, माइग्रेशन स्क्रिप्ट !!
मैं पहले से ही प्यार में हूँ।
कोई और?