日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

故障分析--主从复制故障1

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 故障分析--主从复制故障1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

報錯內容

2016-04-29 00:09:57 9242 [ERROR] Slave SQL: Error '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)' on query. Default database: 'epsp_db'. Query: 'CREATE DEFINER=`unionpayb2b`@`%` FUNCTION `currval`(v_seq_name VARCHAR(50)) RETURNS int(11) BEGIN DECLARE val,val1 INTEGER; SET val = 0; SELECT current_val INTO val1 FROM tbl_sequence WHERE seq_name = v_seq_name; IF (val1 IS NULL)THENINSERT INTO tbl_sequence VALUES(v_seq_name,0,1);ELSESET val=val1;END IF;RETURN val; END', Error_code: 1418 2016-04-29 00:09:57 9242 [Warning] Slave: 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) Error_code: 1418 2016-04-29 00:09:57 9242 [Warning] Slave: Failed to CREATE FUNCTION currval Error_code: 1307 2016-04-29 00:09:57 9242 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000002' position 326441 2016-04-29 00:10:01 9242 [Note] /data/mysql/base/bin/mysqld: Normal shutdown

?

錯誤分析1

根據錯誤信息得知由于創建的這個函數對數據的操作對于replication場景,存在不確定性,也就是說這個函數在主庫和從庫上執行可能產生不一樣的結果。 所以該函數在從庫應用時產生了錯誤,并導致從庫sql apply中斷,錯誤信息中也記錄了中斷的文件及對應的position點

?

錯誤分析2

根據錯誤信息給出的提示,可能需要設置log_bin_trust_function_creators這個變量來解決這個錯誤 通過查詢官方文檔,得知了該參數的含義:log_bin_trust_function_creators這是一個安全參數,針對于主從復制時對于函數和觸發器的處理,默認值為0,表示不允許對數據操作存在不確定性的函數和觸發器的創建,因為這類語句會導致主從數據不一致的情況發生。同時官方文檔對這類語句產生不一致的場景進行了進一步說明:通常二進制日志設置為statement或mixed格式時會出現這種情況,如果是row格式則不會,因為row格式不是記錄的對這個函數的調用語句,而是記錄的函數調用后對行的改變的記錄。同樣對于觸發器也是一樣。所以在基于row格式的情況下不會發生這種不一致的情況。mixed格式雖然會根據不同的情況動態的使用statement或row格式,但對于函數和觸發器,mixed總是使用statement方式進行記錄,所以基于mixed格式也會存在這種問題。官方鏈接說明:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html

?

解決辦法

[master/slave]修改二進制日志格式為row格式
  SHOW VARIABLES LIKE 'BIN%';
  SET GLOBAL BINLOG_FORMAT=ROW
  SET SESSION BINLOG_FORMAT=ROW
  #vi /etc/my.cnf
   ##add
    binlog_format = 1[master/slave]修改log_bin_trust_function_creators參數,將其設置為1
  SHOW VARIABLES LIKE 'LOG_BIN_TRUST_FUNCTION_CREATORS';
SET GLOBAL log_bin_trust_function_creators = 1;

提前啟用該參數,避免主從復制時函數或觸發器導致從庫復制中斷的問題,
但由于該參數開啟后,如果不是基于row格式的復制,很難保證當執行相關自定義的函數時,對數據的操作在主從上是一致的,存在不確定性,這也是為什么MySQL默認是
禁止這類函數和觸發器的原因,目的是為了保持主從數據的一致性。所以建議可能的情況下,還是采用基于row格式的復制,并開啟該參數,避免產生相關錯誤。
同時也要關注不同的日志格式的區別及對性能的影響。

?

轉載于:https://www.cnblogs.com/zhenxing/p/5460062.html

總結

以上是生活随笔為你收集整理的故障分析--主从复制故障1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。