डेटाबेस संस्करण नियंत्रण और तैनाती के लिए समाधान?


11

वर्तमान में मैं एक डंप स्क्रिप्ट का उपयोग करता हूं और डेटाबेस को git repo के लिए प्रतिबद्ध करता हूं। --skip-extended-insert --skip-comments --skip-dump-dateइसका मतलब है कि एक बदलाव मुझे जो कुछ बदल गया है उसका एक उचित विचार दे सकता है, लेकिन अगर मैं विलय करने की कोशिश करता हूं तो यह सब गिर जाता है।

WP_SITEURL, WP_HOME और अन्य सभी स्थानों पर Wordpress के स्टोर में पूर्ण URLs को किसी अन्य होस्ट (परीक्षण, स्टेजिंग, उत्पादन) के लिए आयात करते समय अपडेट करने की आवश्यकता होती है

क्या कोई बेहतर विधि का उपयोग कर रहा है?

मुख्य मुद्दे:

  • डेटाबेस (गैर-पोर्टेबल) के माध्यम से वर्डप्रेस सभी पूर्ण URL संग्रहीत करता है
  • बहुत सारे, गैर-प्रासंगिक रिकॉर्ड बदल जाते हैं
    • auto_increment मान (मैं अभी इनको हटाता हूं, लेकिन आईडी समस्याओं में चला गया है)
    • टाइमस्टैम्प (संभावित रूप से स्ट्रिप आउट भी कर सकते हैं)
    • क्षणिक * रिकॉर्ड ... पता नहीं उनके साथ क्या करना है

एक प्रक्रिया जिसने टाइमस्टैम्प्ड माइग्रेशन बनाया, केवल जोड़े या हटाए गए चीजों के साथ आदर्श होगा ... लेकिन मुझे यकीन नहीं है कि क्या यह संभव है?


क्या आप सभी डेटा परिवर्तन या केवल संरचना में परिवर्तन करना चाहते हैं ? और वह आपका असली बिजनेस-टस्क है?
आलसी बेजर

सीएमएस जैसे वर्डप्रेस में परिवर्तन करते समय, अक्सर सामग्री और कॉन्फ़िगरेशन (डीबी डेटा) के साथ-साथ लॉजिक (कोड) में बदलाव होते हैं। मैं दोनों को संस्करण देना चाहूंगा। संरचना परिवर्तन एक अच्छी शुरुआत होगी ... बिजनेस टिकट: ग्राहक नए विजेट के लिए पूछता है। स्टेजिंग सर्वर पर प्लगइन स्थापित करें, रेपो के लिए प्रतिबद्ध -> प्लगइन को कॉन्फ़िगर करें और नमूना सामग्री जोड़ें -> एक बार अनुमोदित होने के बाद, उत्पादन में कोड परिवर्तन करें, फिर उत्पादन व्यवस्थापक में मैन्युअल रूप से समान डेटा परिवर्तन करें।
जैकब डोरमैन

1
@JacobDorman मैं इसी सटीक समस्या को हल करने की कोशिश कर रहा हूं। क्या आपने अभी तक कुछ काम किया है? कुछ शोध के बाद मैं कुछ कस्टम प्लगइन के बारे में सोचना शुरू कर रहा हूं जो एक विशिष्ट अपडेट स्क्रिप्ट बनाता है क्रम में है (शायद केवल कॉन्फ़िगरेशन परिवर्तन जैसे इंस्टॉल किए गए प्लगइन्स, और कॉन्फ़िगरेशन विकल्प निर्यात करने के लिए - और जरूरी नहीं कि पोस्ट, श्रेणियां और सामान्य रूप से सामग्री) । यदि आपके पास कोई अन्य विचार है तो सुनना अच्छा लगेगा।
विक्टर लूपेज़ गार्सिया

जवाबों:


4

यहां दो संभावित समाधान दिए गए हैं, ये दोनों वास्तव में सामान्य MySQL संस्करण नियंत्रण उपकरण हैं, लेकिन आपके वर्कफ़्लो के लिए अनुकूलित किए जा सकते हैं:

dbv.php

यह उपकरण डेटाबेस में पाए गए परिवर्तनों से "माइग्रेशन" बनाता है, जो मूल रूप से SQL स्क्रिप्ट हैं। इन लिपियों को एक स्थानीय निर्देशिका में संग्रहीत किया जाता है और इस प्रकार आपके वर्तमान वीसीएस (उदाहरण के लिए, गिट) में भेजा जा सकता है।

इसका उपयोग PHP वेब इंटरफेस के माध्यम से किया जाता है।

DBVC

फंडामेंटल रूप से पिछले टूल के समान, यह कमांड लाइन इंटरफेस पर आधारित है। यह एक json फ़ाइल के माध्यम से कॉन्फ़िगर किया गया है। मुख्य अंतर यह है कि यह माइग्रेशन फ़ाइलों को ऑटो-जेनरेट नहीं करता है।

पिछले समान के साथ इसे एकीकृत करने के लिए एक लंबित मुद्दा है, इसलिए यह देखने के लिए कुछ है।

वर्डप्रेस प्लगइन्स

कुछ प्लगइन्स जो एक दोहराने योग्य वर्कफ़्लो के निर्माण में सहायता कर सकते हैं:


dbvc उस उपकरण की तरह दिखता है जिसे मैं खोज रहा था। धन्यवाद!
जैकब डोरमैन

1
मुझे खुशी है कि इसने मदद की। मुझे सिर्फ एक और दिलचस्प उपकरण मिला है, इसे थोड़ी देर में अपडेट नहीं किया गया है, लेकिन यह एक लूट लेने लायक हो सकता है: github.com/idler/MMP
Víctor López García

@JacobDorman DBVC के साथ, क्या आप विभिन्न वातावरणों से DB परिवर्तनों को सफलतापूर्वक मर्ज करने में सक्षम हैं? मैंने अपनी खुद की एक रणनीति बनाई है , लेकिन क्या DBVC अपडेट फ़ाइलों का उत्पादन करता है या क्या आपको एसक्यूएल डंप्स के बीच mysqldiff जैसी किसी चीज़ का उपयोग करना है ? मैं इस उपकरण को उपयोगी होने की छवि नहीं दे सकता जब तक कि यह एसक्यूएल अंतर पैदा करने में मदद नहीं करता है जो वास्तव में तुलनीय हैं, विशेष रूप से अलग-अलग लाइनों पर INSERT स्टेटमेंट ... हालांकि मुझे लगता है कि इससे निपटने के लिए एक फाइल को संपादित किया जा सकता है ...
स्पेंसर विलियम्स

@SpencerWilliams मैं DBVC का उपयोग करके समाप्त नहीं हुआ (और mysqldiff का उपयोग नहीं किया है), लेकिन फिर भी संस्करण नियंत्रण में db डंप जोड़ते हैं ... मैं वास्तव में उन्हें ज्यादातर मामलों में विलय के रूप में नहीं देखता हूं, लेकिन तुलना से परे का उपयोग कर अलग करने में मदद कर सकता हूं। परिवर्तन और मुद्दे।
जैकब डोरमैन

@victor मैंने MMP की जाँच की। यह स्कीमा बदलता है, लेकिन डेटा भिन्न / आवेषण नहीं करता है।
डेविड सिल्वा स्मिथ

2

मैं MYSQL पर कर रहा हूँ।

यह सभी टेबल स्कीमा और डेटा को अपनी फ़ाइल में रखता है ताकि मैं आसानी से देख सकूं कि क्या बदल गया है।

इस थ्रेड के अन्य समाधानों के विपरीत इस समाधान को डेटा मिलता है, जो कि सीएमएस के लिए महत्वपूर्ण है।

यह समाधान किसी भी उपकरण का उपयोग नहीं करता है, बस एक कमांड लाइन स्क्रिप्ट।

संपादित करें: मैंने पाया कि मेरे पुराने कोड में एक बग था जहां आयात आदेश महत्वपूर्ण था। --compactझंडे को उतारना बग को ठीक करता है।

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

पुराना कोड

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

और यहाँ आयात करने का तरीका बताया गया है

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.