Mysql

MySql 複製失敗,出現錯誤 1236 數據位置 > 文件大小,relay-bin 文件不增加

  • November 18, 2021

我的從機重置,現在在 SLAVE SHOW STATUS\GI 上出現錯誤:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'

從站設置顯示為:

Master_Log_File: bin.003767
Read_Master_Log_Pos: 751854814
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: bin.003767
Slave_IO_Running: No
Slave_SQL_Running: Yes

但是,從站上的中繼箱文件是:mysql-relay-bin.000001,大小為 1KB。另一方面,Master 擁有超過 700 兆的文件:bin.003767。但是沒有中繼文件被更新或複製到從站。

如果從一開始就沒有完整的數據同步,有什麼辦法可以解決這個問題?實現這一目標需要幾天的時間。

有誰知道這裡的問題是什麼?

非常感激!

為避免將來出現問題,請打開sync_binlog.

發生的事情是當主伺服器關閉時,複製流還沒有到達從伺服器。binlog 中的偏移量已經增加,但數據不在 Slave 上。

上來後,移動到下一個binlog,並將位置設置為0(或4,任何一個都可以)。

更多細節

複製查詢時,主節點“同時”做兩件事:

  • 寫入 Primary 的 binlog。注意:根據sync_binlog此寫入可能會在 RAM 中的緩衝區中停留一段時間。
  • 通過 TCP/IP 將相同的資訊傳輸到 Replica。

複製品

  • 將資訊(來自網路)寫入中繼日誌。
  • 更新 Primary 的 binlog 中的位置。

如果主節點崩潰並重新啟動:

  • 未刷新 binlog。因此,Replica 指向的位置是 binlog 的“結束”。
  • 一個新的 binlog 被啟動。

所以…

  • binlog 缺少一些數據。
  • 副本認為它有一個“壞”的位置。
  • 下一個 binlog 的開始是它需要指向的地方。( master_log_pos=4;=0也有效)
  • (與您的情況無關)如果binlog稍後用於“時間點恢復”,它不會有一些變化,因此會損壞數據。

(我從來沒有這樣做過RESET SLAVE;我認為沒有必要。)

似乎將位置設置為 4 (master_log_pos=4) 重新啟動了同步。

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