MySQL學習筆記:調用存儲過程或函數報1418錯誤
阿新 • • 發佈:2018-05-22
creators HR erro reads term eterm 方法 過程 ini
解決辦法
2.MySQL啟動時,加上--log-bin-trust-function-creators選賢,參數設置為1;
3.在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1;
問題
MySQL開啟bin-log後,調用存儲過程或者函數以及觸發器時,會出現錯誤號為1418的錯誤:
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)
原因
mysql的設置默認是不允許創建函數。
解決辦法
第一種:
在創建子程序(存儲過程、函數、觸發器)時,聲明為DETERMINISTIC或NO SQL與READS SQL DATA中的一個,例如:
CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()
DETERMINISTIC
BEGIN
#Routine body goes here...
END;;
第二種:
信任子程序的創建者,禁止創建、修改子程序時對SUPER權限的要求,設置log_bin_trust_routine_creators全局系統變量為1。設置方法有三種:
1.在客戶端上執行SET GLOBAL log_bin_trust_function_creators = 1;
2.MySQL啟動時,加上--log-bin-trust-function-creators選賢,參數設置為1;
3.在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1;
註意:
- 采用配置文件方法,需要重啟服務;
- 有主從復制的時候,從機必須要設置 ,不然會導致主從同步失敗。
END 2018-05-22 12:59:23
MySQL學習筆記:調用存儲過程或函數報1418錯誤