MySQL开启bin_log后导致创建函数、存储过程失败。Error:Result_ 1418 - This function has none of DETERMINISTIC

搭建分布式服务,使用了主从数据库,需要使用MySQL的binlog去同步数据,但是开启binlog后导致新增函数、存储过程等报错。
具体报错信息如下:

Result: 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开启bin-log后,调用存储过程或者函数以及触发器是就会出现1418错误,此时需要修改global log_bin_trust_function_creators,它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。

解决方案:
1、临时修改数据库配置属性,在客户端执行命令(但是在mysql服务重启后会失效)

set global log_bin_trust_function_creators=1;

2、修改my.ini 或者my.cnf文件,重启数据库,永久有效

Linux中修改my.conf

vim /etc/my.cnf 这是默认安装位置
在[mysqld]中添加 log_bin_trust_function_creators=1

windows在my.ini文件中(你的mysql安装位置)

# 开启bin-log后可以调用函数
log_bin_trust_function_creators=1

你可能感兴趣的:(数据库,mysql,数据库,linux)