This function has none of DETEMINISTIC,NO SQL錯誤解決辦法
在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上。
相關文章
- 畢設之錯誤解決辦法
- Idea編譯錯誤解決辦法Idea編譯
- Python:Python3錯誤提示TypeError: slice indices must be integers or None or have an __index__ method解決辦法PythonErrorNoneIndex
- 執行 valet 提示 sudo 問題和 undefined function Valet\collect () 錯誤的解決辦法UndefinedFunction
- ubuntu下import matplotlib錯誤解決辦法UbuntuImport
- Mybatis批量更新SQL報錯☞解決辦法MyBatisSQL
- 解決MySQL server has gone away錯誤的解決方案MySqlServerGo
- Xcode證書管理出現這個錯誤:Your account already has a signing..... 的解決辦法XCode
- 帝國CMS匯入恢復資料MySQL server has gone away錯誤的解決辦法MySqlServerGo
- mysqldump error1066 錯誤的解決辦法MySqlError
- Git 錯誤:fatel: loose object ... is corrupt 解決辦法GitObject
- iOS路上遇到的錯誤及解決辦法iOS
- Mysql出現連線錯誤解決辦法MySql
- ORA-39006錯誤原因及解決辦法
- “command-not-found has crashed” 解決辦法 (*unsolved)
- 安裝wsl錯誤的一種解決辦法
- 【git】Git commit時提示錯誤時 解決辦法GitMIT
- git add .出現錯誤LF will be replaced by CRLF in 解決辦法Git
- CATIA許可證時間錯誤的解決辦法
- kali更新源數字簽名錯誤解決辦法
- Windows git remote: HTTP Basic: Access denied 錯誤解決辦法WindowsGitREMHTTP
- JPA-style positional param was not an integral ordinal錯誤解決辦法
- 錯誤720寬頻連線解決辦法 寬頻連線錯誤程式碼720怎麼解決
- 出現可怕的NoSuchMethodError錯誤的解決辦法 -Gunnar MorlingError
- win10硬體錯誤117怎麼解決?win10硬體錯誤117的解決辦法Win10
- Cargo invocation has failed: Error: exit code: 101.解決辦法CargoAIError
- PHP Warning: exec() has been disabled for security 問題解決辦法PHP
- PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤PHP編譯
- Ubuntu 安裝包時提示錯誤E: Unable to locate package mysql-server錯誤 解決辦法UbuntuPackageMySqlServer
- Steam錯誤程式碼138怎麼辦?無法訪問社群提示138錯誤解決方法
- command 'gcc' failed with exit status 1錯誤問題的解決辦法GCAI
- "Got a packet bigger than 'max_allowed_packet' bytes"錯誤解決辦法Go
- Adobe 2022軟體安裝錯誤程式碼107解決辦法
- catalog is missing 10 attribute(s)錯誤的解決辦法一例
- cnpm link 報錯解決辦法NPM
- 【Error】AttributeError: module ‘scipy.misc‘ has no attribute ‘logsumexp‘ 的解決辦法Error
- tp5.0.20 分頁跳轉時URL錯誤的解決辦法
- mongodb錯誤解決辦法-bash: ./mongod: cannot execute binary file: Exec format errorMongoDBORMError
- 執行 PHP artisan migrate 時報長度錯誤的解決辦法?PHP