क्यों एक MySQL समारोह बेतरतीब ढंग से गिरा दिया जाएगा?


2

मेरे पास निम्न फ़ंक्शन है जो मेरे सर्वर पर कई डेटाबेस में उपयोग किया जाता है।

CREATE FUNCTION `fn_strings_intersect`(arg_str1 VARCHAR(255), arg_str2 VARCHAR(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
    SET arg_str1 = CONCAT(arg_str1, ",");
    SET @var_result = "";

    WHILE(INSTR(arg_str1, ",") > 0)
    DO
        SET @var_val = SUBSTRING_INDEX(arg_str1, ",", 1);
        SET arg_str1 = SUBSTRING(arg_str1, INSTR(arg_str1, ",") + 1);

        IF(FIND_IN_SET(replace(@var_val, ' ', ''), arg_str2) > 0)
        THEN
            SET @var_result = CONCAT(@var_result, @var_val, ",");
        END IF;
    END WHILE;

    IF (@var_result = "")
    THEN
      RETURN false;
    ELSE
      RETURN true;
    END IF;
END;

समय-समय पर, और कोई अनुमान लगाने योग्य तरीके से, फ़ंक्शन सभी डेटाबेस में गिरा दिया जा रहा है।

क्या फ़ंक्शन या संभवतः मेरे MySQL कॉन्फ़िगरेशन के बारे में कुछ है जो इस फ़ंक्शन को गिराए जाने का कारण बन सकता है / हो सकता है?


1
मुझे स्पष्ट रूप से कुछ भी संदिग्ध नहीं दिख रहा है, लेकिन इसीलिए मैंने डमी फ़ंक्शंस की कोशिश करने का सुझाव दिया। यदि एक ही सामग्री के साथ एक फ़ंक्शन लेकिन अलग-अलग नाम गिरा दिया जाता है, तो आप जानते हैं कि सामग्री के बारे में कुछ है और आप इसके कुछ हिस्सों को हटाने की कोशिश कर सकते हैं जो वास्तव में समस्या को ट्रिगर कर रहा है। यदि एक डमी एक ही नाम के साथ काम करती है, लेकिन अलग-अलग सामग्री गिर जाती है, तो कुछ इसे नाम से छोड़ रहा है। क्या वास्तविक कार्य उपरोक्त के समान है या इसमें टिप्पणियां शामिल हैं?
21

2
क्या आप समय-समय पर mysql डेटाबेस का बैकअप पुनर्स्थापित कर रहे हैं ??
रोलैंडमाइसीडीडीबीए

1
क्या ऐसा हो सकता है कि फ़ंक्शन अपवाद का कारण बनता है? यादृच्छिक भाग कुछ ऐसे अजीब पैरामीटर होंगे जिन्हें आपने नहीं देखा है। आप एक त्रुटि हैंडलर जोड़ सकते हैं।

1
मुझे नहीं पता, लेकिन जैसा कि फ़ंक्शन हानिरहित दिखता है, निष्पादन के दौरान एक समस्या समस्या का कारण हो सकती है।
२२

1
ओपी कहता है, "मेरे पास केवल यही एक फ़ंक्शन है।" @DarrellBrogdon: क्या आपने विभिन्न सामग्रियों (जैसे, कोई नहीं) और एक अलग नाम के साथ एक डमी फ़ंक्शन की कोशिश की है ? शायद समस्या यह है कि कोई भी कार्य समाप्त हो जाता है।
स्कॉट

जवाबों:


4

किसी भी संयोग से, आप अपने डेमॉन स्टार्टअप पर --स्किप-अनुदान-टेबल का उपयोग कर रहे हैं?

प्रलेखन से सृजन के लिए

एक सक्रिय कार्य वह है जो क्रिएट फंक्शन के साथ लोड किया गया है और डीआरओपी फंक्शन के साथ नहीं हटाया गया है। जब तक आप mysqld को --skip-अनुदान-तालिकाओं के विकल्प के साथ शुरू नहीं करते , तब तक सभी सक्रिय कार्यों को सर्वर के शुरू होने पर पुनः लोड किया जाता है ।


ऐसा नहीं लगता कि mysql को उस स्विच के साथ शुरू किया गया था: mysql 6428 0.5 14.2 1382020 293176 ? Ssl 2013 154:25 /usr/sbin/mysqld यह Ubuntu 12.04.3 LTS पर स्टॉक MySQL के साथ है जो मुझे विश्वास है। तो जब तक उबंटू पर MySQL का स्टॉक --स्किप-ग्रांट-टेबल के साथ आता है, तब तक उस ध्वज को सक्षम नहीं होना चाहिए।
डेरेल ब्रोगडन

2

यह फ़ंक्शन पहली नज़र में काफी हानिरहित लगता है, लेकिन मुझे आश्चर्य है कि अगर निष्पादन के दौरान यह अपवाद होता है तो क्या होगा। मैं MySQL को यह जानने के लिए पर्याप्त रूप से पर्याप्त नहीं जानता कि यह क्या करेगा - सभी के लिए मुझे पता है कि यह फ़ंक्शन को ड्रॉप या अक्षम कर सकता है।

ऐसा होने पर यादृच्छिक भाग कुछ अजीब और दुर्लभ पैरामीटर होंगे जिन्हें आपने अपवाद के कारण नहीं बताया है।

आप एक ही नाम के साथ एक खाली फ़ंक्शन का परीक्षण कर सकते हैं। यदि यह फ़ंक्शन समस्या नहीं दिखाता है, तो संभवतः यह संकेत दे सकता है कि रन-टाइम समस्या मौजूद है।

एक दूसरा परीक्षण फ़ंक्शन में एक त्रुटि हैंडलर जोड़ने के लिए होगा यह देखने के लिए कि क्या समस्या फिर गायब हो जाएगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.