我已经通过 CREATE FUNCTION
命令创建了一个 UDF,现在当我尝试删除它时服务器崩溃了。根据docs ,这是一个已知问题:
To upgrade the shared library associated with a UDF, issue a DROP FUNCTION statement, upgrade the shared library, and then issue a CREATE FUNCTION statement. If you upgrade the shared library first and then use DROP FUNCTION, the server may crash.
它确实崩溃了,之后任何删除该函数的尝试都崩溃了,即使我从插件目录中完全删除了 DLL。在开发过程中,我不断地替换定义 UDF 函数的库。我今天已经从头开始重新安装了一次 MySQL,并且不想再这样做了。除了更加小心之外,我还能做些什么吗?手动清理 mysql.* 表以删除该函数?
编辑:经过一些修补,数据库似乎已经进入崩溃模式,直到我删除了有问题的 DLL,然后发出 错误代码:1305:FUNCTION [schema].[functionName] does not存在
。如果我尝试以 root 身份删除该函数,我会收到相同的消息,但没有模式前缀。
SELECT * from mysql.func
显示函数。如果我手动删除记录,我会得到相同的 1305 错误。
最佳答案
mysql
架构中的系统表中的大部分数据在第一次接触时缓存在内存中。之后,除非重启服务器,否则手动修改表可能不会达到预期的效果。
对于授权表,提供了一种刷新任何缓存数据的机制 -- FLUSH PRIVILIGES
-- 但对于其他表,如 func
和时区表,确保将对表的手动更改全部考虑在内的唯一确定方法是重新启动服务器进程。
关于c++ - MySQL 在 DROP FUNCTION 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069935/