2008-10-22 15 views
9

मैं वर्तमान में एक ऐसी कंपनी के लिए काम कर रहा हूं जिसमें एक वेबसाइट है जो mysql/php चल रही है (सभी टेबल भी MYISAM तालिका प्रकार का उपयोग कर रहे हैं)।mysql प्रतिकृति - टेबल लॉकिंग?

हम प्रतिकृति को कार्यान्वित करना चाहते हैं, लेकिन मैंने इंटरनेट पर MySQL दस्तावेज़ों और अन्य जगहों में पढ़ा है कि यह बाइनरी लॉग (जो दास डीबीएस अंततः पढ़ेगा) को लिखते समय टेबल लॉक कर देगा।

क्या ये ताले लाइव साइट पर एक समस्या का कारण बनेंगे जो काफी लिखने वाला है? साथ ही, टेबल को लॉक किए बिना प्रतिकृति को सक्षम करने का कोई तरीका है?

उत्तर

6

यदि आप अपनी टेबल प्रकार को innodb में बदलते हैं, तो पंक्ति स्तर लॉकिंग का उपयोग किया जाता है। साथ ही, आपकी प्रतिकृति अधिक स्थिर हो जाएगी, क्योंकि अपडेट लेन-देन होंगे। माईसाम प्रतिकृति एक दीर्घकालिक दर्द है।

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

इसके अलावा, सुनिश्चित करें कि आप InnoDB के लिए उपयुक्त ऑटोएक्स्टेंड विकल्प का उपयोग करें। और, जब आप इसमें हों, तो आप शायद फ्लोट से दोबारा माइग्रेट करना चाहते हैं और 'दशमलव' से डबल (जिसका अर्थ है MySQL 5.1।) जो आपको कुछ प्रतिकृति सिरदर्द बचाएगा।

शायद यह आपके लिए पूछे जाने से थोड़ा अधिक है। का आनंद लें।

पी।, हाँ myisam ताले समस्याएं पैदा कर सकते हैं। इसके अलावा, innisb myisam से धीमा है, जब तक कि myisam एक विशाल चयन के लिए अवरुद्ध कर रहा है।

+0

ओह, कुछ एसक्यूएल हो सकते हैं जो आप मास्टर पर प्रतिकृति को बंद करने के लिए निष्पादित कर सकते हैं, फिर राज्य को दासों पर तब तक मतदान करें जब तक वे पकड़ न जाएं, फिर उन्हें बंद कर दें। – Chris

0

myisam तालिका प्रकार के साथ समाधान 'बेहतर' नहीं है। हालांकि, आप इसके साथ प्राप्त कर सकते हैं।

सबसे अच्छा आप कर सकते हैं, यह सुनिश्चित कर लें कि आपके दास और मास्टर एक ही हार्डवेयर पर चलते हैं (एफपीयू मतभेद प्रतिकृति त्रुटियां बना सकते हैं), साथ ही यह सुनिश्चित कर लें कि आप अपने MySQL सर्वर पर समान संस्करण संख्याएं चला रहे हैं।

निम्नलिखित लिंक आपके प्रश्नों का उत्तर देते हैं। विशेष रूप से, माईसाम टेबल में लॉक में लिखने की संभावना कम होती है यदि कोई डिलीट नहीं चल रहा है। तो एक सारणी जिसमें इसमें छेद हटाना नहीं है, एक प्रतिकृति सेटअप में तेज़ी से प्रदर्शन करेगा।

http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html

आप द्वारा 'छेद' के प्रभाव को कम कर सकते हैं एक डीबीए निर्यात/अनुसूचित टाइम के दौरान आयात समय-समय पर है (विशेष रूप से के बाद बड़े पैमाने हटा देता है।) इसके अलावा, सुनिश्चित करें कि आपके दास डेटाबेस के साथ नीचे जाना नहीं है मास्टर अभी भी चल रहा है। इससे आपको कई, कई मुद्दों को बचाया जाएगा।

+0

दरअसल, एफपीयू अंतर प्रतिकृति त्रुटियां भी innodb के साथ हो सकती हैं, कोई भी टेबल कॉलम जो फ्लोट या डबल का उपयोग करता है। आप जो सटीक त्रुटि देखेंगे (एक हजारों बार में से एक,) कॉलम चौड़ाई अंतर त्रुटि है। – Chris

4

मेरे अनुभव में एक लेखन-भारी साइट डीबीए करना, बाइनरी लॉग लिखना मास्टर पर लॉकिंग या प्रदर्शन के साथ कोई समझदार समस्या नहीं जोड़ता है। यदि आप इसे बेंचमार्क करना चाहते हैं, तो बस बाइनरी लॉगिंग चालू करें। मुझे सच में नहीं लगता कि बाइनरी लॉग में प्रश्न लिखने के लिए टेबल लॉक हैं।

दास पर तालिका लॉकिंग एक और बात है, हालांकि। प्रतिकृति धारावाहिक है: दास अगले भाग को चलाने से पहले प्रत्येक क्वेरी पूरा होने तक चलता है। इतने लंबे अपडेट अस्थायी रूप से प्रतिकृति के कारण गिरने का कारण बनेंगे। यदि आपका आवेदन स्केल-आउट के लिए प्रतिकृति का उपयोग करने का इरादा रखता है, तो उसे यह जानने की आवश्यकता है कि इसे कैसे समायोजित किया जाए।