加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2020-12-12 02:30:18 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程MYSQL 创建函数出错的解决方案》要点: 本文介绍了MYSQL教程MYSQL 创建函数出错的解决方案,希望对您有用。如果有疑问,可以联系我们。 在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况.下面就教您一个解决MySQL函数不能创建问题的办法,

《MYSQL教程MYSQL 创建函数出错的解决方案》要点:
本文介绍了MYSQL教程MYSQL 创建函数出错的解决方案,希望对您有用。如果有疑问,可以联系我们。

在使用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 operationMYSQL数据库

首先检查创建函数的功能是否开启,检查是否开启创建功能的SQL如下:MYSQL数据库

-- 查看是否开启创建函数的功能
show variables like '%func%';
-- 开启创建函数的功能
set global log_bin_trust_function_creators = 1;

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

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

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

目前问题已经办理.MYSQL数据库

-EOF-MYSQL数据库

案例二:MYSQL数据库

在MySQL创建用户自定义函数时,报以下错误: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数据库

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中断.MYSQL数据库

案例三:MYSQL数据库

Error Code : 1418????MYSQL数据库

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) 

分析:
MYSQL数据库

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

处理过程:MYSQL数据库

登陆mysql数据库MYSQL数据库

> set global log_bin_trust_function_creators = 1;
> start slave;

跟踪mysql的启动日志,slave正常运行,问题办理.MYSQL数据库

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读