MYSQL创建函数出错如何解决


本文摘自PHP中文网,作者小云云,侵删。

在使用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创建函数出现1418错误的解决办法

mysql-php连接数据库出错,什么原因

Mysql 数据迁移后 启动出错

以上就是MYSQL创建函数出错如何解决的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

mysql数据碎片太多怎么办?

通俗易懂讲解mysql数据库的增删改查

mysql运行sql文件时出现问题怎么办

细说mysql死锁与日志二三事

mysql中关于静态变量作用的具体分析

mysql在cmd中怎么安装?

mysql如何查询下一条数据

基于mysql查询语句的使用详解

mysql大量写入问题优化详解

mysql与php的基础与应用专题之创建数据库表

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...