程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL 創立函數失足的處理計劃

MYSQL 創立函數失足的處理計劃

編輯:MySQL綜合教程

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以下:

-- 檢查能否開啟創立函數的功效
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正常運轉,成績處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved