MYSQL 創(chuàng)建函數(shù)出錯(cuò)的解決方案
在使用MySQL數(shù)據(jù)庫(kù)時(shí),有時(shí)會(huì)遇到MySQL函數(shù)不能創(chuàng)建的情況。下面就教您一個(gè)解決MySQL函數(shù)不能創(chuàng)建問(wèn)題的方法,供您借鑒參考。
案例一:
目前在項(xiàng)目中,執(zhí)行創(chuàng)建mysql的函數(shù)出錯(cuò),
mysql 創(chuàng)建函數(shù)出錯(cuò)信息如下:
Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation
首先檢查創(chuàng)建函數(shù)的功能是否開(kāi)啟,檢查是否開(kāi)啟創(chuàng)建功能的SQL如下:
-- 查看是否開(kāi)啟創(chuàng)建函數(shù)的功能 show variables like '%func%'; -- 開(kāi)啟創(chuàng)建函數(shù)的功能 set global log_bin_trust_function_creators = 1;
執(zhí)行完SQL之后發(fā)現(xiàn)已經(jīng)開(kāi)啟了,隨檢查自己的SQL是否寫(xiě)錯(cuò)(因?yàn)镾QL是別人給的,在別人環(huán)境沒(méi)問(wèn)題,在自己的環(huán)境就有可能)。
突然發(fā)現(xiàn)了確實(shí)是SQL出現(xiàn)問(wèn)題,由于他創(chuàng)建的SQL有指定用戶,所以導(dǎo)致出現(xiàn)問(wèn)題,以下是他的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規(guī)范,可以發(fā)現(xiàn)就是DEFINER這個(gè)參數(shù)是可以指定數(shù)據(jù)庫(kù)用戶的,但是自己的庫(kù)卻不是這個(gè)用戶,所以導(dǎo)致問(wèn)題。
目前問(wèn)題已經(jīng)解決。
-EOF-
案例二:
在MySQL創(chuàng)建用戶自定義函數(shù)時(shí),報(bào)以下錯(cuò)誤:
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ù)沒(méi)有開(kāi)啟,log_bin_trust_function_creators 默認(rèn)為0,是不允許function的同步的,開(kāi)啟這個(gè)參數(shù),就可以創(chuàng)建成功了。
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上開(kāi)啟了該參數(shù),記得在slave端也要開(kāi)啟這個(gè)參數(shù)(salve需要stop后再重新start),否則在master上創(chuàng)建函數(shù)會(huì)導(dǎo)致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)
分析:
根據(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。
處理過(guò)程:
登陸mysql數(shù)據(jù)庫(kù)
> set global log_bin_trust_function_creators = 1; > start slave;
跟蹤mysql的啟動(dòng)日志,slave正常運(yùn)行,問(wèn)題解決。
相關(guān)文章
mysql 1130錯(cuò)誤,無(wú)法登錄遠(yuǎn)程服務(wù)的解決
這篇文章主要介紹了mysql 1130錯(cuò)誤,無(wú)法登錄遠(yuǎn)程服務(wù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03MySQL處理重復(fù)數(shù)據(jù)的學(xué)習(xí)筆記
在本篇文章里小編給大家分享的是一篇關(guān)于MySQL處理重復(fù)數(shù)據(jù)的學(xué)習(xí)筆記,需要的朋友們可以參考下。2020-03-03RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼
這篇文章主要給大家介紹了關(guān)于RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12MySQL8.0開(kāi)啟遠(yuǎn)程連接權(quán)限的方法步驟
MySQL8.0設(shè)置遠(yuǎn)程訪問(wèn)權(quán)限,找了一圈都沒(méi)找到一個(gè)適用的,索性自己寫(xiě)一個(gè),這篇文章主要給大家介紹了關(guān)于MySQL8.0開(kāi)啟遠(yuǎn)程連接權(quán)限的方法步驟,需要的朋友可以參考下2022-06-06深入理解MySQL中MVCC與BufferPool緩存機(jī)制
這篇文章主要介紹了深入理解MySQL中MVCC與BufferPool緩存機(jī)制,MySQL默認(rèn)RR隔離級(jí)別就是通過(guò)該機(jī)制來(lái)保證的MVCC,更多主題相關(guān)內(nèi)容,需要的可以參考下面文章內(nèi)容介紹2022-05-05mysql jdbc連接步驟及常見(jiàn)參數(shù)
這篇文章主要介紹了mysql jdbc連接步驟及常見(jiàn)參數(shù),需要的朋友可以參考下2015-09-09MySql存儲(chǔ)表情報(bào)錯(cuò)的排查解決
隨著互聯(lián)網(wǎng)的發(fā)展,產(chǎn)生了許多新類型的字符,例如emoji這種類型的符號(hào),也就是我們通常在聊天時(shí)發(fā)的小黃臉表情,下面這篇文章主要給大家介紹了關(guān)于MySql存儲(chǔ)表情報(bào)錯(cuò)的排查解決,需要的朋友可以參考下2022-07-07