इसे ठीक करने के दो तरीके हैं:
MySQL कंसोल में निम्नलिखित को निष्पादित करें:
SET GLOBAL log_bin_trust_function_creators = 1;
Mysql.ini कॉन्फ़िगरेशन फ़ाइल में निम्न जोड़ें:
log_bin_trust_function_creators = 1;
सेटिंग गैर-नियतात्मक कार्यों के लिए जाँच को आराम देती है। गैर-नियतात्मक कार्य ऐसे फ़ंक्शन हैं जो डेटा को संशोधित करते हैं (अर्थात स्टेटमेंट अपडेट करें, सम्मिलित करें या हटाएं)। अधिक जानकारी के लिए, यहां देखें ।
कृपया ध्यान दें, यदि बाइनरी लॉगिंग सक्षम नहीं है, तो यह सेटिंग लागू नहीं होती है।
संग्रहीत कार्यक्रमों के बाइनरी लॉगिंग
यदि बाइनरी लॉगिंग सक्षम नहीं है, तो log_bin_trust_function_creators लागू नहीं होता है।
log_bin_trust_function_creators
बाइनरी लॉगिंग सक्षम होने पर यह चर लागू होता है।
सबसे अच्छा दृष्टिकोण संग्रहीत कार्यों के लिए एक बेहतर समझ और नियतात्मक घोषणाओं का उपयोग है। इन घोषणाओं का उपयोग MySQL द्वारा प्रतिकृति को अनुकूलित करने के लिए किया जाता है और स्वस्थ प्रतिकृति के लिए उन्हें सावधानी से चुनना एक अच्छी बात है।
DETERMINISTIC
एक रूटीन "नियतात्मक" माना जाता है, अगर यह हमेशा समान इनपुट मापदंडों के लिए समान परिणाम उत्पन्न करता है और DETERMINISTIC अन्यथा नहीं। यह ज्यादातर स्ट्रिंग या गणित प्रसंस्करण के साथ प्रयोग किया जाता है, लेकिन यह तक सीमित नहीं है।
"DETERMINISTIC" के विपरीत नहीं । " यदि नियमित परिभाषा में न तो DETERMINISTIC और न ही DETERMINISTIC दिया गया है, तो डिफ़ॉल्ट नहीं है DETININISTIC। यह घोषित करने के लिए कि एक फ़ंक्शन नियतात्मक है, आपको DETERMINISTIC को स्पष्ट रूप से निर्दिष्ट करना होगा। " इसलिए ऐसा लगता है कि यदि कोई बयान नहीं दिया जाता है, तो MySQl फ़ंक्शन को "NOT DETERMINISTIC" के रूप में मानेगा। मैनुअल का यह कथन मैनुअल के किसी अन्य क्षेत्र से अन्य कथन के विपरीत है जो बताता है कि: "जब आप एक संग्रहीत कार्य बनाते हैं, तो आपको यह घोषित करना होगा कि यह नियतात्मक है या यह डेटा को संशोधित नहीं करता है। अन्यथा, यह डेटा रिकवरी या प्रतिकृति के लिए असुरक्षित हो सकता है। डिफ़ॉल्ट रूप से, क्रिएट फंक्शन स्टेटमेंट को स्वीकार किए जाने के लिए, कम से कम DETERMINISTIC, NO SQL, या READS SQL DATA को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। अन्यथा एक त्रुटि होती है "
मुझे व्यक्तिगत रूप से MySQL 5.5 में त्रुटि मिली है अगर कोई घोषणा नहीं है, तो मैं हमेशा "DETERMINISTIC", "NOT DETERMINISTIC", "NO SQL" या "READS SQL DATA" की कम से कम एक घोषणा को ध्यान में रखते हुए घोषणा कर सकता हूं, चाहे मेरी कोई भी घोषणा हो।
READS SQL DATA
यह स्पष्ट रूप से MySQL को बताता है कि फ़ंक्शन केवल डेटाबेस से डेटा को पढ़ेगा, इस प्रकार, इसमें ऐसे निर्देश नहीं हैं जो डेटा को संशोधित करते हैं, लेकिन इसमें SQL निर्देश हैं जो डेटा को पढ़ते हैं (eq SELECT)।
SQL SQL डेटा
यह इंगित करता है कि दिनचर्या में ऐसे कथन होते हैं जो डेटा लिख सकते हैं (उदाहरण के लिए, इसमें UPDATE, INSERT, DELETE या अन्य निर्देश शामिल हैं)।
NO SQL
यह इंगित करता है कि दिनचर्या में SQL कथन नहीं हैं।
CONTAINS SQL
यह इंगित करता है कि रूटीन में SQL निर्देश हैं, लेकिन डेटा को पढ़ने या लिखने वाले कथन शामिल नहीं हैं। यह डिफ़ॉल्ट है यदि इनमें से कोई भी विशेषता स्पष्ट रूप से नहीं दी गई है। ऐसे कथनों के उदाहरण अभी सेलेक्ट हैं (), सिलेक्ट 10 + @ b, SET @x = 1 या DO RELEASE_LOCK ('abc'), जो निष्पादित करते हैं लेकिन न तो डेटा पढ़ते हैं और न ही लिखते हैं।
ध्यान दें कि वहाँ MySQL फ़ंक्शंस हैं जो नियतात्मक सुरक्षित नहीं हैं, जैसे: अब (), यूयूआईडी (), आदि, जो विभिन्न मशीनों पर अलग-अलग परिणाम उत्पन्न करने की संभावना रखते हैं, इसलिए एक उपयोगकर्ता फ़ंक्शन जिसमें ऐसे निर्देश शामिल हैं, उन्हें डीईएफ़टीआरआईएसआईसी नहीं घोषित किया जाना चाहिए। । इसके अलावा, एक फ़ंक्शन जो एक अप्रकाशित स्कीमा से डेटा पढ़ता है वह स्पष्ट रूप से NONDETERMINISTIC है। *
एक दिनचर्या की प्रकृति का आकलन निर्माता की "ईमानदारी" पर आधारित है: MySQL यह जाँच नहीं करता है कि एक नियमित घोषित DETERMINISTIC उन बयानों से मुक्त है जो nondeterministic परिणाम उत्पन्न करते हैं। हालाँकि, किसी दिनचर्या को गलत बताने से परिणाम प्रभावित हो सकते हैं या प्रदर्शन प्रभावित हो सकते हैं। एक नॉनडेटेर्मिनिस्टिक रूट को डीटेल्टिमिंटिक के रूप में घोषित करने से ऑप्टिमाइज़र को गलत निष्पादन विकल्प चुनने में अप्रत्याशित परिणाम हो सकते हैं। NONDETERMINISTIC के रूप में एक नियतात्मक दिनचर्या की घोषणा उपलब्ध उपयोग नहीं होने के कारण उपलब्ध प्रदर्शन के कारण प्रदर्शन को कम कर सकता है।