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;
  1. MySQL启动时,加上–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

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

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

image.png

开启bin-log方法,参考文章 https://www.cnblogs.com/handle/p/9761702.html

猜你喜欢

转载自blog.csdn.net/chang100111/article/details/121859515
今日推荐