当前位置:主页 > mysql教程 > MYSQL 创建函数出错的解决方案

关于MYSQL创建函数出错如何解决

发布:2020-01-26 12:13:48 197


给网友朋友们带来一篇MySQL相关的编程文章,网友容梦华根据主题投稿了本篇教程内容,涉及到mysql、创建函数、MYSQL 创建函数出错的解决方案相关内容,已被880网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

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

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正常运行,问题解决。


参考资料

相关文章

  • MySQL mysqlslap的用法介绍

    发布:2019-11-26

    mysqlslap是mysql自带的一个性能压测工具,mysqlslap用于和其它的一些性能压测工具一样可以自己造数据进行压测。mysqlslap的报告比较简单主要体现在执行的时间方面,没有sysbench那样的tps、qps等更


  • PHP中常用mysql操作小结

    发布:2020-03-12

    本篇文章是对关于php操作mysql执行数据库查询的一些常用操作进行了详细的汇总介绍,非常的细致全面,也很简单,需要的朋友参考下


  • MySql登录时闪退的快速解决办法

    发布:2022-04-02

    这篇文章主要介绍了MySql登录时闪退的快速解决办法的相关资料,需要的朋友可以参考下


  • 如何解决一次非法关机导致mysql数据表损坏的问题

    发布:2020-04-23

    本文介绍由于非法硬件关机,造成了mysql的数据表损坏,数据库不能正常运行的一个实例,接下来是作者排查错误的过程,希望对大家能有所帮助


  • Mysql inner join on的实例讲解

    发布:2020-02-02

    下面小编就为大家带来一篇Mysql inner join on的用法实例(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • 详解如何使用Mysql中的find_in_set

    发布:2020-01-10

    Mysql中的find_in_set的使用方法介绍,需要的朋友可以参考一下


  • windows10下mysql 8.0下载及安装配置教程

    发布:2019-06-19

    这篇文章主要介绍了windows10下mysql 8.0 下载与安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • 总结MySQL主主同步配置方法

    发布:2020-03-13

    创建同步用户、修改 /etc/my.cnf 配置文件,为其添加以下内容、分别重启服务器ODD EVEN 上的mysql服务


网友讨论