Mysql

1236 在 Master Master 故障後在 Slave 上

  • June 5, 2018

我有一個master(master 1)複製到另一個master(master 2),然後復製到它的slave。

所以master 2的二進制日誌有問題:

中繼日誌讀取失敗:無法解析中繼日誌事件條目。可能的原因是:主伺服器的二進制日誌已損壞(您可以通過在二進制日誌上執行“mysqlbinlog”來檢查),從伺服器的中繼日誌已損壞(您可以通過在中繼日誌上執行“mysqlbinlog”來檢查),a網路問題,或者主從的 MySQL 程式碼中的錯誤。如果你想檢查主伺服器的二進制日誌或從伺服器的中繼日誌,你可以通過在這個從伺服器上發出“SHOW SLAVE STATUS”來知道它們的名字。

我之前遇到過並且能夠通過執行我從該執行緒執行的相同命令來解決,expire_logs_days 指令需要更改主機?(我稍後會問一個問題,為什麼這仍然會發生,但不是我目前的問題)。

如果有興趣,這裡是該執行緒中有關我如何使其工作的相關資訊:

stop slave;
reset slave;
change master to master_log_file='...' , master_log_pos=...
start slave;

所以現在主控 2 很好,並且從主控 1 複製。這一次雖然主控 2 的從屬也壞了。

我得到的錯誤是:

從二進制日誌中讀取數據時,從 master 收到致命錯誤 1236:‘Client requests master to start replication from position > file size; 第一個事件 ‘mysqld-bin.000397’ 在 244145356,最後一個事件從 ‘./mysqld-bin.000397’ 在 4 讀取,最後一個字節從 ‘./mysqld-bin.000397’ 在 4 讀取。

當我SHOW BINARY LOGS;在奴隸上執行時,我得到:

ERROR 1381 (HY000): 你沒有使用二進制日誌

我的奴隸怎麼了?為什麼它不再使用日誌了?主人仍然有日誌文件,所以我認為執行, ,stop可以reset解決問題(因為它會重新請求日誌)但它沒有。change``start

我敢打賭sync_binlog被關掉了。

關閉它,崩潰前的 binlog 條目可能還沒有被刷新到 binlog 文件,即使它們已經被發送到 Slave。

將複製數據從 Master 發送到 Slave:

  1. 寫到主表上。
  2. 緩衝對 binlog 的寫入。
  3. 可以選擇將緩衝區刷新到 binlog。– 由sync_binlog控制
  4. 將查詢發送到從站。

當 sync_binlog=OFF 時,binlog很可能會比 slave 認為的短。

當 Slave-Master 連接重新建立時,Slave 會從中斷的地方繼續。如果 sync_binlog=ON,那將是某個 binlog 的確切結尾,它將決定移動到下一個 binlog。手動 CHANGE MASTER 模擬了這一點。

CHANGE MASTER 到下一個 binlog 的位置 0(或 4)(將數字增加 1)。

(我從未使用過RESET SLAVE;我認為沒有理由。)

引用自:https://dba.stackexchange.com/questions/208448