MySQL创建function报ERROR 1418 (HY000)

MySQL创建function报ERROR 1418 (HY000)This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled

问题产生的原因:
因为CREATE PROCEDURE, CREATE FUNCTION, ALTER PROCEDURE,ALTER FUNCTION,CALL, DROP PROCEDURE, DROP FUNCTION等语句都会被写进二进制日志,然后在从服务器上执行。但是,一个执行更新的不确定子程序(存储过程、函数、触发器)是不可重复的,在从服务器上执行(相对与主服务器是重复执行)可能会造成恢复的数据与原始数据不同,从服务器不同于主服务器的情况。
解决方案:

方案一

参考链接:MySQL 错误1418 的原因分析及解决方法
在function中添加DETERMINISTIC, NO SQL, or READS SQL DATA中的一种,如下图所示:
在这里插入图片描述
结果又报了ERROR 1419 (HY000) : You do not have the SUPER privilege and binary logging is enabled错误
大致意思就是权限不够,但是我是使用的root登录的,崩溃!!!!!!!!!!!!!!!!

方案二

参考链接:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA…
如果您不想看到这个警告,可以将 log_bin_trust_function_creators 变量设置为 1,这将允许您创建没有 DETERMINISTIC、NO SQL 或 READS SQL DATA 的函数,但这可能会降低 MySQL 的安全性。
在执行创建函数或者触发器之前执行:

set global log_bin_trust_function_creators = 1;

再次执行创建函数或触发器语句没报错!!!!!!!!

总结

方案二这条语句是临时生效的,重启数据库后将不再生效。需要在每次创建函数或触发器的时候执行一次本语句。
也有文章推荐直接在sql的配置文件设置global log_bin_trust_function_creators = 1,博主个人认为是不推荐的。因为这样会导致任何用户均可创建没有 DETERMINISTIC、NO SQL 或 READS SQL DATA 的函数,从而影响数据库的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值