MySQL创建自定义函数时 Error Code: 1418 的解决方法

今天在MySQL中创建函数时,报了以下错误:
Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

于是查看 MySQL手册,错误原因如下:

由于基于语句的复制,在从库重放日志里的事件时,使用函数这种非确定性事件可能导致主从数据不一致,因此,开启二进制日志功能后,MySQL会对函数的创建做出限制。

解决方法:

首先要知道,在 MySQL中,函数的类别有:
1.CONTAINS SQL 包含了SQL语句(函数默认为这种类型)
2.READS SQL DATA 只是读取数据,不修改数据
3.NO SQL 没有SQL语句(当然也不会修改数据)
4.DETERMINISTIC 确定的
5.MODIFIES SQL DATA 将修改数据

因此如果我们想创建函数,必须指明函数的类别为 READS SQL DATA 或 NO SQL 或 DETERMINISTIC。

...
CREATE READS SQL DATA FUNCTION ...
...

即告诉 MySQL,我这个函数要么是确定性的,要么根本就不会写数据,因此不会对复制产生影响。

还有一个方法,即将全局参数 log_bin_trust_function_creators 设为 on,代表受信任的函数创建者,也就是使MySQL不对函数做出限制。注意,如果是在运行过程中修改该值,重启服务器后,修改就会丢失,因此要手动修改配置文件。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值