匯入預存程序/函數時遇到:
you *might* want to use the less safe log_bin_trust_function_creators variable
啟用二進制日誌(log_bin)時,MySQL 要求建立函數/觸發器的使用者需具備 SUPER 權限,或函數必須宣告為 DETERMINISTIC、NO SQL 或 READS SQL DATA。否則禁止建立,以防主從同步不一致。
方法 1:修改配置檔(永久生效,需重啟)
# /etc/my.cnf 或 my.ini
[mysqld]
log_bin_trust_function_creators = 1
方法 2:動態設定(立即生效,重啟失效)
SET GLOBAL log_bin_trust_function_creators = 1;
設定完成後重新匯入即可成功。
匯入預存程序時出現:
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
預存程序內包含多條 SQL 語句,預設分號 ; 會被 MySQL 客戶端視為語句結束,導致 CREATE PROCEDURE 語句不完整。
DELIMITER //
CREATE PROCEDURE p8()
BEGIN
DECLARE a INT;
DECLARE b INT;
SET a = 5;
SET b = 5;
DECLARE cur0 CURSOR FOR SELECT pkid FROM T_VSM_SECPOLICY_USERGROUP;
END//
DELIMITER ;
DELIMITER //:將語句結束符暫時改為 //; 不再被視為結束符END//:使用新結束符標記程序結束DELIMITER ;:恢復預設結束符DELIMITER //,結尾加 DELIMITER ;DETERMINISTIC 或 READS SQL DATA 特性宣告,配合 log_bin_trust_function_creators=0 更安全mysqldump --routines --triggers 確保完整備份