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 分析如下: 首先通过语句 ...
随机推荐
- 最简单的asp验证码
<%Public Function BornVerifyCode() Randomize '设置随机因子 BornVerifyCode=Mid((Rnd * 10 ...
- Go 的位操作
在计算机内存昂贵,处理能力有限的美好旧时光里,用比较黑客范的位运算方式去处理信息是首选方式(某些情况下只能如此).时至今日,直接使用位运算仍然是很多计算领域中不可或缺的部分,例如底层系统编程,图形处理 ...
- Android studio学习笔记1
Android studio学习笔记1 20201303张奕博 2023.1.13 studio布局 1.线性布局 Android的线性布局不会换行,当组件一个挨着一个地排列到头之后,剩下的组件将不会 ...
- Linux中的虚拟文件系统
VFS的概念 LINUX下的文件系统可分为三大块: ①一是上层的文件系统的调用 ②二是虚拟文件系统交换器 ③三是挂载到VFS中各实际文件系统,例如ext2,jffs. VFS确切的叫法是"V ...
- 三种方式实现RPC调用
一:RabbitMQ实现RPC调用 客户端: import pika import uuid class FibonacciRpcClient(object): def __init__(self): ...
- 每日一抄 Go语言通信顺序进程简述
package main import ( "fmt" "sync" ) /* Go实现了两种并发形式,第一种是大家普遍认知的多线程共享内存,其实就是 Java ...
- 实验:spring-boot整合mybatis-plus实现分页查询的功能
1.建立基于sping-boot的javaweb工程(java1.8) 按结构建立包 2.POM.XML添加支持mybatis-plus,sql,lombok <!--mybatis-plus的 ...
- HCIA-ICT实战基础08-访问控制列表ACL原理与配置
HCIA-ICT实战基础-访问控制列表ACL原理与配置 目录 ACL技术概述 ACL的基本概念及其工作原理 ACL的基础配置及应用 ACL技术概述 技术背景: 需要一个工具实现流量过滤 ACL是由一系 ...
- eggjs中egg-mysql不支持mysql集群,代码修改为支持集群
说明:暂不支持egg-mysql动态数据源,用到动态数据源请自行修改.欢迎各位大佬指导... 集群配置: exports.mysql = { // 单数据库信息配置 client: { db1: { ...
- 使用signalr不使用连接服务器和前台的js的方法
1:使用这种方式,,就不需要前后台链接的js 2:新建一个empty的MVC项目 3:新建一个controller和index.html 4: 新建一个signalr 集线器类名为PersonHub, ...