हम अपने डेटाबेस स्कीमाटा को 5 अलग-अलग प्रतिष्ठानों (उत्पादन, स्टेजिंग और कुछ विकास प्रतिष्ठानों) में सिंक्रनाइज़ करने के लिए bcwoord के समान कुछ उपयोग करते हैं, और संस्करण नियंत्रण में बैक अप लेते हैं, और यह बहुत अच्छी तरह से काम करता है। मैं थोड़ा सा विस्तार करूंगा:
डेटाबेस संरचना को सिंक्रनाइज़ करने के लिए, हमारे पास एक ही स्क्रिप्ट, update.php है, और 1.sql, 2.sql, 3.sql, आदि की संख्या वाली कई फ़ाइलें हैं। स्क्रिप्ट वर्तमान संस्करण संख्या को संग्रहीत करने के लिए एक अतिरिक्त तालिका का उपयोग करती है डेटाबेस। N.sql फ़ाइलों को डेटाबेस द्वारा संस्करण (एन -1) से संस्करण एन तक जाने के लिए हाथ से तैयार किया जाता है।
उन्हें टेबल जोड़ने, कॉलम जोड़ने, पुराने से डेटा को नए कॉलम प्रारूप में माइग्रेट करने के लिए इस्तेमाल किया जा सकता है, फिर कॉलम ड्रॉप करें, "मास्टर" डेटा पंक्तियों जैसे कि उपयोगकर्ता प्रकार आदि डालें। असल में, यह कुछ भी कर सकता है, और उचित डेटा के साथ माइग्रेशन स्क्रिप्ट्स आप कभी भी डेटा खो देंगे नहीं।
अद्यतन स्क्रिप्ट इस तरह काम करती है:
- Connect to the database.
- Make a backup of the current database (because stuff will go wrong) [mysqldump].
- Create bookkeeping table (called _meta) if it doesn't exist.
- Read current VERSION from _meta table. Assume 0 if not found.
- For all .sql files numbered higher than VERSION, execute them in order
- If one of the files produced an error: roll back to the backup
- Otherwise, update the version in the bookkeeping table to the highest .sql file executed.
सबकुछ स्रोत नियंत्रण में जाता है, और प्रत्येक इंस्टॉलेशन में एक स्क्रिप्ट निष्पादन के साथ नवीनतम संस्करण में अपडेट करने के लिए एक स्क्रिप्ट होती है (उचित डेटाबेस पासवर्ड आदि के साथ update.php को कॉल करना)। हम एक स्क्रिप्ट के माध्यम से एसवीएन अद्यतन स्टेजिंग और उत्पादन वातावरण अद्यतन करते हैं जो स्वचालित रूप से डेटाबेस अद्यतन स्क्रिप्ट को कॉल करता है, इसलिए एक कोड अद्यतन आवश्यक डेटाबेस अद्यतनों के साथ आता है।
हम स्क्रैच से पूरे डेटाबेस को फिर से बनाने के लिए एक ही स्क्रिप्ट का उपयोग भी कर सकते हैं; हम बस डेटाबेस को छोड़कर फिर से बनाते हैं, फिर स्क्रिप्ट चलाएं जो पूरी तरह से डेटाबेस को दोबारा बदल देगा। हम स्वचालित परीक्षण के लिए खाली डेटाबेस को पॉप्युलेट करने के लिए स्क्रिप्ट का भी उपयोग कर सकते हैं।
इस प्रणाली को स्थापित करने में केवल कुछ घंटे लग गए, यह अवधारणात्मक रूप से सरल है और सभी को संस्करण संख्याकरण योजना मिलती है, और संशोधनों को मैन्युअल रूप से निष्पादित या मैन्युअल रूप से निष्पादित किए बिना डेटाबेस डिज़ाइन को आगे बढ़ाने और विकसित करने की क्षमता रखने में अमूल्य रहा है। सभी डेटाबेस पर।
Beware when pasting queries from phpMyAdmin though! Those generated queries usually include the database name, which you definitely don't want since it will break your scripts! Something like CREATE TABLE mydb
.newtable
(...) will fail if the database on the system is not called mydb. We created a pre-comment SVN hook that will disallow .sql files containing the mydb
string, which is a sure sign that someone copy/pasted from phpMyAdmin without proper checking.