当前位置:首页 > 学习笔记 > 数据库 > MySQL教程 关于导入SQL出现1418错误

MySQL教程 关于导入SQL出现1418错误

刘广法2022年03月29日 17:19:49数据库6970
MySQL教程 关于导入SQL出现1418错误 -第1张图片-刘广法IT博客

1、MySQL 创建函数出现1418错误

[ERR] 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)

此错误也经常发生在使用SQL文件创建数据库的时候。

原来是因为在主从复制的两台 MySQL 服务器中开启了二进制日志选项 log-bin,slave 会从 master 复制数据,一些操作比如 function 所得的结果在 master 和 slave上可能不同,所以存 在潜在的安全隐患。因此,在默认情况下会阻止 function 的创建。也就是说,某些数据库开启 了安全选项,导致 function 不能任意创建。尤其是 mysql8 版本以上,默认都是不允许任意创 建 function 的。

有两种办法来解决这一问题:

1. 将 log_bin_trust_function_creators 参数设置为 ON,这样一来开启了 log-bin 的 MySQL Server 便可以随意创建 function。这里存在潜在的数据安全问题,除非明确知道创建的 function 在 master 和 slave 上的行为完全一致。设置该参数可以用动态的方式或者指定该参 数来启动数据库服务器或者修改配置文件后重启服务器。需要注意的是,动态设置的方式会在服 务器重启后失效。 

使用 show variables like 'log_bin_trust_function_creators'; 可查看当前参数值,如果显示 值为 OFF 表示禁用。

使用 set global log_bin_trust_function_creators=1; 设置参数值为 ON 即可。

另外如果是在 master 上创建函数,想通过主从复制的方式将函数复制到 slave 上则也需在开启 了 log-bin 的 slave 中设置上述变量的值为 ON(变量的设置不会从master 复制到 slave上, 这点需要注意),否则主从复制会报错。

2. 明确指明函数的类型:

DETERMINISTIC 不确定的· NO SQL 没有SQl语句,当然也不会修改数据·

READS SQL DATA 只是读取数据,当然也不会修改数据·

比如: CREATE DEFINER='username'@'%' READS SQL DATA FUNCTION 函数名(参数) RETURNS 返回类 型… 这样一来相当于明确的告知 MySQL 服务器这个函数不会修改数据,因此可以在开启了 logbin 的服务器上安全的创建并被复制到开启了 log-bin 的 slave 上。

注意:如果是使用较低版本(小于 8.0)的 mysql 数据库备份成 sql 文件格式,然后通过运行 sql 的方式来还原到高版本(大于等于 8.0)数据库中,也会出现此问题。此时,使用第 1 种方 式解决即可。


作者为:刘广法,网站地址:https://liuguangfa.com/

扫描二维码推送至手机访问。

版权声明:本文由刘广法博客发布,如需转载请注明出处。

本文链接:https://liuguangfa.com/database/28.html

分享给朋友:

“MySQL教程 关于导入SQL出现1418错误 ” 的相关文章

数据库教程 关于数据库的数据类型以及数据库的约束

数据库教程 关于数据库的数据类型数据库的数据类型:一、整数类型:tinyint:一个字节smallint:两个字节mediumint:三个字节int:四个字节bigint:八个字节二、字符串类型:char:定长字符串,长度不足自动被空格varchar:不定长字符串三、小数类型:float:四个字节d...

数据库教程 触发器

数据库教程 触发器在可视化软件中,可以通过设计表中的触发器进行设置触发器触发器的名:一般来说 tr_ 开头触发条件:AFTER 和 BEFORE 可以选择的插入、更新、删除也就是说可以在插入前后、更新前后、删除前后,触发这个触发器实例一:通过触发器,设置 sex 列,在插入前判断是否是男女...

数据库教程 函数

数据库教程 函数在数据库中常见的函数:year();  年month();  月day();  日hour();  时ceil();  比括号中最小的整数char_;length();  字符长度length();  字节长度md...

数据库教程 存储过程

数据库教程 存储过程关于数据库存储过程的相关描述:1、优点:性能强2、缺点:无法移植3、mysql 存放在函数类型中,不调用不会执行(存储过程需要单独调用)参数类型:in:传入参数out:传出参数intout:既可以传入又可以传出-- 存储过程,不需要返回值create procedure...

数据库教程 jdbc

java 和 数据库 连接技术odbc:淘汰10年了。只能用在windows系统上关于jdbc 的相关描述:关于jdbc的实操七步:package com.liuguangfa.jdbc; import java.sql.Connection; import j...

数据库练习 数据库查询练习 ***

冰人集团系统数据库设计1. 使用MySQL 8.x版本数据库,使用Navicat作为数据库客户端管理图形界面工具。2. 创建名为“iceman2018”的数据库。字符集使用utf8 -- UTF-8 Unicode,排序规则使用utf8_general_ci。3. 创建“部门”表,表名为t_depa...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。