MySQL Err 1418 的原因分析及解决方法
admin
2023-04-15 08:02:25
0

MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍、解释如下所示:

MySQL Err 1418  的原因分析及解决方法

This variable applies when binary logging is enabled. It controls whether stored function creators can be trusted not to create stored functions that will cause unsafe events to be written to the binary log. If set to 0 (the default), users are not permitted to create or alter stored functions unless they have the SUPER privilege in addition to the CREATE ROUTINE or ALTER ROUTINE privilege. A setting of 0 also enforces the restriction that a function must be declared with the DETERMINISTIC characteristic, or with the READS SQL DATA or NO SQL characteristic. If the variable is set to 1, MySQL does not enforce these restrictions on stored function creation. This variable also applies to trigger creation. See Section 23.7, “Binary Logging of Stored Programs”.

简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。 请参见第23.7节“Binary Logging of Stored Programs”。

下面我们测试一下,当开启二进制日志后,如果变量log_bin_trust_function_creators为OFF,那么创建或修改存储函数就会报“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_function_creators variable)”这样的错误,如下所示:
MySQL Err 1418  的原因分析及解决方法
在调用存储函数时,也会遇到这个错误,如下测试所示:
MySQL Err 1418  的原因分析及解决方法
MySQL Err 1418  的原因分析及解决方法

那么为什么MySQL有这样的限制呢? 因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。那么此时如何解决这个问题呢?官方文档介绍如下,具体可以参考23.7 Binary Logging of Stored Programs

If you do not want to require function creators to have the SUPER privilege (for example, if all users with the CREATE ROUTINE privilege on your system are experienced application developers), set the global log_bin_trust_function_creators system variable to 1. You can also set this variable by using the --log-bin-trust-function-creators=1 option when starting the server. If binary logging is not enabled, log_bin_trust_function_creators does not apply. SUPER is not required for function creation unless, as described previously, the DEFINER value in the function definition requires it.
If a function that performs updates is nondeterministic, it is not repeatable. This can have two undesirable effects:

· It will make a slave different from the master.

· Restored data will be different from the original data.

To deal with these problems, MySQL enforces the following requirement: On a master server, creation and alteration of a function is refused unless you declare the function to be deterministic or to not modify data. Two sets of function characteristics apply here:

· The DETERMINISTIC and NOT DETERMINISTIC characteristics indicate whether a function always produces the same result for given inputs. The default is NOT DETERMINISTIC if neither characteristic is given. To declare that a function is deterministic, you must specify DETERMINISTIC explicitly.

· The CONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA characteristics provide information about whether the function reads or writes data. Either NO SQL or READS SQL DATA indicates that a function does not change data, but you must specify one of these explicitly because the default is CONTAINS SQL if no characteristic is given.

1: 如果数据库没有使用主从复制,那么就可以将参数log_bin_trust_function_creators设置为1。

mysql> set global log_bin_trust_function_creators=1;

这个动态设置的方式会在服务重启后失效,所以我们还必须在my.cnf中设置,加上log_bin_trust_function_creators=1,这样就会永久生效。

2:明确指明函数的类型,如果我们开启了二进制日志, 那么我们就必须为我们的function指定一个参数。其中下面几种参数类型里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。这样一来相当于明确的告知MySQL服务器这个函数不会修改数据。

1 DETERMINISTIC 不确定的

2 NO SQL 没有SQl语句,当然也不会修改数据

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

4 MODIFIES SQL DATA 要修改数据

5 CONTAINS SQL 包含了SQL语句
MySQL Err 1418  的原因分析及解决方法
MySQL Err 1418  的原因分析及解决方法

相关内容

热门资讯

12名农民工遭遇“车位抵薪”:... 极目新闻记者 舒隆焕陕西西安12名农民工遭遇“车位抵薪”一事有了最新进展。5月12日,极目新闻记者从...
实域科技申请立体相机及其控制方... 国家知识产权局信息显示,深圳实域科技有限公司申请一项名为“立体相机及其控制方法”的专利,公开号CN1...
从“一”到“十”,解码天舟十号... 5月11日8时14分,长征七号运载火箭托举着天舟十号货运飞船在文昌航天发射场腾空而起。约10分钟后,...
他是“遗传算法之父”,也是横跨... “约翰·亨利·霍兰德(John Henry Holland,1929年2月2日-2015年8月9日)...
人形机器人量产元年开启 产业链... 来源:21世纪经济报道 ● 本报记者 刘英杰 今年以来,人形机器人产业频频传来量产消息。从特斯拉弗里...
视频丨新装备、新技术集中亮相 ... 今年5月12日是第18个全国防灾减灾日,主题是“人人讲安全、个个会应急——提高防灾减灾救灾能力”,国...
从一座“灯塔工厂”看海辰储能的... 央广网北京5月12日消息(记者 刘家怡)在重庆市铜梁区,每天有超过10万颗储能电芯下线,发往全球市场...
东莞松山湖高新区“两创融合”催... 当科学家听懂了企业话 东莞松山湖高新区“两创融合”催生新能源新动能 问起扎根东莞松山湖的新能源企业和...
厕所内装摄像头要监控啥 澎湃新闻记者 蒋立冬 阳柳厕所内装摄像头要监控啥“中学在男厕所安装摄像头”一事引发关注。5月11日晚...
原创 港... 大家普遍认为目前的任何钢材都经不起海水的侵蚀腐蚀,但是现如今它的到来将打破这一“铁”的定律!那就是S...