mysql创建函数时提示1418。可选关闭二进制日志或者设置log_bin_trust_function_creators=1
报错详情如下: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)

出现过程
数据库版本原为5.7.12,新版本为8.0.28,导入函数的时候报错。
查阅相关资料,意思是说binlog启用时,创建的函数没有声明类型,因为binlog在主从复制需要知道这个函数创建语句是什么类型,否则同步数据会有不一致现象。
mysql开启了bin-log, 我们就必须指定我们的函数是否是哪种类型:
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
此处报错是因为mysql8.0默认bin_log为开启状态,所以创建函数时会需要判断权限。
解决方案:
1、关闭二进制日志,经查询,二进制日志为非必要开启,所以选择该方案。
5.7版本默认为关闭的,而8.0默认为开启,需要手动关闭。
- 查询当前状态:show variables like 'log_bin';

- 编辑my.cnf文件,一般路径为:/etc/my.cnf,在mysqld下面添加:skip-log-bin
- 重启Mysql,/etc/init.d/mysqld restart;
- 再次查看状态,为关闭状态:show variables like 'log_bin';
2、如存在主从热备,二进制日志为确实需要开启,可以修改函数,声明对应的函数类型
创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个,
例如:
DROP FUNCTION IF EXISTS `t_auto_increment`;
DELIMITER ;;
CREATE FUNCTION `t_auto_increment`(`seq_name` tinyint) RETURNS varchar(50) CHARSET utf8
DETERMINISTIC
BEGIN
declare v_prefix VARCHAR(20);
update t_auto_increment a set a.currentvalue=LAST_INSERT_ID(a.currentvalue+a.incrementBy) where a.autoKey=seq_name;
select prefix into v_prefix from t_auto_increment where autoKey=seq_name;
RETURN CONCAT(CASE WHEN v_prefix is null THEN '' ELSE v_prefix END,LAST_INSERT_ID());
END
;;
DELIMITER ;
3、如存在主从热备,二进制日志为确实需要开启,函数不会有大的变动的情况下,可以选择信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求。初始创建时可能会需要手动创建从机函数(未验证)。
设置log_bin_trust_routine_creators全局系统变量为1。设置方法有三种:
- 1.在客户端上执行SET GLOBAL log_bin_trust_function_creators = 1;
- 2.MySQL启动时,加上--log-bin-trust-function-creators选项,参数设置为1
- 3.在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1
参考文章:https://blog.csdn.net/itwxming/article/details/90439327
参考文章:https://blog.csdn.net/weixin_42528534/article/details/116102242
mysql创建函数时提示1418。可选关闭二进制日志或者设置log_bin_trust_function_creators=1的更多相关文章
- MySQL 创建函数失败提示1418
MySQL 创建函数失败提示1418 在创建函数时,往往会遇到创建函数失败的情形,除去书写的创建函数的sql语句本身语法错误之外,还会碰到一个错误就是, 1418:This function has ...
- MySQL创建函数报“ERROR 1418 ”错误,不能创建函数
MySQL创建函数报ERROR 1418错误,不能创建函数,根据官方提示是说,不能创建函数可能是一个安全设置方面的配置或功能未开启原因,下面我们一起来看. 错误 ERROR 1418 (HY000 ...
- MySql 创建函数 Error Code : 1418
查看日志信息:show variables like 'log_%';显示'log_bin'.'log_bin_trust_function_creators'等状态 解决方法: 关闭binary l ...
- [转][mysql]创建函数失败(1418错误)mysql双主模式导致的问题
https://blog.csdn.net/qq523786283/article/details/75102170
- mysql 创建函数ERROR 1418 (HY000): 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_f
mysql 创建函数的时候 报错 ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL D ...
- MySQL 创建函数报错 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
问题描述 通过Navicat客户端,创建MySQL函数(根据的当前节点查询其左右叶子节点)时报错,报错信息如下: This function has none of DETERMINISTIC, NO ...
- oracle与mysql创建表时的区别
oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...
- Mysql创建函数出错
目前在项目中,执行创建mysql的函数出错, mysql 创建函数出错信息如下: Error Code: 1227. Access denied; you need (at least one of) ...
- mysql 创建表时注意事项
mysql 创建表时注意事项 mysql 想必大家都不会陌生吧 是我学习中第一个接触的的数据库 已学习就很快上手的 这是一个关系型数据库 不懂什么是关系型数据库 啊哈哈哈 现在知道啦 因 ...
- Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo
Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: ‘\xE5\x8F\xB0\xE5\xBC\x8F…’ fo 分析如下: 首先通过语句 ...
随机推荐
- 删除File Explorer、This PC、Folders
win+R,输入regedit,打开Registry Editor 定位:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentV ...
- SQL SERVER 截断大日志文件
1.改成完整模式下,先完整备份,然后只备份事务日志2. 改成简单模式,然后截断(运行下边示例代码)3.再备份事务日志(观察LDF文件有没有变小)-----收缩大日志 SELECT * FROM sy ...
- drf从入门到飞升仙界 04
序列化类常用字段和字段参数 常用字段类 #1 BooleanField BooleanField() #2 NullBooleanField NullBooleanField() #3 CharFie ...
- 【linux】grep命令检索大批量日志中的堆栈日志
记得3年前,我为了查看100M日志文件里面的错误堆栈信息,百度了许久都毫无结果 没想到今天再次百度时,一下子看到了grep -A 命令,激动不已. 原来只需要用, grep -A 100 'KeyWo ...
- 基于Java语言的编码问题了解
基于Java语言的编码问题了解 以下仅为本人工作.学习过程中所接触到的内容,不足之处欢迎指出. 近两天使用maven的tomcat插件,以及使用非插件版的tomcat部署项目时遇到了乱码问题,在解决乱 ...
- Python_QT_量化投资/量化交易 基础入门课
量化投资/量化交易 基础入门课 https://www.bilibili.com/video/BV1n4411q7ic?from=search&seid=1127232108574476398 ...
- 解决ubuntu pycharm 中文输入法问题
参考连接:https://blog.csdn.net/frighting_ing/article/details/122725205
- holiday06-英语语法-语序和五种基本句式
第六天 英语五种基本句式: 基本句式一:S V (主+谓) 基本句式二:S V P (主+系+表) 基本句式三:S V O (主+谓+宾) 基本句式四:S V o O(主+谓+间宾+直宾) 基本句式五 ...
- go实现ls
package mainimport ( "fmt" "log" "os")func main () { f,err :=os.Open(& ...
- 5 RDD编程
一.词频统计 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words flatmap() 3.全部转换为小写 lower() 4.去掉长度小于3的单词 filter() 5. ...