mysql 给函数传值出错_MYSQL教程MYSQL 创建函数出错的解决方案

MysqL教程MysqL 创建函数出错的解决方案,希望对您有用。如果有疑问,可以联系我们。

在使用MysqL数据库时,有时会遇到MysqL函数不能创建的情况.下面就教您一个解决MysqL函数不能创建问题的办法,供您借鉴参考.

目前在项目中,执行创建MysqL的函数出错,

Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

首先检查创建函数的功能是否开启,检查是否开启创建功能的sql如下:

-- 查看是否开启创建函数的功能

show variables like '%func%';

-- 开启创建函数的功能

set global log_bin_trust_function_creators = 1;

执行完sql之后发现已经开启了,随检查自己的sql是否写错(因为sql是别人给的,在别人环境没问题,在自己的环境就有可能).

突然发现了确实是sql出现问题,由于他创建的sql有指定用户,所以导致出现问题,以下是他的sql:

DROP FUNCTION IF EXISTS `nextval`;

DELIMITER ;;

CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8

BEGIN

DECLARE seq_max BIGINT(20);

UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name;

SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ;

RETURN seq_max;

END

;;

DELIMITER ;

由于CREATE_FUNCTION规范,可以发现就是DEFINER这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题.

目前问题已经办理.

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)

这是因为有一个平安参数没有开启,log_bin_trust_function_creators 默认为0,是不允许function的同步的,开启这个参数,就可以创建成功了.

MysqL> show variables like '%fun%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| log_bin_trust_function_creators | ON |

+---------------------------------+-------+

1 row in set (0.00 sec)

MysqL> set global log_bin_trust_function_creators=1;

Query OK,0 rows affected (0.00 sec)

MysqL> show variables like '%fun%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| log_bin_trust_function_creators | ON |

+---------------------------------+-------+

1 row in set (0.00 sec)

如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断.

Error Code : 1418

This function has none of DETERMINISTIC,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)

(0 ms taken)

根据系统提示,导致该错误的原因可能是一个平安设置方面的配置,查手册log_bin_trust_function_creators参数缺省0,一般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped.

> set global log_bin_trust_function_creators = 1;

> start slave;

跟踪MysqL的启动日志,slave正常运行,问题办理.

编程之家PHP培训学院每天发布《MysqL教程MysqL 创建函数出错的解决方案》等实战技能,PHP、MysqL、LINUX、APP、JS,CSS全面培养人才。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值