MySQL建立自定義函式
在MySQL中建立function的時候出現了"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)"的錯誤資訊。如下圖所示:
出現這個錯誤的原因是:
我們開啟了bin-log日誌(與MySQL的主從複製有關),slave會從master複製資料,而一些操作,比如function所得的結構在master和slave上的可能不同,所以存在潛在的安全隱患。因此預設情況下會組織function的建立。
解決這個問題有兩種辦法:
1、將Mysql Server的“log_bin_trust_function_creators”引數設定為ON,這樣一來開啟了log-bin的MySQL Server便可以隨意建立function。這裡存在潛在的資料安全問題,除非明確的知道建立function在master和slave上的行為完全一致。
我們可以通過命令列來設定該引數,如下所示
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
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 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec)
注:這種方式重啟MySQL服務後設定就會失效,如果想要永久生效,需要在MySQL的配置檔案中顯示配置。另外,如果再mster上建立函式,想通過主從複製的方式將函式複製到slsave上則也需在開啟了log-bin的slave中設定上述變數為ON(變數的設定不會從master複製到slave上,這點需要注意),否則主從複製會報錯。
2、明確指定我們的函式型別
1)、DETERMINISTIC 不確定的
2)、NO SQL 沒有sql語句,不會修改資料
3)、READS SQL DATA 只是讀取資料,當然也不會修改資料
這樣一來相當於明確的告知MySQL Server這個函式不會修改資料,因此可以在開啟了log-bin的伺服器上安全的建立並被複制到開啟了log-bin的salve上。
相關文章
- matlab自定義函式建立與使用Matlab函式
- MySQL全面瓦解18:自定義函式MySql函式
- Hive--->建立自定義的UDTF函式Hive函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- Oracle 自定義函式Oracle函式
- shell自定義函式函式
- Hive常用函式及自定義函式Hive函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- python教程:自定義函式Python函式
- TDengine 3.0 中如何編譯、建立和使用自定義函式編譯函式
- java自定義equals函式和hashCode函式Java函式
- 工廠模式建立物件和自定義建構函式建立物件的異同模式物件函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- Houdini - 建立自定義的button樣式
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式
- Ignite自定義函式注意事項函式
- VBA 自定義常用函式 (備用)函式
- php自定義函式放哪兒PHP函式
- Apache Phoenix自定義函式(UDF)實踐Apache函式
- sql中select列有自定義函式 dblinkSQL函式
- Qt自定義動畫插值函式QT動畫函式
- 單據列表呼叫自定義SQL函式SQL函式
- HIVE自定義函式的擴充套件Hive函式套件
- Excel vba自定義函式公式智慧提示Excel函式公式
- 22.python自定義函式(format,zip)Python函式ORM
- Clickhouse 使用者自定義外部函式函式
- 【vue】自定義一個websocket工具函式VueWeb函式
- 皕傑報表之自定義函式函式
- 動畫函式的繪製及自定義動畫函式動畫函式
- Mysql資料庫自定義函式的定義、使用方法及操作注意事項MySql資料庫函式