Mysql

使用 mysqlbinlog 讀取 MySQL 5.5 二進制日誌時出錯

  • August 31, 2017

我正在使用的複制設置遇到問題。它已經工作了好幾個月了,然後在周末,slave 停止從 master 的 binlog 讀取更新並出現錯誤Got fatal error 1236 from master when reading data from binary log: 'bogus data in log event'

嘗試使用 mysqlbinlog 讀取相關的二進制日誌時,出現如下所示的錯誤;

[root@slglcd-01] # mysqlbinlog ibm-pr-slglcd-01.000075 > /dev/null
ERROR: Error in Log_event::read_log_event(): 'Event too small', data_len: 0, event_type: 0
ERROR: Could not read entry at offset 1828: Error in log format or read error.
[root@slglcd-01] #

令人沮喪!--start-position我曾嘗試使用和的各種組合--offset來嘗試克服不良數據,但似乎沒有任何效果……

我所追求的是一種從二進制日誌中跳過(或刪除)此錯誤的方法,創建一個沒有違規項目的新二進制日誌,以便我可以繼續我的複制。

我不擔心失去聲明,這是一個 syslog 收集數據庫,失去一行不會受到傷害。

我不能做的是從主人重新創建奴隸,因為主人使用BLACKHOLE引擎,因此沒有儲存真實數據……

如果最壞的情況發生在最壞的情況下,我將不得不從序列中的下一個二進制日誌開始,並鬆散留在有問題的日誌中的數據。

在此先感謝,戴夫

由於 Master 上的二進制日誌已損壞,因此您無能為力。節哀順變。直接跳到下一個 binlog:

STOP SLAVE;
CHANGE MASTER TO master_log_file='ibm-pr-slglcd-01.000076',master_log_pos=107;
START SLAVE;

當然,107 是 MySQL 5.5 binlogs 的起始位置。如果 Master 是 5.1(或 5.0.95),使用 106。如果 Master 在 5.1 之前,使用 98。

如果 Master BinLog Corruption 頻繁,可能需要考慮在 Master 上使用更小的二進制日誌(可能是 128M 而不是預設的 1G):

[mysqld]
max_binlog_size=128M

這不會阻止損壞,但降低它的大小會將數據失去從 1G 降至 128M。

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