2011-06-01 18 views
5

UDF関数をMySQLにロードしました(特定のDBは選択していません)。それは私のセッションの間にうまく動作するために使用されるが、今、私はエラーが出る「ERROR 1305(42000):FUNCTIONのcurrentdatabase.myfunctionは存在しません」:MySQL UDF関数を使用できません

select myfunction('aaa'); 

I私は次のSQL文で機能を使用しようとすると関数を削除しようとしましたが、私は同じエラーコードを持っています:

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

DBが選択されている場合。

そう

別のエラーコード:

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ライブラリを削除する必要があります。これをどのように解決するか分からない、誰か? SELECT * FROM mysql.funcは、使用したい関数をリストします。 – juanmirocks

答えて

1

問題は、関数/ sを削除する前に.soライブラリを削除したことに起因すると考えられます。サーバはまだそれがSELECT * FROM mysql.funcに現れるので機能を持っていると信じていますが、もちろんこれらの機能を呼び出すことはできません。何らかの形でDROPは、単にこのテーブルのエントリを削除するだけでなく、これを失敗させるライブラリが見つかったかどうかをチェックします。 CREATEおそらくちょうど...最初

を、これは失敗しますfuncテーブルをチェックソリューションは、ポイントに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
これは 次のオプションが本当に簡単に解決することができます。mysqlから 機能の行を削除機能を削除し
  • それを再インストールする

    1. 試み 。FUNCテーブル[停止(オプション2を試した後)の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テーブルを見て、(新しい).soから関数をロードしました。私はサーバーの再起動が常にオプションではないことを知っていますが、そうであれば、速くて完全です。