MYSQL建立函數出錯如何解決

小云云
發布: 2018-01-13 13:57:09
原創
1742 人瀏覽過

在使用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正常運行,問題解決。

相關推薦:

mysql建立函數出現1418錯誤的解決方案

mysql-php連接資料庫出錯,什麼原因

Mysql 資料遷移後啟動出錯#

以上是MYSQL建立函數出錯如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!