2011-06-01 72 views
5

我已经加载了一个UDF函数到MySQL(没有选择任何特定的数据库)。它用我的会话过程中很好地工作,但现在我得到的错误“ERROR 1305(42000):功能currentdatabase.myfunction不存在”当我尝试使用功能与下面的SQL语句:不能使用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库。不知道如何解决这个问题,有人? 'SELECT * FROM mysql.func'列出我想要使用的函数。 – juanmirocks 2011-11-10 10:17:27

回答

1

我相信问题来自删除.so库,然后再删除函数。服务器仍然认为它具有功能,因为它们出现在SELECT * FROM mysql.func中,但当然调用这些函数失败。不知何故,DROP不会简单地删除此表中的条目,但也会检查是否找到导致此失败的库。 CREATE据说只是检查第一个func表,这使得这个失败...

解决的办法是恢复func表(func.MYI,func.MYD,func.frm文件在你的mysql的数据/ mysql下)到点一切都匹配。

幸运的是我有这些文件的备份。否则,你将不得不从一个新的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删除 的功能行。FUNC表,然后重新安装
  3. 停止MySQL服务器(尝试选项2)后,再次启动它, 然后重新安装

从我的测试中,你不需要有你的二进制数据库文件的备份正如@jmcejuela在他的回答中所暗示的那样。

来源:http://simonholywell.com/post/2012/01/mysql-udf-install-error-function-already-exists.html

+1

+1 2.从mysql.func中删除函数行,重新启动服务器,然后重新创建为我工作的函数。 – kfmfe04 2013-04-30 05:03:11

-1

下降的功能(S)之前换出时(不会放弃)的.so库得到了一些这样的错误。

重新启动服务器消除了错误消息,无论函数是否成功删除。 Mysqld只是查看mysql.func表并从(新).so中加载函数。我知道重新启动服务器并不总是一种选择,但如果是这样,它很快且完整。