2013-06-12 4 views
8

पूर्ण त्रुटि:चेतावनी: असुरक्षित बयान BINLOG_FORMAT के बाद से बयान प्रारूप का उपयोग कर द्विआधारी लॉग के लिए लिखा = वक्तव्य

Warning: Unsafe statement written to the binary log using statement format 
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an 
auto-increment column after selecting from another table are unsafe because 
the order in which rows are retrieved determines what (if any) rows will be 
written. This order cannot be predicted and may differ on master and the 
slave. 

मैं केवल जब Django से कच्चे एसक्यूएल भागने की कोशिश कर यह त्रुटि प्राप्त करने लगते हैं। यदि मैं MySQL CLI क्लाइंट से SQL चलाता हूं तो मुझे एक ही त्रुटि नहीं मिलती है।

UPDATE picture p 
JOIN (
    SELECT @inc := @inc + 1 AS new_weight, id 
    FROM (SELECT @inc := 0) temp, (
     SELECT id FROM picture 
     WHERE album_id = 5 
     ORDER BY taken_date ASC 
    ) AS pw 
) AS pw 
ON p.id = pw.id 
SET p.weight = pw.new_weight; 

इसका उद्देश्य रिकॉर्ड आदेश, और आदेश डेटाबेस में इस आदेश लागू करने के लिए में वजन करने के लिए एक अनुक्रमिक संख्या लागू करने के लिए है: यहाँ एसक्यूएल है।

मैं ग्राहक के भीतर इस आदेश चलाकर अगर मैं इस मुद्दे को दोहराने कर सकते हैं देखने के लिए कोशिश की है लेकिन यह अभी भी सफलतापूर्वक चलता:

mysql> SET GLOBAL binlog_format = 'STATEMENT'; 

इसके अलावा, यह महत्वपूर्ण है कि मैं या तो हल या SQL के साथ काम करने को फिर से लिखने अंतिम बाधा के रूप में यह बाधा लगभग निश्चित रूप से मास्टर-गुलाम डेटाबेस सेटअप में चलने जा रही है।

* संपादित करें: थोड़ा और binlog_format पढ़ने के बाद, ऐसा लगता है कि ROW या MIXED पूरी तरह से स्वीकार्य होगा, हालांकि मेरी मुख्य चिंता MySQL CLI में इस समस्या को दोहराने में सक्षम नहीं है कि यह जांचने के लिए कि MIXED/ROW इस समस्या को हल कर सकते हैं?

उत्तर

8

उस त्रुटि संदेश को फेंकने के लिए एसक्यूएल को फिर से लिखने का कोई तरीका नहीं है। किसी भी प्रकार का आदेश उस संदेश को फेंक देगा क्योंकि गुलाम के पास अलग-अलग पंक्तियां हो सकती हैं। mixed इसे हल करेगा, क्योंकि यह केवल row आधारित प्रतिकृति पर स्विच करेगा जब कोई कथन statement के साथ दोहराने के लिए सुरक्षित नहीं है।

+0

हाँ मुझे लगता है कि बस 'मिश्रित' पर स्विच करना उत्तर है, और इससे समस्या मेरे लिए ठीक हो गई। इच्छा है कि मैं सीएलआई पर दोहराना चाहूंगा लेकिन यह अब काम करता है :) – DanH

संबंधित मुद्दे