mysql 1418 错误原因及解决
mysql 1418错误原因及解决
使用mysql创建、调用存储过程,函数以及触发器的时候会有错误符号为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)
因为
CREATE PROCEDURE,
CREATE FUNCTION,
ALTER PROCEDURE,
ALTER FUNCTION,
CALL,
DROP PROCEDURE,
DROP FUNCTION
等语句都会被写进二进制日志,然后在从服务器上执行。但是,一个执行更新的不确定子程序(存储过程、函数、触发器)是不可重复的,在从服务器上执行(相对与主服务器是重复执行)可能会造成恢复的数据与原始数据不同,从服务器不同于主服务器的情况。
为了解决这个问题,MySQL强制要求:
在主服务器上,除非子程序被声明为确定性的或者不更改数据,否则创建或者替换子程序将被拒绝。这意味着当创建一个子程序的时候,必须要么声明它是确定性的,要么它不改变数据。
声明方式有两种:
第一种:声明是否是确定性的
DETERMINISTIC和NOT DETERMINISTIC指出一个子程序是否对给定的输入总是产生同样的结果。
如果没有给定任一特征,默认是NOT DETERMINISTIC,所以必须明确指定DETERMINISTIC来声明一个子程序是确定性的。
这里要说明的是:使用NOW() 函数(或它的同义)或者RAND() 函数不会使一个子程序变成非确定性的。对NOW()而言,二进制日志包括时间戳并会被正确的执行。RAND()只要在一个子程序内被调用一次也可以被正确的复制。所以,可以认为时间戳和随机数种子是子程序的确定性输入,它们在主服务器和从服务器上是一样的。
第二种:声明是否会改变数据
CONTAINS SQL, NO SQL, READS SQL DATA, MODIFIES SQL用来指出子程序是读还是写数据的。
无论NO SQL还是READS SQL DATA都指出,子程序没有改变数据,但是必须明确地指定其中一个,因为如果任何指定,默认的指定是CONTAINS SQL。
默认情况下,如果允许CREATE PROCEDURE 或CREATE FUNCTION 语句被接受,就必须明确地指定DETERMINISTIC 或 NO SQL与READS SQL DATA 中的一个,否则就会产生1418错误。
解决方法:
解决办法也有两种,
第一种
是在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个,
例如:
CREATE DEFINER = CURRENT_USER PROCEDURE NewProc
()
DETERMINISTIC
BEGIN
#Routine body goes here…
END;
第二种
是信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求,设置log_bin_trust_routine_creators全局系统变量为1。
设置方法有三种:
1.在客户端上执行SET GLOBAL log_bin_trust_function_creators = 1;
2.MySQL启动时,加上–log-bin-trust-function-creators选贤,参数设置为1
3.在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1
mysql 1418 错误原因及解决相关推荐
- mysql 1418错误_mysql 1418错误原因及解决
摘自 http://blog.sina.com.cn/s/blog_6f68845001013k8a.html 具体错误: 使用mysql创建.调用存储过程,函数以及触发器的时候会有错误符号为1418 ...
- LunarPages空间500错误原因及解决办法
我们在使用LunarPages空间时,有时在安装程序时可能经常出现500错误这一般是由于服务器内部出现的错误引起的,那么导致500错误原因有哪些呢?又该如何解决呢?下面来说说500错误常见原因及解决办 ...
- 10038 mysql,关于MySql 10038错误的完美解决方法(三种)
第一种方法: 第一步: 先看报错窗口 2003 can't connect to MySQL server on '127.0.0.1'(10038). 第二步: 原因是:远程3306端口未对外开放操 ...
- mysql10038_关于MySql 10038错误的完美解决方法(三种)
本文给大家带来三种有关mysql报10038错误的解决方法,每种方法都非常不错,需要的朋友参考下 第一种方法: 第一步: 先看报错窗口 2003 can't connect to MySQL serv ...
- mysql装不上怎么办_MySQL数据库之mysql安装不上怎么办 mysql安装失败原因和解决方法...
本文主要向大家介绍MySQL数据库之mysql安装不上怎么办 mysql安装失败原因和解决方法了 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. mysql数据库安装不了了!my ...
- “adb不是内部或外部命令,也不是可执行的应用程序”错误原因及解决方法
用SQLite时,可能会出现这样的错误. 原因可能是环境变量PATH没有配置或配置不正确.应该把adb.exe 所在目录加入到PATH环境变量.例如:C:\Program Files\android- ...
- ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....
[标题] ASP.NET常见错误,原因及解决方法[错误提示] 异常详细信息: System.Net.WebException: 请求因 HTTP 状态 401 失败:Un ...
- hibernate xxx is not mapped 错误原因及解决方法
hibernate xxx is not mapped 错误原因及解决方法 参考文章: (1)hibernate xxx is not mapped 错误原因及解决方法 (2)https://www. ...
- 【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式。...
[翻译自mos文章]使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式. 使用aum( Automatic Undo Manage ...
最新文章
- 真牛X!这款通用数据库连接工具DBeaver!可以连接和操作市面所有的数据库!...
- Makelife的使用
- 第14章 结构和其他数据形式 14.12 typedef 简介
- Kafka:Kafka核心概念
- Android中Spinner的使用
- elasticsearch7.9.2 安装配置
- ZOJ 3962:Seven Segment Display(思维)
- EcmaScript正則表達式( 深入淺出系列之淺出 )
- pentaho DI--- Tutorial (spoon)
- 2 数据源配置_论多数据源(读写分离)的实现方案
- css html 语法,CSS基础语法
- Scikit-learn:模型评估Model evaluation 之绘图
- 微信支付——微信H5支付实战教程(微信支付v3版本java)
- 2021年材料员-岗位技能(材料员)新版试题及材料员-岗位技能(材料员)考试试卷
- ThinkPad E430 蓝牙驱动 BCM43142A0
- UTM-wgs84投影坐标系
- OpenCV 利用高斯模糊实现简单的磨皮美颜效果
- JEPF项目初上手,一把辛酸泪
- 常见的USB接口种类以及区别
- 在RHEL6.0 X64系统中安装oracle 11g数据库及安装后设置