博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql编程--创建函数出错的解决方案
阅读量:7079 次
发布时间:2019-06-28

本文共 2624 字,大约阅读时间需要 8 分钟。

本文章转载自:http://www.jb51.net/article/71100.htm

在使用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 utf8BEGIN 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 | OFF   | +---------------------------------+-------+ 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正常运行,问题解决。

 

转载于:https://www.cnblogs.com/tangwanzun/p/6072770.html

你可能感兴趣的文章
OA系统调研报告:技术推动OA发展
查看>>
使用MonoDevelop开发跨平台的应用程序
查看>>
ERP四大隐形成本,不看不知道!
查看>>
赵永红:光伏行业转型时期更需做好科普
查看>>
D1net阅闻:深港大数据联盟正式成立
查看>>
Juniper光网络大动作,收购Aurrion公司
查看>>
让IT运营适应新兴趋势的3个技巧
查看>>
政府部门推进智慧城市的意愿日趋强烈
查看>>
中间件市场现状到底如何?在云计算、大数据的时代将何去何从?
查看>>
天华阳光同美国PE公司扩大光伏领域战略合作
查看>>
BAT强势入侵SaaS市场,传统巨头的生存哲学
查看>>
如何破解政务大数据共享难题
查看>>
AMD下代APU核显或可达到HD 7850规格
查看>>
报告称中国黑客组织APT10发动全球规模最大的网络间谍活动
查看>>
5G时代:连接和计算无处不在数据释放价值
查看>>
中国铁塔证实在推进赴港上市 募集资金偿债
查看>>
关于新的数据中心设计的考虑指标因素
查看>>
苏格兰最大的数据中心采用百分之百的可再生能源
查看>>
人民日报发布的中国文化知识100题,你真不一定都知道!
查看>>
德国用“大数据”保护土壤
查看>>