2011-06-01 16 views
5

मैंने एक यूडीएफ फ़ंक्शन को MySQL में लोड किया है (बिना किसी विशेष डीबी का चयन किए)। यह मेरी सत्र के दौरान अच्छी तरह से काम करता था लेकिन अब मैं त्रुटि मिलती है "त्रुटि 1305 (42000): function currentdatabase.myfunction मौजूद नहीं है" जब मैं निम्नलिखित एसक्यूएल बयान के साथ समारोह का उपयोग करने का प्रयास करें:एक MySQL UDF फ़ंक्शन का उपयोग नहीं कर सकता

select myfunction('aaa'); 

मैं फिर फ़ंक्शन को छोड़ने का प्रयास किया और मुझे एक ही त्रुटि कोड मिला:

mysql> drop function myfunction; 
ERROR 1305 (42000): FUNCTION database.myfunction does not exist 

यदि कोई डीबी चुना गया है।

एक और त्रुटि अन्यथा कोड:

ERROR 1046 (3D000): No database selected 

तो मैं फिर से समारोह को निर्दिष्ट करने का फैसला किया है और मैं निम्न त्रुटि कोड मिल गया:

CREATE FUNCTION myfunction RETURNS INT SONAME 'myfunction.so'; 
ERROR 1125 (HY000): Function 'myfunction' already exists 

मेरा प्रश्न है: कैसे फिर से मेरी समारोह उपयोग कैसे करें?

अग्रिम धन्यवाद।

नोट: ऐसी कोई अन्य समस्या नहीं है ("Myfunction ('aaa');") का चयन करें, जैसा कि कई अन्य वेबसाइटों पर रिपोर्ट किया गया है।

+0

मुझे एक ही समस्या है। मेरा मानना ​​है कि समस्या यह है कि हमने (कम से कम मैंने किया) फ़ंक्शन को छोड़ने से पहले या mysqld अभी भी चल रहा था, साझा किए गए .so लाइब्रेरी को हटा दें। यह नहीं पता कि इसे कैसे हल किया जाए, कोई? 'चुनें * mysql.func' से उस फ़ंक्शन को सूचीबद्ध करता है जिसका मैं उपयोग करना चाहता हूं। – juanmirocks

उत्तर

1

मेरा मानना ​​है कि समस्या कार्य को छोड़ने से पहले .so लाइब्रेरी को हटाने से आता है। सर्वर अभी भी मानता है कि इसमें कार्य हैं क्योंकि वे SELECT * FROM mysql.func में दिखाई देते हैं लेकिन निश्चित रूप से इन कार्यों को कॉल करना विफल हो जाता है। किसी भी तरह DROP इस तालिका में प्रविष्टियों को आसानी से नहीं हटाता है बल्कि यह भी जांचता है कि पुस्तकालय पाए जाते हैं जो इससे असफल हो जाता है। CREATE माना जाता है कि सिर्फ पहली जाँच func तालिका जो इस असफल बनाता है ...

समाधान बात करने के लिए समारोह तालिका (func.MYI, func.MYD, अपने mysql के डेटा/mysql के तहत func.frm फ़ाइलें) को बहाल करना है सब कुछ मेल खाता है।

सौभाग्य से मेरे पास इन फ़ाइलों का बैकअप था। अन्यथा आपको उन्हें एक नए mysql स्थापना से बैकअप लेना होगा (आप बस स्थानीय रूप से एक नया सर्वर स्थापित कर सकते हैं जो आपके वर्तमान को हटाने के लिए नहीं है)

नीचे पंक्ति: कार्यों को छोड़ने से पहले .so पुस्तकालयों को हटाएं।

5

मैं हाल ही में इस मुद्दे को मेरी स्वयं का सामना करना पड़ा है और मैं एक साथ इसके बारे में त्वरित ब्लॉग पोस्ट डाल:

जब installing a UDF recently मैं एक कष्टप्रद त्रुटि संदेश है, जो दूर जाना चाहता हूँ नहीं लगता था मिल गया। को हटाने से पहले फ़ंक्शन को काम करने से पहले काम नहीं किया गया था इसलिए मैंने इंस्टॉल करने के प्रयास में बढ़ते आदेशों के सेट के बाद का उपयोग किया।

लेकिन वापस एक पल के लिए त्रुटि के:

bash > mysql -u user -p < installdb.sql 
Enter password: 
ERROR 1125 (HY000) at line 7: Function 'lib_mysqludf_ssdeep_info' already exists
यह जा निम्नलिखित विकल्पों के साथ वास्तव में बस हल कर सकते हैं:

  1. प्रयास समारोह हटाकर बाद में इसे फिर से स्थापित करने
  2. mysql से समारोह पंक्ति हटाएं ।समारोह टेबल और उसके बाद फिर से स्थापित यह
  3. MySQL सर्वर (विकल्प 2 कोशिश कर के बाद) बंद करो, यह फिर से शुरू करने और तो परीक्षण आप अपने द्विआधारी डेटाबेस फ़ाइलों का बैकअप होना की जरूरत नहीं है इसे पुनः स्थापित

मेरे से @jmcejuela के जवाब में सुझाव देता है।

स्रोत: जब समारोह (रों) छोड़ने से पहले .so पुस्तकालय बाहर गमागमन (छोड़ने नहीं) http://simonholywell.com/post/2012/01/mysql-udf-install-error-function-already-exists.html

+1

+1 2. mysql.func से फ़ंक्शन पंक्ति को हटाकर, सर्वर को पुनरारंभ करना, और उसके बाद फ़ंक्शन को फिर से बनाना मेरे लिए काम करता है। – kfmfe04

-1

इन त्रुटियों के कुछ मिल गया।

सर्वर को पुनरारंभ करने से त्रुटि संदेशों को समाप्त कर दिया गया, चाहे कार्यों को सफलतापूर्वक गिरा दिया गया हो या नहीं। Mysqld बस mysql.func तालिका और (नए) से लोड किए गए कार्यों को देखा। मुझे पता है कि सर्वर को पुनरारंभ करना हमेशा एक विकल्प नहीं है, लेकिन यदि यह है, तो यह तेज़ और पूर्ण है।

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