2016 संपादित करें: हमने हाल ही में (अगस्त 2016) gh-ost
. जारी किया है , इसे प्रतिबिंबित करने के लिए मेरे उत्तर को संशोधित करना।
आज ऐसे कई उपकरण हैं जो आपको MySQL के लिए ऑनलाइन परिवर्तन तालिका करने की अनुमति देते हैं। ये हैं:
- 2016 संपादित करें: gh-ost :GitHub का ट्रिगरलेस स्कीमा माइग्रेशन टूल (अस्वीकरण:मैं इस टूल का लेखक हूं)
- oak-online- परिवर्तन तालिका , ओपनर्क-किट . के भाग के रूप में (अस्वीकरण:मैं इस टूल का लेखक हूं)
- pt-online-schema- बदलें , पेरकोना टूलकिट . के भाग के रूप में
- फेसबुक का ऑनलाइन स्कीमा परिवर्तन MySQL के लिए
आइए "सामान्य" `वैकल्पिक तालिका` पर विचार करें:
एक बड़ी तालिका को ALTER
में लंबा समय लगेगा . innodb_buffer_pool_size
महत्वपूर्ण है, और इसी तरह अन्य चर भी हैं, लेकिन बहुत बड़ी मेज पर वे सभी नगण्य हैं। इसमें बस समय लगता है।
MySQL ALTER
के साथ क्या करता है एक तालिका नए प्रारूप के साथ एक नई तालिका बनाने के लिए है, सभी पंक्तियों की प्रतिलिपि बनाएँ, फिर स्विच करें। इस दौरान टेबल पूरी तरह से बंद रहती है।
अपने स्वयं के सुझाव पर विचार करें:
यह संभवतः सभी विकल्पों में से सबसे खराब प्रदर्शन करेगा। ऐसा क्यों है? क्योंकि आप एक InnoDB तालिका का उपयोग कर रहे हैं, INSERT INTO tablename_tmp SELECT * FROM tablename
लेन-देन करता है। एक विशाल लेन-देन। यह सामान्य से भी अधिक भार पैदा करेगा ALTER TABLE
।
इसके अलावा, आपको उस समय अपना आवेदन बंद करना होगा ताकि यह न लिखे (INSERT
, DELETE
, UPDATE
) अपनी मेज पर। अगर ऐसा होता है - आपका पूरा लेन-देन व्यर्थ है।
ऑनलाइन टूल क्या प्रदान करते हैं
उपकरण सभी एक जैसे काम नहीं करते हैं। हालांकि, मूलभूत बातें साझा की जाती हैं:
- वे परिवर्तित स्कीमा के साथ एक "छाया" तालिका बनाते हैं
- वे मूल तालिका से भूत तालिका में परिवर्तनों को प्रसारित करने के लिए ट्रिगर बनाते हैं और उनका उपयोग करते हैं
- वे धीरे अपनी तालिका से सभी पंक्तियों को छाया तालिका में कॉपी करें। वे इसे विखंडू में करते हैं:कहते हैं, एक बार में 1,000 पंक्तियाँ।
- जब तक आप मूल तालिका तक पहुंचने और उसमें हेरफेर करने में सक्षम होते हैं, तब तक वे उपरोक्त सभी कार्य करते हैं।
- संतुष्ट होने पर, वे
RENAME
. का उपयोग करते हुए, दोनों की अदला-बदली करते हैं ।
ओपनर्क किट उपकरण अब 3.5 वर्षों से उपयोग में है। Percona टूल कुछ महीने पुराना है, लेकिन संभवतः पूर्व की तुलना में अधिक परीक्षण किया गया है। कहा जाता है कि फेसबुक का टूल फेसबुक के लिए अच्छा काम करता है, लेकिन औसत उपयोगकर्ता को सामान्य समाधान प्रदान नहीं करता है। मैंने खुद इसका इस्तेमाल नहीं किया है।
2016 संपादित करें: gh-ost
एक ट्रिगरलेस समाधान है, जो मास्टर पर मास्टर राइट-लोड को काफी कम करता है, माइग्रेशन राइट लोड को सामान्य लोड से अलग करता है। यह श्रव्य, नियंत्रणीय, परीक्षण योग्य है। हमने इसे आंतरिक रूप से GitHub पर विकसित किया है और इसे ओपन सोर्स के रूप में जारी किया है; हम अपने सभी उत्पादन माइग्रेशन gh-ost
. के माध्यम से कर रहे हैं आज। अधिक देखें यहां
।
प्रत्येक उपकरण की अपनी सीमाएँ होती हैं, दस्तावेज़ीकरण को ध्यान से देखें।
रूढ़िवादी तरीका
रूढ़िवादी तरीका एक सक्रिय-निष्क्रिय मास्टर-मास्टर प्रतिकृति का उपयोग करना है, ALTER
करें स्टैंडबाय (निष्क्रिय) सर्वर पर, फिर भूमिकाएँ बदलें और ALTER
करें फिर से जो सक्रिय सर्वर हुआ करता था, अब निष्क्रिय हो गया। यह भी एक अच्छा विकल्प है, लेकिन इसके लिए अतिरिक्त सर्वर और प्रतिकृति के गहन ज्ञान की आवश्यकता होती है।