Mysql
MySql 複製失敗,出現錯誤 1236 數據位置 > 文件大小,relay-bin 文件不增加
我的從機重置,現在在 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) 重新啟動了同步。