इसे ठीक करने के दो तरीके हैं:
-
MySQL कंसोल में निम्नलिखित को निष्पादित करें:
SET GLOBAL log_bin_trust_function_creators = 1;
-
निम्नलिखित को mysql.ini कॉन्फ़िगरेशन फ़ाइल में जोड़ें:
log_bin_trust_function_creators = 1;
सेटिंग गैर-नियतात्मक कार्यों के लिए जाँच को शिथिल करती है। गैर-नियतात्मक कार्य ऐसे कार्य हैं जो डेटा को संशोधित करते हैं (अर्थात अद्यतन, सम्मिलित करें या कथन हटाएं)। अधिक जानकारी के लिए, यहां देखें। ।
कृपया ध्यान दें, यदि बाइनरी लॉगिंग सक्षम नहीं है, तो यह सेटिंग लागू नहीं होती है।
संग्रहीत प्रोग्रामों की बाइनरी लॉगिंग
log_bin_trust_function_creators
संग्रहीत कार्यों के लिए नियतात्मक घोषणाओं की बेहतर समझ और उपयोग सबसे अच्छा तरीका है। इन घोषणाओं का उपयोग MySQL द्वारा प्रतिकृति को अनुकूलित करने के लिए किया जाता है और स्वस्थ प्रतिकृति के लिए उन्हें सावधानी से चुनना एक अच्छी बात है।
नियतात्मक एक रूटीन को "नियतात्मक" माना जाता है यदि यह हमेशा समान इनपुट पैरामीटर के लिए समान परिणाम उत्पन्न करता है और अन्यथा नियतात्मक नहीं है। इसका उपयोग ज्यादातर स्ट्रिंग या गणित प्रसंस्करण के साथ किया जाता है, लेकिन उस तक सीमित नहीं है।
नियतात्मक नहीं "नियतात्मक" के विपरीत।"यदि नियमित परिभाषा में न तो नियतात्मक और न ही नियतात्मक दिया गया है, तो डिफ़ॉल्ट नियतात्मक नहीं है। यह घोषित करने के लिए कि कोई फ़ंक्शन नियतात्मक है, आपको स्पष्ट रूप से नियतात्मक निर्दिष्ट करना होगा। "। तो ऐसा लगता है कि यदि कोई बयान नहीं दिया गया है, तो MySQl फ़ंक्शन को "नियतात्मक नहीं" के रूप में मानेगा। मैनुअल का यह कथन मैनुअल के अन्य क्षेत्र के अन्य कथन के विपरीत है जो बताता है कि:" जब आप एक बनाते हैं संग्रहीत फ़ंक्शन, आपको या तो यह घोषित करना होगा कि यह नियतात्मक है या यह डेटा को संशोधित नहीं करता है। अन्यथा, यह डेटा पुनर्प्राप्ति या प्रतिकृति के लिए असुरक्षित हो सकता है। डिफ़ॉल्ट रूप से, CREATE FUNCTION कथन को स्वीकार करने के लिए, DETERMINISTIC, NO SQL, या READS SQL डेटा में से कम से कम एक को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। अन्यथा कोई त्रुटि होती है "
यदि कोई घोषणा नहीं है तो मुझे व्यक्तिगत रूप से MySQL 5.5 में त्रुटि मिली है, इसलिए मैं हमेशा "निर्धारक", "नियतात्मक नहीं", "कोई एसक्यूएल" या "एसक्यूएल डेटा पढ़ता हूं" की कम से कम एक घोषणा करता हूं, भले ही मेरे पास अन्य घोषणाएं हों।पी>
एसक्यूएल डेटा पढ़ता है यह स्पष्ट रूप से MySQL को बताता है कि फ़ंक्शन केवल डेटाबेस से डेटा पढ़ेगा, इस प्रकार, इसमें डेटा को संशोधित करने वाले निर्देश नहीं होते हैं, लेकिन इसमें SQL निर्देश होते हैं जो डेटा पढ़ते हैं (e.q. SELECT)।
एसक्यूएल डेटा को संशोधित करता है यह इंगित करता है कि दिनचर्या में ऐसे कथन होते हैं जो डेटा लिख सकते हैं (उदाहरण के लिए, इसमें अद्यतन, सम्मिलित करें, हटाएं या परिवर्तन निर्देश शामिल हैं)।
कोई SQL नहीं यह इंगित करता है कि रूटीन में कोई SQL कथन नहीं है।
एसक्यूएल शामिल है यह इंगित करता है कि रूटीन में SQL निर्देश शामिल हैं, लेकिन इसमें ऐसे कथन नहीं हैं जो डेटा को पढ़ते या लिखते हैं। यह डिफ़ॉल्ट है यदि इनमें से कोई भी विशेषता स्पष्ट रूप से नहीं दी गई है। ऐसे कथनों के उदाहरण हैं अभी चुनें (), चुनें [email protected] , SET @x =1 या DO RELEASE_LOCK('abc'), जो निष्पादित करता है लेकिन न तो डेटा पढ़ता है और न ही लिखता है।
ध्यान दें कि ऐसे MySQL फ़ंक्शन हैं जो नियतात्मक सुरक्षित नहीं हैं, जैसे:NOW (), UUID (), आदि, जो विभिन्न मशीनों पर अलग-अलग परिणाम देने की संभावना रखते हैं, इसलिए एक उपयोगकर्ता फ़ंक्शन जिसमें ऐसे निर्देश होते हैं, उन्हें NOT DETERMINISTIC घोषित किया जाना चाहिए। .साथ ही, एक फ़ंक्शन जो बिना प्रतिरूपित स्कीमा से डेटा पढ़ता है, स्पष्ट रूप से NONDETERMINISTIC है।*