我的编程空间,编程开发者的网络收藏夹
学习永远不晚

解决MYSQL创建函数出错的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

解决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创建函数出错的问题有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

解决MYSQL创建函数出错的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql创建函数出错

目前在项目中,执行创建mysql的函数出错, mysql 创建函数出错信息如下: Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for t
2022-04-02

mysql创建函数报错怎么解决

当在MySQL中创建函数时,可能会遇到各种错误。以下是一些常见的错误和解决方法:错误:函数已经存在解决方法:如果函数已经存在,则可以使用DROP FUNCTION语句删除函数,然后重新创建函数。错误:语法错误解决方法:检查函数的语法是否
mysql创建函数报错怎么解决
2024-04-09

Mysql之如何创建函数问题

目录mysql如何创建函数Mysql无法创建函数 错误码 1418解决方式总结Mysql如何创建函数DELIMITER $$DROP FUNCTION IF EXISTS genPerson$$CREATE FUNCTION genP
2023-03-10

MySQL 在创建和删除用户时出现的ERROR 1396 (HY000)错误问题解决

目录创建用户出现ERROR 1396 (HY000)错误删除用户出现ERROR 1396 (HY000)错误查看已存在的用户创建用户并授权mysql作为一个开源且广泛使用的关系型数据库管理系统,经常被用于处理各种的数据操作。在MySQL中,
MySQL 在创建和删除用户时出现的ERROR 1396 (HY000)错误问题解决
2024-09-27

oracle创建数据库时出错怎么解决

在Oracle创建数据库时出现错误可能是由于以下几个原因:服务未启动:请确保Oracle服务已经启动。可以在操作系统的服务管理中检查Oracle服务的状态。如果服务未启动,可以尝试手动启动。冲突的端口:Oracle数据库使用默认端口1521
oracle创建数据库时出错怎么解决
2024-04-09

MySQL中CONCAT()函数拼接出现NULL问题如何解决

本文小编为大家详细介绍“MySQL中CONCAT()函数拼接出现NULL问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中CONCAT()函数拼接出现NULL问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
2023-07-05

解决go在函数退出后子协程的退出问题

该问题来源于自己在读fabric源码时,看到的一个测试代码,在一个函数中启用协程,然后该函数退出了,由于平常没有这样处理过,以及受原有c++函数域的影响,认为函数退出,子协程应该也退出了呀。 这其实是自己对go协程的理解不到位引起的,go的
2022-06-07

Mysql匿名登录无法创建数据库问题解决方案

常见问题 Access denied for user ''@'localhost' to database 'web02' //web02是我自己创建的数据库 原因分析:mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致
2022-05-13

C++ 递归函数的栈溢出问题如何解决?

针对 c++++ 递归函数的栈溢出问题,解决方法有:缩小递归深度、减小栈帧大小、尾递归优化。如 fibonacci 数列函数通过尾递归优化可避免栈溢出。C++ 递归函数的栈溢出问题如何解决?原因递归函数会在每次调用时在栈中创建新的栈帧。
C++ 递归函数的栈溢出问题如何解决?
2024-04-17

编程热搜

目录