बाइनरी लॉगिंग के दो स्वरूपों से परिचित हैं। ए> , कथन-आधारित - जो वास्तविक प्रश्नों को लॉग करता है जो मास्टर पर डेटा को संशोधित करते हैं ताकि उन्हें दास पर निष्पादित किया जा सके, और पंक्ति-आधारित - जो वास्तविक पंक्ति डेटा के पहले और/या बाद की छवियों को लॉग करता है क्वेरी द्वारा बदला गया, ताकि स्लेव उन परिवर्तनों को सीधे अपने डेटा... और मिश्रित-मोड में लागू कर सके, जहां ऑप्टिमाइज़र और स्टोरेज इंजन यह निर्धारित करते हैं कि क्वेरी-दर-क्वेरी के आधार पर कौन सा प्रारूप इष्टतम प्रारूप है।पी>
आप जो कथन निष्पादित कर रहे हैं वह असुरक्षित है सैद्धांतिक रूप से क्योंकि आप INSERT ... SELECT
. का उपयोग कर रहे हैं एक ऑटो-इन्क्रीमेंट कॉलम वाली तालिका में। अगर कोई क्वेरी उस सामान्य रूप की STATEMENT
. में उपयोग किए गए थे -आधारित परिवेश, और SELECT
पंक्तियों को मास्टर और दास पर एक ही क्रम में वापस नहीं किया, पंक्तियों को एक अलग क्रम में चुना जा सकता है, और इस प्रकार विभिन्न ऑटो-वृद्धि मूल्यों के साथ समाप्त होता है।
व्यवहार में, विशिष्ट क्वेरी आप निष्पादित कर रहे हैं है नियतात्मक क्योंकि आप केवल एक पंक्ति सम्मिलित कर रहे हैं, और आप स्पष्ट रूप से स्वतः-वृद्धि मान निर्दिष्ट कर रहे हैं। मुझे संदेह है कि यह आपके भ्रम का कारण है। हालांकि, ऐसा प्रतीत होता है कि आप अभी भी चेतावनी ट्रिगर कर रहे हैं क्योंकि आप INSERT ... SELECT
कर रहे हैं एक ऑटो-इन्क्रीमेंट वाली तालिका में, और सर्वर क्वेरी के लिए सामान्यीकृत "असुरक्षित" निर्धारण को सिद्धांत के रूप में लागू करता प्रतीत होता है, न कि सटीकता के रूप में।
अपना binlog_format
स्विच कर रहा है करने के लिए MIXED
चेतावनी को दूर करना चाहिए, क्योंकि सर्वर अपने विवेक पर मोड स्विच कर सकता है ... और नकारात्मक साइड इफेक्ट होने की संभावना बहुत कम है। यदि यह इस तथ्य के लिए नहीं था कि STATEMENT
हमेशा डिफ़ॉल्ट रहा है (चूंकि शुरुआत में यह एकमात्र प्रकार की प्रतिकृति उपलब्ध थी), मुझे संदेह है कि उन्होंने MIXED
बनाया होगा डिफ़ॉल्ट रूप से बहुत पहले ... वास्तव में, यदि आप अपने आप को बाइनरी लॉग के इंटर्नल से परिचित करते हैं, तो आप शायद ऐसा करने के इच्छुक होंगे जैसा मैं करता हूं और ROW
का उपयोग करता हूं। लगभग हर चीज पर... यह समस्या निवारण और स्वयं को परेशानी से बाहर निकालने के लिए अधिक उपयोगी बाइनरी लॉग बनाने की प्रवृत्ति रखता है, क्योंकि "पुराना" पंक्ति डेटा DELETE
पर लॉग होता है। और UPDATE
.