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

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

刘广法2022年03月29日 17:19:49数据库4170
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...

数据库教程 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...

数据库教程 设计模式(单例模式、代理模式、工厂模式)

Java中常用的设计模式:概况:1、单例模式饱汉式饿汉式内部类实现2、工厂模式3、代理模式静态代理动态代理num1:单例模式1.1 饱汉式public class Singleton { private static final Stu...

发表评论

访客

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