Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैसकल वार्निंग कोड 1592 असुरक्षित स्टेटमेंट बाइनरी लॉग को स्टेटमेंट फॉर्मेट का उपयोग करके लिखा गया है

आप संभवतः बाइनरी लॉगिंग के दो स्वरूपों से परिचित हैं। ए> , कथन-आधारित - जो वास्तविक प्रश्नों को लॉग करता है जो मास्टर पर डेटा को संशोधित करते हैं ताकि उन्हें दास पर निष्पादित किया जा सके, और पंक्ति-आधारित - जो वास्तविक पंक्ति डेटा के पहले और/या बाद की छवियों को लॉग करता है क्वेरी द्वारा बदला गया, ताकि स्लेव उन परिवर्तनों को सीधे अपने डेटा... और मिश्रित-मोड में लागू कर सके, जहां ऑप्टिमाइज़र और स्टोरेज इंजन यह निर्धारित करते हैं कि क्वेरी-दर-क्वेरी के आधार पर कौन सा प्रारूप इष्टतम प्रारूप है।

आप जो कथन निष्पादित कर रहे हैं वह असुरक्षित है सैद्धांतिक रूप से क्योंकि आप INSERT ... SELECT . का उपयोग कर रहे हैं एक ऑटो-इन्क्रीमेंट कॉलम वाली तालिका में। अगर कोई क्वेरी उस सामान्य रूप की STATEMENT . में उपयोग किए गए थे -आधारित परिवेश, और SELECT पंक्तियों को मास्टर और दास पर एक ही क्रम में वापस नहीं किया, पंक्तियों को एक अलग क्रम में चुना जा सकता है, और इस प्रकार विभिन्न ऑटो-वृद्धि मूल्यों के साथ समाप्त होता है।

व्यवहार में, विशिष्ट क्वेरी आप निष्पादित कर रहे हैं है नियतात्मक क्योंकि आप केवल एक पंक्ति सम्मिलित कर रहे हैं, और आप स्पष्ट रूप से स्वतः-वृद्धि मान निर्दिष्ट कर रहे हैं। मुझे संदेह है कि यह आपके भ्रम का कारण है। हालांकि, ऐसा प्रतीत होता है कि आप अभी भी चेतावनी ट्रिगर कर रहे हैं क्योंकि आप INSERT ... SELECT कर रहे हैं एक ऑटो-इन्क्रीमेंट वाली तालिका में, और सर्वर क्वेरी के लिए सामान्यीकृत "असुरक्षित" निर्धारण को सिद्धांत के रूप में लागू करता प्रतीत होता है, न कि सटीकता के रूप में।

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डेटाबेस को ReactJS ऐप से कैसे कनेक्ट करें?

  2. कई उपयोगकर्ताओं को PHP के माध्यम से मेल भेजने का सुरक्षित तरीका

  3. Neo4j - Cypher . का उपयोग करके एक बाधा बनाएं

  4. अद्वितीय बाधा जो MySQL में दो स्तंभों की जाँच करती है

  5. फ़ील्ड डेटा द्वारा MySQL (या PHP?) समूह परिणाम