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

(0)

相关推荐

  • MYSQL常见出错代码对照

    常见错误! 1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复. 1044错误:数据库用户权限不足,请联系空间商解决 1045错误:数据库服务器/数据库用户名/数据库名/数据库密码错误,请联系空间商检查帐户. 1054错误:程序文件跟数据库有冲突,请使用正确的程序文件上传上去覆盖. 1146错误:数据表缺失,请恢复备份数据. 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除

  • 安装mysql出错”A Windows service with the name MySQL already exists.“如何解决

    如果以前安装过mysql,卸载重装,很可能会碰到"A Windows service with the name MySQL already exists."这样的提示.即服务已经存在. 我们可以在window任务管理器----服务中查看,发现确实存在,没有卸载干净. 解决这个问题,可以在dos窗口,使用如下命令: 复制代码 代码如下: sc delete mysql 如果成功,出现如下结果: [SC] DeleteService SUCCESS 之后,重启电脑.如果再在任务管理器--

  • MySQL数据库的出错代码列表

    MySQL出错代码列表: 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目录导致删除数据库失败 1011:删除数据库文件失败 1012:不能读取系统表中的记录 1020:记录已被其他用户修改 1021:硬盘剩余空间不足,请加大硬盘可用空间 1022:关键字重复,更改记录失败 1023:关闭时发生错误 1024:读文件错误 1025:更改名字时发生

  • Rails bundle命令安装mysql gem包出错的解决方法

    解决 Rails bundle 安装不上 mysql gem包的问题 环境 ubuntu 12.04 ruby-2.1.1 首先 新建一个的一个项目,在该项目上执行 bundle install 提示 复制代码 代码如下: ... Make sure that gem install mysql2 -v '0.3.16'; succeeds before bundling .... 感觉非常奇怪 最后console提示 复制代码 代码如下: ... /home/wh/.rvm/gems/ruby

  • windows server2014 安装 Mysql Applying Security出错的完美解决方法

    原因就是安装一遍之后没有卸载干净. 解决这个问题需要注意以下几点: 1.手动清除以下文件确保卸载干净 1)mysql的安装目录,一般为C:/Program Files目录下. 2)mysql的数据存放目录,一般在C:/Documents and Settings/All Users/Application Data目录下(需要注意的时Application Data这个文件夹默认是隐藏的,要通过 工具->文件夹选项->查看->显示所有文件与文件夹 来设置隐藏文件可见). 3)除注册表数据

  • 解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题

    在安装SQL Server 2014的过程中,出现.net 3.5缺失,导致失败问题. 后来,研究了下,解决思路如下: 先将电脑更新到了windows 10专业版,(因为需要用到专业版才有的组策略管理器)使用win+R快捷键,打开运行,使用gpedit.msc打开. 然后,启用windows更新, 更改windows更新的策略(更改为通知安装), 然后,启用.net 3.5就能够实现顺利的下载和使用了. 以上所述是小编给大家介绍的解决Windows 10家庭版安装SQL Server 2014出

  • Windows2012配置SQLServer2014AlwaysOn的图解

    SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移.同时可以支持多达9个复制伙伴,可读性辅助副本服务器等多个特性.对于以组为单位的数据库,主要是解决应用对于多个数据库之间存在的依赖性,从而进行整体转移.其次,可以将那些报表或者只读需求转移到只读辅助副本,从而大大减少主副本的负载,使得主副本更加容易扩展,更好地支持生产负载,以及对请求提供更快的响应. 本文描述了基于虚拟环境Windows 2012 + SQLs

  • 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如下: -

  • 微信昵称带符号导致插入MySQL数据库时出错的解决方案

    Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节. 因此会导致带有表情的昵称插入数据库时出错. 只要修改MySQL的编码即可,解决方案如下: 1.在mysql的安装目录下找到my.ini,作如下修改: [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 2 重启mysql服务 3 修改表 ALTER TABLE 表名 CONVERT TO CHARACTER SET

  • MySQL创建横向直方图的解决方案

    前言 直方图(Histogram)是 RDBMS 中提供的一种基础的统计信息,最典型的用途是估计查询谓词的选择率,以便选择优化的查询执行计划.常见的直方图种类有:等宽直方图.等高直方图.V-优化的直方图,MaxDiff 直方图等等. 备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考: scott建表及录入数据sql脚本 一.需求 使用SQL生成横向延伸的直方图. 例如,采用横向直方图显示每个部门的志愿书,一个星号"*"表示一个员工. 返回的结果

  • mysql创建函数出现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_bin_trust_function_creators variable) (0 ms taken) 分析:根据系统提示,导

  • mysql创建存储过程及函数详解

    目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3 DELIMITER 的使用 2. 创建函数  1. 存储过程 1.1. 基本语法 create procedure name ([params]) UNSIGNED [characteristics] routine_body  params : in|out|inout 指定参数列表 代表输入与输出 routine_body: SQL代码内容,以begin ........   end character

  • Mysql之如何创建函数问题

    目录 Mysql如何创建函数 Mysql无法创建函数 错误码 1418 解决方式 总结 Mysql如何创建函数 DELIMITER $$ DROP FUNCTION IF EXISTS genPerson$$ CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50) BEGIN DECLARE str VARCHAR(50) DEFAULT ''; SET @tableName=name; SET str=CONCAT('cr

  • mysql服务启动不了解决方案

    最近在Windows 2003上的MySQL出现过多次正常运行时无法连接数据库故障,现象是无法连接数据库,也无法停止MySQL或重启MYSQL,重启机子也没有效果,由于每次都是草草尝试各种方法搞定即可,一直没有深入研究,下次一定把图和故障现象系统归纳一下.本文先列一下常见的解决方法. 启动mysql服务出现如下的错误信息(MySQL服务无法启动): 本地计算机无法启动mysql服务. 错误 1067:进程意外终止. 解决方案: 运行 复制代码 代码如下: Cd C:\Program Files\

  • mysql创建存储过程实现往数据表中新增字段的方法分析

    本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法.分享给大家供大家参考,具体如下: 需求: 往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作:若该字段不存在,则新增) 百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭 第一版: DELIMITER $$ CREATE PROCEDURE insert_column() BEGIN IF NOT EXISTS(SELECT 1 FROM information_schema.c

  • 详解MySQL实时同步到Oracle解决方案

    1 需求概述 将MySQL5.6生产库多张表的数据实时同步到Oracle11g数据仓库,MySQL历史数据700G,平均每天产生50G左右日志文件,MySQL日志空间50G,超过后滚动删除日志文件.整个同步过程不可影响MySQL业务操作. 2 技术原理 采用灵蜂数据集成软件BeeDI将MySQL数据实时同步到Oracle,通过ETL全量同步历史数据,通过日志解析方式实时同步增量数据. 受限于日志空间,如果将所有历史数据一次性同步,需要的时间会超过一天,全量同步过程产生的日志会被删除,造成实时日志

  • MySQL索引失效场景及解决方案

    目录 一.前言 二.最左前缀匹配原则 三.MySQL逻辑架构和优化器 四.索引失效场景以及为何会失效 五.总结 一.前言 在对SQL语句进行索引查询时会遇到索引失效的时候,对于该语句的可行性以及性能效率方面有至关重要的影响,本篇剖析索引为何失效,有哪些情况会导致索引失效以及对于索引失效时的优化解决方案,其中着重介绍最左前缀匹配原则.MySQL逻辑架构和优化器.索引失效场景以及为何会失效. 二.最左前缀匹配原则 之前有写了一篇关于MySQL添加索引特点及优化问题方面的文章,下面将介绍索引失效的相关

随机推荐