我已经通过CREATE FUNCTION
命令创建了一个UDF,现在当我尝试删除它时,服务器崩溃了。根据{{3}},这是一个众所周知的问题:
要升级与UDF关联的共享库,请发出DROP FUNCTION语句,升级共享库,然后发出CREATE FUNCTION语句。如果先升级共享库,然后使用DROP FUNCTION,服务器可能会崩溃。
确实崩溃了,之后任何删除函数的尝试都会崩溃,即使我从插件目录中完全删除了DLL。在开发过程中,我不断更换定义UDF函数的库。我今天已经从头开始重新安装了MySQL,而不想再这样做了。除了更加小心,我还能做些什么,例如手动清理mysql。*表以删除函数?
编辑:经过一些修补,数据库似乎已经陷入崩溃的模式,直到我删除了有问题的DLL,然后发出Error Code: 1305: FUNCTION [schema].[functionName] does not exist
。如果我尝试以root身份删除该函数,我会得到相同的消息但没有架构前缀。
SELECT * from mysql.func
显示该功能。如果我手动删除记录,我会得到相同的1305错误。
答案 0 :(得分:1)
mysql
架构中系统表中的大部分数据在第一次触摸时缓存在内存中。之后,除非重新启动服务器,否则手动修改表可能不会产生预期效果。
对于授权表,提供了一种刷新任何缓存数据的机制 - FLUSH PRIVILIGES
- 但对于其他表,如func
和时区表,唯一的确保方法手动更改表都考虑到重启服务器进程。