gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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如下:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
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这个参数是可以指定数据库用户的,但是自己的库却不是这个用户,所以导致问题.

目前问题已经解决.

-EOF- 。

案例二:

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

?
1
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的同步的,开启这个参数,就可以创建成功了.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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     。

?
1
2
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数据库 。

?
1
2
> set global log_bin_trust_function_creators = 1;
> start slave;

  。

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

最后此篇关于MYSQL 创建函数出错的解决方案的文章就讲到这里了,如果你想了解更多关于MYSQL 创建函数出错的解决方案的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com