您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页MYSQL创建函数出错的解决方案

MYSQL创建函数出错的解决方案

来源:爱go旅游网
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 utf8BEGIN

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这个参数是可以指定数据库⽤户的,但是⾃⼰的库却不是这个⽤户,所以导致问题。⽬前问题已经解决。-EOF-案例⼆:

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

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, 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) (0 ms taken)

分析:

根据系统提⽰,导致该错误的原因可能是⼀个安全设置⽅⾯的配置,查⼿册log_bin_trust_function_creators参数缺省0,是不允许function的同步的,⼀般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped。处理过程:登陆mysql数据库

> set global log_bin_trust_function_creators = 1;> start slave;

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务