您好,登錄后才能下訂單哦!
將處理主從故障的過程記錄在此:
故障1,Error_code: 1197 (max_binlog_cache_size)
數據庫版本:5.7.9
報錯信息:
[ERROR] Slave SQL for channel '': Worker 1 failed executing transaction 'bea4612c-4828-11e7-90b3-a0423f31cad6:716212' at master log mysql.135371, end_log_pos 103016490; Could not execute Write_rows event on table ******; Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again, Error_code: 1197; Writing one row to the row-based binary log failed, Error_code: 1534; handler error HA_ERR_RBR_LOGGING_FAILED; the event's master log FIRST, end_log_pos 103016490, Error_code: 1197
處理過程:
根據報錯信息,知道是max_binlog_cache_size小了,
解決辦法:臨時增加該值后restart slave即可以繼續復制線程。
stop slave; set global max_binlog_cache_size= 201326592; start slave;
關于max_binlog_cache_size請看這里:
如果一個事務需要多于設置值的內存,就會報上面的錯。最小4096字節,最大支持4GB,因為binlog位置點最大4GB,支持動態修改。
解決了問題,繼續查找發生問題的原因,生產環境中的該參數設置為64M,當一個事務影響的數據量超過該值時,即會報錯。
查看主庫中日志的具體內容:
數據庫日志格式為mixed,文件中記錄的是row格式,使用下面命令查看
/bin/mysqlbinlog -vv --base64-output=decode-rows mysql.135371 | more
精簡后的內容: # 13:43:59 server id ******* end_log_pos 10538 CRC32 Write_rows: table id 2776 # at 10538 # 13:43:59 server id ******* end_log_pos 18175 CRC32 Write_rows: table id 2776 # at 18175 # 13:43:59 server id ******* end_log_pos 25789 CRC32 Write_rows: table id 2776 # at 25789 # 13:43:59 server id ******* end_log_pos 33424 CRC32 Write_rows: table id 2776 # at 33424 # 13:43:59 server id ******* end_log_pos 40961 CRC32 Write_rows: table id 2776 # at 40961 # 13:43:59 server id ******* end_log_pos 48553 CRC32 Write_rows: table id 2776 # at 48553 # 13:43:59 server id ******* end_log_pos 56126 CRC32 Write_rows: table id 2776 # at 56126 # 13:43:59 server id ******* end_log_pos 63671 CRC32 Write_rows: table id 2776 # at 63671 # 13:43:59 server id ******* end_log_pos 71205 CRC32 Write_rows: table id 2776 # at 71205 # 13:43:59 server id ******* end_log_pos 78753 CRC32 Write_rows: table id 2776 # at 78753 # 13:43:59 server id ******* end_log_pos 86322 CRC32 Write_rows: table id 2776 # at 86322 # 13:43:59 server id ******* end_log_pos 93925 CRC32 Write_rows: table id 2776
不出意外,執行的sql為
insert into table1 select * from table2 where time > '2016-10-01'
形式的多語句事務,查看binlog文件的大小,最大的超過了200M(max_binlog_size設置為50M)。
因此是大事務造成的,大事務還容易造成主從延時的問題,推薦將大事務拆分為小事務執行
107M 14:07 mysql.135380 101M 14:08 mysql.135381 112M 14:08 mysql.135382 110M 14:09 mysql.135383 124M 14:09 mysql.135384 31M 14:10 mysql.135385 226M 14:10 mysql.135386 120M 14:12 mysql.135387 111M 14:13 mysql.135388 102M 14:14 mysql.135389 ... 126M 14:16 mysql.135394 ... 118M 14:23 mysql.135404 ... 110M 14:28 mysql.135409 63M 14:29 mysql.135410 104M 14:29 mysql.135411 281 14:30 mysql.135412 115M 14:30 mysql.135413 112M 14:30 mysql.135414 127M 14:30 mysql.135415 119M 14:31 mysql.135416 85M 14:32 mysql.135417 60M 14:32 mysql.135418 151M 14:33 mysql.135419
故障2,Errno: 1872,Error: Slave failed to initialize relay log info structure from the repository
數據庫在 'in place' 升級之后報出該錯誤,重啟主從后問題解決
查看問題有人說原因是從庫信息變化導致的,解決方法可以reset slave,重新change master。
歡迎批評指正
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。