1. 程式人生 > >MySQL學習筆記:調用存儲過程或函數報1418錯誤

MySQL學習筆記:調用存儲過程或函數報1418錯誤

creators HR erro reads term eterm 方法 過程 ini

問題

  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錯誤