MySQL犯错1418的原因分析及解决方法

  

MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍,解释如下所示:

  

癕ySQL犯错1418的原因分析及解决方法"

  

这个变量启用二进制日志时适用。它控制存储函数创作者是否可以信任不是创建存储函数,将导致不安全事件写入二进制日志。如果设置为0(默认),用户不允许创建或改变存储功能,除非他们有超级特权除了创建例程或改变常规的特权。设置0还实施的限制,必须声明一个函数的确定性特征,或读取SQL数据或没有SQL特性。如果变量设置为1时,MySQL不执行这些限制alt=癕ySQL犯错1418的原因分析及解决方法”>
在调用存储函数时,也会遇到这个错误,如下测试所示:
癕ySQL犯错1418的原因分析及解决方法”
癕ySQL犯错1418的原因分析及解决方法"

  

那么为什么MySQL有这样的限制呢?因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建,修改,调用。那么此时如何解决这个问题呢?官方文档介绍如下,具体可以参考

23.7二进制日志的存储程序   

如果你不要求函数创造者的超级特权(例如,如果所有用户创建常规特权alt=癕ySQL犯错1418的原因分析及解决方法”>
癕ySQL犯错1418的原因分析及解决方法"

MySQL犯错1418的原因分析及解决方法