首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 二進制日誌 (Binlog) 損壞導致服務無法啟動:排查與修復指南

     編輯:MySQL 綜合教學

MySQL 二進制日誌 (Binlog) 損壞導致服務無法啟動:排查與修復指南

嘗試啟動 MySQL 失敗,錯誤日誌顯示:

mysqld: File '.\mysql-bin.000370' not found (Errcode: 2)
[ERROR] Failed to open log (file '.\mysql-bin.000370', errno 2)
[ERROR] Could not open log file
[ERROR] Can't init tc log
[ERROR] Aborting

原因:mysql-bin.index 索引檔記錄了 mysql-bin.000370,但實體檔案遺失/損壞 (可能因磁碟滿、手動刪除、遷移未帶走)。

快速修復:移除遺失的 Binlog 參考

  1. 進入資料目錄:cd /var/lib/mysql (或 C:\ProgramData\MySQL\MySQL Server 8.0\Data\)
  2. 編輯 mysql-bin.index,刪除缺失檔案那一行 (如 .\mysql-bin.000370)
  3. 或直接刪除所有 mysql-bin.* 檔案 (含 .index):**會丟失未同步的主從複制座標,謹慎使用**
  4. 啟動 MySQL:systemctl start mysqld

進階修復:使用 RESET MASTER (需能進入 SQL)

mysql -u root -p
RESET MASTER;
-- 會刪除所有 binlog 並重置 index,產生 mysql-bin.000001

Binlog 兩大核心用途

用途說明
主從複制Slave 從 Master 拉取 Binlog 重放,實現資料同步
時間點恢復 (PITR)全量備份 + Binlog 重放,恢復至任意秒

自動清理配置 (避免磁碟爆滿)

[mysqld]
# 保留 3 天 (動態生效,無需重啟)
expire_logs_days = 3
# 或運行時動態設定
SET GLOBAL expire_logs_days = 3;

# 單檔上限
max_binlog_size = 100M

查看 Binlog 內容工具

mysqlbinlog mysql-bin.000001
mysqlbinlog --start-position=107 --stop-position=500 mysql-bin.000001 > partial.sql

生產環境建議

  • 啟用 sync_binlog=1、innodb_flush_log_at_trx_commit=1 確保不丟交易。
  • Binlog 存放在**獨立磁碟/分區**,避免與資料目錄爭搶 IO。
  • 監控 expire_logs_days 生效狀況,防止手動刪除導致 index 不一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved