失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql创建函数失败问题解决办法

mysql创建函数失败问题解决办法

时间:2018-12-25 04:58:36

相关推荐

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 utf8BEGINDECLARE 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这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题。

目前问题已经解决。

-EOF-

案例二:

在MySQL创建用户自定义函数时,报以下错误:

ERROR 1418 (HY000): Thisfunctionhas noneofDETERMINISTIC,NOSQL,orREADS SQL DATAinits declarationandbinaryloggingisenabled (you *might* wanttouse the less safe log_bin_trust_function_creators variable)

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

mysql> show variableslike '%fun%';+---------------------------------+-------+| Variable_name| Value |+---------------------------------+-------+| log_bin_trust_function_creators |ON |+---------------------------------+-------+1 row inset (0.00 sec)mysql> setglobal log_bin_trust_function_creators=1; Query OK, 0 rows affected (0.00 sec)mysql> show variableslike '%fun%'; +---------------------------------+-------+| Variable_name| Value |+---------------------------------+-------+| log_bin_trust_function_creators |ON |+---------------------------------+-------+1 row inset (0.00 sec)

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

案例三:

Error Code : 1418

Thisfunctionhas noneofDETERMINISTIC,NOSQL,orREADS SQL DATAinits declarationandbinaryloggingisenabled (you *might* wanttouse the less safe log_bin_trust_function_creators variable)(0 ms taken)

分析:

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

处理过程:

登陆mysql数据库

> setglobal log_bin_trust_function_creators = 1;> start slave;

跟踪mysql的启动日志,slave正常运行,问题解决。

如果觉得《mysql创建函数失败问题解决办法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。