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正常运行,问题解决。

时间: 2024-11-09 00:17:40

MYSQL 创建函数出错的解决方案的相关文章

MYSQL 创建函数出错的解决方案_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如下: -

sql 函数-mysql创建函数一直提示语句错误

问题描述 mysql创建函数一直提示语句错误 我在数据库的部门表里存的树形结构,在已知子部门时向上查找所有父级部门,写的函数如下 CREATE FUNCTION queryAllDept(@currdeptid varchar(50)) returns varchar(200) BEGIN declare @allname varchar(200) DEFAULT ''; declare @tempname varchar(200) DEFAULT ''; declare @tempparid

MySQL创建存储过程出错

问题描述 MySQL创建存储过程出错 解决方案 答案就在这里:如何在mysql 6.0.2下创建存储过程? 解决方案二: 你确定不是CREATE TABLE ?还有你这截屏这么小?看不清,,,, 解决方案三: 解决方案四: 解决方案五: 不知道,过程怎么创建?

mysql创建函数出现1418错误的解决办法

本篇文章是对在Mysql中创建函数报"ERROR 1418"的解决方法进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: 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_

MySQL创建函数出现1418错误解决办法总结

代码如下: 错误码: 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) 这个是创建函数功能未开. (you *might* want to use

MySQL创建函数报“ERROR 1418 ”错误,不能创建函数

错误 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) ERROR 1418 (HY000): This funct

mysql创建函数出现1418错误的解决办法_Mysql

复制代码 代码如下: 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) 分析:根据系统提示,导

mysql创建触发器报错,请高手帮忙看下

问题描述 mysql创建触发器报错,请高手帮忙看下 DROP TABLE if EXISTS tb; CREATE TABLE tb(BH CHAR(16),content VARCHAR(20),date DATETIME,val INT); CREATE TRIGGER tri_NewBH BEFORE INSERT ON tb FOR EACH ROW BEGIN DECLARE dt CHAR(8) DECLARE bh_id CHAR(16) DECLARE number INT(1)

在服务器的mysql中创建自定义函数出错

问题描述 在服务器的mysql中创建自定义函数出错 我的一台机器,连接服务器上mysql,创建自定义函数报错[Err] 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