《MYSQL教程MYSQL 創(chuàng)建函數(shù)出錯(cuò)的解決方案》要點(diǎn):
本文介紹了MYSQL教程MYSQL 創(chuàng)建函數(shù)出錯(cuò)的解決方案,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
在使用MySQL數(shù)據(jù)庫(kù)時(shí),有時(shí)會(huì)遇到MySQL函數(shù)不能創(chuàng)建的情況.下面就教您一個(gè)解決MySQL函數(shù)不能創(chuàng)建問題的辦法,供您借鑒參考.MYSQL數(shù)據(jù)庫(kù)
案例一:MYSQL數(shù)據(jù)庫(kù)
目前在項(xiàng)目中,執(zhí)行創(chuàng)建mysql的函數(shù)出錯(cuò),MYSQL數(shù)據(jù)庫(kù)
mysql 創(chuàng)建函數(shù)出錯(cuò)信息如下:MYSQL數(shù)據(jù)庫(kù)
Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operationMYSQL數(shù)據(jù)庫(kù)
首先檢查創(chuàng)建函數(shù)的功能是否開啟,檢查是否開啟創(chuàng)建功能的SQL如下:MYSQL數(shù)據(jù)庫(kù)
-- 查看是否開啟創(chuàng)建函數(shù)的功能 show variables like '%func%'; -- 開啟創(chuàng)建函數(shù)的功能 set global log_bin_trust_function_creators = 1;
執(zhí)行完SQL之后發(fā)現(xiàn)已經(jīng)開啟了,隨檢查自己的SQL是否寫錯(cuò)(因?yàn)镾QL是別人給的,在別人環(huán)境沒問題,在自己的環(huán)境就有可能).MYSQL數(shù)據(jù)庫(kù)
突然發(fā)現(xiàn)了確實(shí)是SQL出現(xiàn)問題,由于他創(chuàng)建的SQL有指定用戶,所以導(dǎo)致出現(xiàn)問題,以下是他的SQL:MYSQL數(shù)據(jù)庫(kù)
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規(guī)范,可以發(fā)現(xiàn)就是DEFINER這個(gè)參數(shù)是可以指定數(shù)據(jù)庫(kù)用戶的,但是自己的庫(kù)卻不是這個(gè)用戶,所以導(dǎo)致問題.MYSQL數(shù)據(jù)庫(kù)
目前問題已經(jīng)辦理.MYSQL數(shù)據(jù)庫(kù)
-EOF-MYSQL數(shù)據(jù)庫(kù)
案例二:MYSQL數(shù)據(jù)庫(kù)
在MySQL創(chuàng)建用戶自定義函數(shù)時(shí),報(bào)以下錯(cuò)誤:MYSQL數(shù)據(jù)庫(kù)
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)
這是因?yàn)橛幸粋€(gè)平安參數(shù)沒有開啟,log_bin_trust_function_creators 默認(rèn)為0,是不允許function的同步的,開啟這個(gè)參數(shù),就可以創(chuàng)建成功了.MYSQL數(shù)據(jù)庫(kù)
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上開啟了該參數(shù),記得在slave端也要開啟這個(gè)參數(shù)(salve需要stop后再重新start),否則在master上創(chuàng)建函數(shù)會(huì)導(dǎo)致replaction中斷.MYSQL數(shù)據(jù)庫(kù)
案例三:MYSQL數(shù)據(jù)庫(kù)
Error Code : 1418????MYSQL數(shù)據(jù)庫(kù)
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數(shù)據(jù)庫(kù)
根據(jù)系統(tǒng)提示,導(dǎo)致該錯(cuò)誤的原因可能是一個(gè)平安設(shè)置方面的配置,查手冊(cè)log_bin_trust_function_creators參數(shù)缺省0,是不允許function的同步的,一般我們?cè)谂渲胷epliaction的時(shí)候,都忘記關(guān)注這個(gè)參數(shù),這樣在master更新funtion后,slave就會(huì)報(bào)告錯(cuò)誤,然后slave stoped.MYSQL數(shù)據(jù)庫(kù)
處理過程:MYSQL數(shù)據(jù)庫(kù)
登陸mysql數(shù)據(jù)庫(kù)MYSQL數(shù)據(jù)庫(kù)
> set global log_bin_trust_function_creators = 1; > start slave;
跟蹤mysql的啟動(dòng)日志,slave正常運(yùn)行,問題辦理.MYSQL數(shù)據(jù)庫(kù)
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MYSQL教程MYSQL 創(chuàng)建函數(shù)出錯(cuò)的解決方案》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/13682.html