本文摘自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 》频道 >>
¥41.1元 机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MYSQL创建函数出错如何解决