[Err] 1418 - 建立函數出錯

錯誤描述

  今天啓用了MySQL二進制日誌,而後再使用MySQL建立函數,運行語句進行建立時老是報以下錯誤:數據庫

   [Err] 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)服務器

  經查閱資料發現原來是由於啓用了MySQL的二進制日誌形成的,通過屢次嘗試發現了三種解決方案。less

解決方案

  方案一函數

    在建立函數的同時爲函數指定一個參數,明確指出函數的類型。由於數據庫啓用bin-log後,在進行主從複製必需要知道這個函數的類型才能同步數據,所以在聲明函數時咱們必須指定咱們的函數的類型,MySQL支持的參數類型有如下五種:spa

    1. DETERMINISTIC 不肯定的日誌

    2. NO SQL 沒有SQl語句,固然也不會修改數據blog

    3. READS SQL DATA 只是讀取數據,固然也不會修改數據同步

    4. MODIFIES SQL DATA 要修改數據it

    5. CONTAINS SQL 包含了SQL語句io

  方案二

  將log_bin_trust_function_creators 設置爲1,啓動MySQL運行下面命令:

    set GLOBAL log_bin_trust_function_creators=1;

  由於二進制日誌的一個重要功能是用於主從複製,而存儲函數有可能致使主從的數據不一致。因此當開啓二進制日誌後,參數log_bin_trust_function_creators就會生效,限制存儲函數的建立、修改、調用。所以,設置這個參數就至關於明確告知MySQL服務器這個函數不會修改數據,這樣就能順利進行函數的建立。

  默認 log_bin_trust_function_creators=0,處於關閉狀態

  設置 log_bin_trust_function_creators=1,處於開啓狀態

  設置好以後就能夠直接建立函數了

相關文章
相關標籤/搜索