2011-08-06 10 views
5

मैं थोड़ा उलझन को साफ़ करना चाहता हूं। मेरे पास एक मास्टर + दास सेटअप है। मेरे पास एक मास्टर है, और 3 दास हैं। सभी लिखते हैं (INSERT|UPDATE|DELETE) मास्टर जाओ। सभी पढ़ते हैं (SELECT) दासों में से एक पर जाएं, जिसे यादृच्छिक रूप से चुना जाता है। मेरी सभी टेबल इनो डीबी स्टोरेज इंजन का उपयोग कर रही हैं।लेनदेन और मास्टर + दास प्रतिकृति

मुझे उत्सुकता है कि MySQL/InnoDB इस सेटअप में लेन-देन कैसे प्रबंधित करता है। यदि MySQL लेनदेन के भीतर प्रत्येक परिवर्तन को binlog पर लिखता है, तो सभी ठीक होना चाहिए। हालांकि, अगर लेन-देन पूरा होने तक बिनलॉग लिखा नहीं जाता है तो मैं कुछ बड़ी समस्याएं देख सकता हूं।

कोई भी बता सकता है कि लेनदेन के दौरान माइक्रोसॉफ्ट के भीतर क्या हो रहा है, प्रतिकृति के साथ?

उत्तर

0

आम तौर पर, यदि लेनदेन बाइनरी लॉग तक लिखा नहीं जाता है, तब तक यह नहीं किया जाता है। तालिका मानना ​​लेनदेन है, लेनदेन में सभी बयान एक BEGIN \ COMMIT कथन में एकत्रित किए जाते हैं।

0

this के अनुसार, दास लेनदेन के बाद केवल परिवर्तन देख सकते हैं।

मास्टर पर असफल लेनदेन प्रतिकृति को प्रभावित नहीं करते हैं। MySQL प्रतिकृति बाइनरी लॉग पर आधारित है जहां MySQL SQL स्टेटमेंट लिखता है जो डेटा को संशोधित करता है। एक लेनदेन जो विफल रहता है (उदाहरण के लिए, विदेशी कुंजी उल्लंघन के कारण, या क्योंकि इसे वापस लुढ़काया जाता है) बाइनरी लॉग में नहीं लिखा जाता है, इसलिए इसे दासों को नहीं भेजा जाता है।

और this पुष्टि करता है:

द्विआधारी लॉग दुर्घटना सुरक्षित है। केवल पूर्ण घटनाएं या लेनदेन लॉग या वापस पढ़े जाते हैं।