2012-06-01 19 views
13

मेरे पास MyISAM तालिकाओं के साथ एक MySQL मास्टर-गुलाम (ओं) प्रतिकृति है। मास्टर पर सभी अपडेट किए जाते हैं और मास्टर या दासों पर चयन किया जाता है।mysql - ताले प्रतिकृति पर प्रचार करते हैं?

ऐसा प्रतीत होता है कि जब हम कुछ अपडेट करते हैं तो हमें कुछ तालिकाओं को मैन्युअल रूप से लॉक करने की आवश्यकता हो सकती है। जबकि यह लिखना ताला टेबल पर है, लॉक टेबल पर कोई भी चयन नहीं हो सकता है। लेकिन गुलामों के बारे में क्या? क्या ताला फैलता है?

कहें कि मेरे पास table_A और table_B है। मैंने मास्टर पर table_A और table_B पर लॉक शुरू किया है और अपडेट करना शुरू कर दिया है। इस समय मास्टर से table_A और table_B कोई अन्य कनेक्शन नहीं पढ़ सकता है? लेकिन क्या होगा यदि इस समय एक और कनेक्शन गुलाम के टेबल को पढ़ने की कोशिश करता है, तो क्या वे ऐसा कर सकते हैं?

+1

हाय एडम, क्या आपको इसका उत्तर मिला? – davide

+2

टेबल लॉक से बचने के लिए यह InnoDB पर जाने के लिए एक तर्क है। –

उत्तर

2

माइक्रोसॉफ्ट प्रतिलिपि बनाने वाली हर चीज बाइनरी लॉग में पाई जा सकती है।

विवरण देखने के लिए आप निम्न आदेश चला सकते हैं।

show global variables like 'log_bin%'; 

log_bin_basename आपको बेस फ़ाइल नाम के साथ अपने बाइनरी लॉग का मार्ग बताएगा।

और चलाने

show binary logs 

बाइनरी फ़ाइलें है कि वर्तमान में अपने सर्वर पर मौजूद हैं खोजने के लिए।

आप फ़ाइल नाम के साथ mysqlbinlog कमांड का उपयोग कर फ़ाइल में लिखे गए वास्तविक आदेशों को देख सकते हैं या MySQL CLI से show binlog events ... चलाकर।

इसके अलावा, जांचें कि आप किस binlog_format का उपयोग कर रहे हैं।

असल में - तालिकाओं का ताला सीधे दासों के लिए प्रचारित नहीं होता है, लेकिन उस समय, मट्ठा प्रदर्शन किए गए अपडेट निष्पादित करेगा, यदि आवश्यक हो तो वे अद्यतन तालिका का लॉक करेंगे।

0

जहां तक ​​मुझे पता है कि लिखने वाले ताले बिनोगॉग में प्रचार नहीं करते हैं, तो आप त्वरित परीक्षण करके और बिनलॉग को देखकर सत्यापित कर सकते हैं। यदि आप मास्टर पर भी मुद्दों से बचना चाहते हैं और किसी कारण से InnoDB पर माइग्रेट नहीं कर सकते हैं तो तालिका को पूरी तरह से लॉक करने के बजाय अपने एप्लिकेशन में GET_LOCK() को एकीकृत करने पर विचार करें। जब यह समेकन की बात आती है तो माईसाम काफी iffy है।