我已经将一个UDF函数加载到MySQL中(没有选择任何特定的数据库)。它曾经在我的会话期间运行良好,但是当我尝试使用带有以下sql语句的函数时,我得到错误“ERROR 1305(42000):FUNCTION currentdatabase.myfunction不存在”:
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
我的问题是:如何再次使用我的功能?
提前致谢。
注意:没有像其他几个网站上报道的那样的空间问题(“select myfunction('aaa');”)。
答案 0 :(得分:6)
我最近遇到了这个问题,我自己也写了一篇关于它的快速博客文章:
当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.func表,然后重新安装
- 停止MySQL服务器(尝试选项2后),再次启动它 然后重新安装
在我的测试中,您不需要备份二进制数据库文件,因为@jmcejuela在他的回答中建议。
来源:http://simonholywell.com/post/2012/01/mysql-udf-install-error-function-already-exists.html
答案 1 :(得分:1)
我认为问题来自于在删除函数之前删除.so库。服务器仍然认为它具有函数,因为它们出现在SELECT * FROM mysql.func
中,但当然调用这些函数失败了。不知何故,DROP
不仅仅删除此表中的条目,还会检查是否找到了导致此失败的库。 CREATE
假设首先检查导致此失败的func
表...
解决方案是将func表(fql.MYI,func.MYD,fql.frm文件在mysql的data / mysql下)恢复到所有匹配的位置。
幸运的是我有这些文件的备份。否则你将不得不从一个新的mysql安装备份它们(你可以简单地在本地安装一个新服务器,不要删除你当前的服务器)
底线:在删除函数之前不要删除.so库。
答案 2 :(得分:-1)
在删除函数之前交换(不删除).so库时出现了一些错误。
重新启动服务器消除了错误消息,无论函数是否成功删除。 Mysqld只是查看了mysql.func表并从(新).so中加载了函数。我知道重新启动服务器并不总是一个选项,但如果是,那就快速完成。