分析從庫 1062 錯誤時,解析從庫 Binlog (mysql-bin.004271) 遇到經典報錯:
ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2
嘗試網上常見 3 種方案均失效,最終在 MySQL 數據目錄下直接解析才成功。完整記錄排查過程與核心結論。
| 方案 | 操作 | 結果 |
|---|---|---|
| 指定完整路徑 | /opt/mysql/product/5.5.25a/bin/mysqlbinlog mysql-bin.004271 | 同樣報錯 |
強制解析 -f | mysqlbinlog -f mysql-bin.004271 | 同樣報錯 |
| 重新複製檔案 | cp /mysqldata/data/mysql-bin.004271 /tmp/ 後解析 | 同樣報錯 |
甚至嘗試系統自帶 /usr/bin/mysqlbinlog,報 Character set '#45' is not a compiled character set 字元集不匹配錯誤。
cd /mysqldata/data
/opt/mysql/product/5.5.25a/bin/mysqlbinlog -f mysql-bin.004271 > 4.log
結果:解析成功,無報錯。
/tmp 時,若 MySQL 正在追加寫入,複製得到的檔案可能處於「寫入中」狀態,導致結尾截斷或校驗和錯誤。cd $DATADIR && mysqlbinlog ...$BASEDIR/bin/mysqlbinlog。FLUSH LOGS 切換新 Binlog,再複製**已封存**的舊 Binlog 檔案(無寫入鎖)。-f 參數:遇損壞事件強制跳過,最大程度恢復可見 SQL。核心教訓:Binlog 是「活檔案」,解析時必須尊重其運行時上下文。