国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MYSQL 創(chuàng)建函數(shù)出錯的解決方案

2024-07-24 13:07:51
字體:
來源:轉載
供稿:網(wǎng)友

在程序開發(fā)過程中,大家有沒有遇到過mysql函數(shù)不能創(chuàng)建,我是遇到過,是一個很麻煩的問題,上網(wǎng)搜了些相關資料,整理在一起了,供大家參考,幫助那些需要幫助的朋友

在使用MySQL數(shù)據(jù)庫時,有時會遇到MySQL函數(shù)不能創(chuàng)建的情況。下面就教您一個解決MySQL函數(shù)不能創(chuàng)建問題的方法,供您借鑒參考。

案例一:

目前在項目中,執(zhí)行創(chuàng)建mysql的函數(shù)出錯,

mysql 創(chuàng)建函數(shù)出錯信息如下:

Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

首先檢查創(chuàng)建函數(shù)的功能是否開啟,檢查是否開啟創(chuàng)建功能的SQL如下:

 

 
  1. -- 查看是否開啟創(chuàng)建函數(shù)的功能 
  2. show variables like '%func%'
  3. -- 開啟創(chuàng)建函數(shù)的功能 
  4. set global log_bin_trust_function_creators = 1; 

執(zhí)行完SQL之后發(fā)現(xiàn)已經開啟了,隨檢查自己的SQL是否寫錯(因為SQL是別人給的,在別人環(huán)境沒問題,在自己的環(huán)境就有可能)。

突然發(fā)現(xiàn)了確實是SQL出現(xiàn)問題,由于他創(chuàng)建的SQL有指定用戶,所以導致出現(xiàn)問題,以下是他的SQL:

 

 
  1. DROP FUNCTION IF EXISTS `nextval`; 
  2. DELIMITER ;; 
  3. CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8 
  4. BEGIN 
  5. DECLARE seq_max BIGINT(20); 
  6. UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name;  
  7. SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ; 
  8. RETURN seq_max;  
  9. END 
  10. ;; 
  11. DELIMITER ; 

由于CREATE_FUNCTION規(guī)范,可以發(fā)現(xiàn)就是DEFINER這個參數(shù)是可以指定數(shù)據(jù)庫用戶的,但是自己的庫卻不是這個用戶,所以導致問題。

目前問題已經解決。

-EOF-

案例二:

在MySQL創(chuàng)建用戶自定義函數(shù)時,報以下錯誤:

 

 
  1. 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) 

這是因為有一個安全參數(shù)沒有開啟,log_bin_trust_function_creators 默認為0,是不允許function的同步的,開啟這個參數(shù),就可以創(chuàng)建成功了。

 

 
  1. mysql> show variables like '%fun%';  
  2. +---------------------------------+-------+  
  3. | Variable_name | Value |  
  4. +---------------------------------+-------+  
  5. | log_bin_trust_function_creators | ON |  
  6. +---------------------------------+-------+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql> set global log_bin_trust_function_creators=1;  
  10. Query OK, 0 rows affected (0.00 sec)  
  11.  
  12. mysql> show variables like '%fun%';  
  13. +---------------------------------+-------+  
  14. | Variable_name | Value |  
  15. +---------------------------------+-------+  
  16. | log_bin_trust_function_creators | ON |  
  17. +---------------------------------+-------+  
  18. 1 row in set (0.00 sec) 

如果是在有master上開啟了該參數(shù),記得在slave端也要開啟這個參數(shù)(salve需要stop后再重新start),否則在master上創(chuàng)建函數(shù)會導致replaction中斷。

案例三:

Error Code : 1418

 

 
  1. 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)  
  2. (0 ms taken) 

分析:

根據(jù)系統(tǒng)提示,導致該錯誤的原因可能是一個安全設置方面的配置,查手冊log_bin_trust_function_creators參數(shù)缺省0,是不允許function的同步的,一般我們在配置repliaction的時候,都忘記關注這個參數(shù),這樣在master更新funtion后,slave就會報告錯誤,然后slave stoped。

處理過程:

登陸mysql數(shù)據(jù)庫

 

 
  1. > set global log_bin_trust_function_creators = 1; 
  2. > start slave; 

跟蹤mysql的啟動日志,slave正常運行,問題解決。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 渑池县| 久治县| 拉萨市| 宝兴县| 元氏县| 邹城市| 武城县| 武安市| 大余县| 河西区| 南乐县| 屏东市| 雅安市| 浦县| 大埔区| 凤台县| 依兰县| 双鸭山市| 建平县| 五寨县| 澄城县| 和硕县| 天气| 石首市| 桐乡市| 澄江县| 阿城市| 双城市| 康马县| 凤阳县| 宿松县| 南开区| 靖西县| 玉树县| 贵德县| 镇康县| 铁岭市| 广宁县| 英超| 富锦市| 峨眉山市|