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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况。下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考

本文转自IT摆渡网欢迎转载,请标明出处
摆渡网

更多mysq文章请阅读

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数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 关系型数据库
MySQL 存储函数及调用
本文主要介绍了MySQL存储函数及调用的方法,介绍了存储函数的示例,如何在MySQL中创建存储函数,以及介绍了MySQL中如何创建触发器,一目了然。在MySQL中,存储函数是预定义的SQL逻辑单元,可接收参数并返回单个值。创建存储函数使用`CREATE FUNCTION`语句,如示例中的`square_number`函数,它接收一个整数并返回其平方。调用存储函数就像调用普通函数一样,例如在`SELECT`语句中。存储函数可用于简化复杂逻辑,提高效率。此外,还可以通过`DROP FUNCTION`删除不再需要的函数。示例展示了不同场景下的存储函数应用,包括数字运算、字符串处理和逻辑判断。
90 2
|
1月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
9天前
|
JSON 关系型数据库 MySQL
✅MySQL用了函数到底会不会导致索引失效
MySQL 8.0 引入了函数索引,打破了传统观念,允许在索引中使用函数,提升查询性能。通过创建基于表达式的索引,如 `CONCAT`、`SUBSTRING_INDEX`、`YEAR`、`MONTH` 等,可以优化涉及这些函数的查询。虽然提高了某些查询速度,但也会增加数据维护成本。应谨慎使用,确保表达式确定且适用于常见查询模式。示例包括基于字符串、日期、数学运算和JSON属性的索引。
✅MySQL用了函数到底会不会导致索引失效
|
15天前
|
SQL 监控 关系型数据库
深入解析MySQL死锁:原因、检测与解决方案
深入解析MySQL死锁:原因、检测与解决方案
|
16天前
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
23天前
|
关系型数据库 MySQL 开发者
Mysql COUNT() 函数详解
【6月更文挑战第19天】Mysql COUNT() 函数详解,包括 COUNT() 的用法及 COUNT() 带条件查询的操作
|
24天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
23天前
|
关系型数据库 MySQL
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
【随手记】MySQL中ROW_NUMBER()、RANK()和DENSE_RANK()函数的用法
23 1
|
25天前
|
关系型数据库 MySQL 数据挖掘