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

 更新时间:2015年08月14日 15:40:09   作者:索探者  
在程序开发过程中,大家有没有遇到过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正常运行,问题解决。

相关文章

  • 解决MySql8.0 查看事务隔离级别报错的问题

    解决MySql8.0 查看事务隔离级别报错的问题

    这篇文章主要介绍了解决MySql8.0 查看事务隔离级别报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 在同一Linux下安装两个版本的MySQL的流程步骤

    在同一Linux下安装两个版本的MySQL的流程步骤

    打工人奉旨制作数据库服务的虚拟机模板,模板中包含各种数据库,其中mysql需要具备5.7及8.0两个版本,并保证服务能正常同时使用,所以本文给小编介绍了在同一Linux下安装两个版本的MySQL的流程步骤,需要的朋友可以参考下
    2024-03-03
  • MYSQL 浅谈MyISAM 存储引擎

    MYSQL 浅谈MyISAM 存储引擎

    mysql中用的最多存储引擎就是innodb和myisam。做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对《高性能MYSQL》书中提到的myisam的理解,请大家多多指教
    2012-04-04
  • Mysql5.7在Centos6中的安装方法

    Mysql5.7在Centos6中的安装方法

    这篇文章主要介绍了Mysql5.7在Centos6中的安装方法,需要的朋友可以参考下
    2017-06-06
  • mysql学习笔记之帮助文档

    mysql学习笔记之帮助文档

    本文给大家详细讲述的是mysql的help(帮助)命令的用法,非常细致,有需要的小伙伴可以来参考下
    2017-02-02
  • mysql 8.0.15 压缩版安装图文教程

    mysql 8.0.15 压缩版安装图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.15 压缩版安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • SQL数据库十四种案例介绍

    SQL数据库十四种案例介绍

    大家好,本篇文章主要讲的是SQL数据库十四种案例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MySQL索引失效原理

    MySQL索引失效原理

    索引可以加快查找速度是因为,在每一层的兄弟节点之间,索引是有序的,因此可以通过二分法快速定位到相应位置。如果一些操作破坏了索引排列的有序性或者不能利用索引的有序性,这个索引自然就失效了,下文更详细说明,需要的朋友可以参考一下
    2021-12-12
  • MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL中索引优化distinct语句及distinct的多字段操作

    这篇文章主要介绍了MySQL中索引优化distinct语句及distinct的多字段操作方法,distinct语句去重功能的使用是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • Mysql怎么存储json格式数据详解

    Mysql怎么存储json格式数据详解

    在开发中遇到存取html值的情况,并且要根据id进行实时返回,在做的时候想到了mysql的json类型存储,下面这篇文章主要给大家介绍了关于Mysql怎么存储json格式数据的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论