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

MySQL Replication Error 1236 修復實戰指南

     編輯:MySQL 綜合教學

錯誤現象


Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

表示 Slave 無法在 Master 的 binlog 索引中找到指定的起始日誌文件,常見於 Master 重啟、binlog 過期清理、或手動刪除 binlog 導致。

根因分析

網絡中斷
場景原因典型特徵
binlog 過期expire_logs_days 到期自動清理Master 上 show binary logs 缺少 Slave 需要的文件
手動刪除誤執行 PURGE BINARY LOGS 或 rmbinlog 索引文件與實際文件不一致
Master 重啟新建 binlog 文件,舊文件被清理Slave 還在舊文件位置
長時間斷連超過 binlog 保留窗口重連時找不到同步點

標準修復流程

方案一:重新搭建 Slave (推薦,數據量較小時)


# 1. Master 確認當前 binlog 位置
SHOW MASTER STATUS;
# File: mysql-bin.000045, Position: 123456

# 2. Master 導出全量備份
mysqldump --single-transaction --master-data=2 --all-databases > full.sql

# 3. Slave 停止同步並導入
STOP SLAVE;
mysql < full.sql

# 4. 重新配置同步點
CHANGE MASTER TO 
    MASTER_HOST='master_ip',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000045',
    MASTER_LOG_POS=123456;
START SLAVE;

方案二:跳過缺失 binlog (僅限非關鍵數據、且確認無丟失)


# 查看 Master 現有最早 binlog
SHOW BINARY LOGS;
# 假設最早是 mysql-bin.000040

# Slave 跳過到最早可用位置
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000040', MASTER_LOG_POS=4;
START SLAVE;

⚠️ 風險:跳過的 binlog 內容將永久丟失,僅適用於可重放或非核心業務。

方案三:從其他 Slave 同步 (多級復制拓撲)

若有其他正常 Slave,可將其提升為新 Master,或從其獲取缺失 binlog 文件補齊。

預防最佳實踐

  1. 延長保留: expire_logs_days=7 以上,配合磁碟監控
  2. 禁用手動清理: 禁止 PURGE BINARY LOGS,改用自動過期
  3. 多級復制: 部署中繼 Slave (Master -> Relay Slave -> Slaves) 緩衝衝擊
  4. 監控告警: 監控 Seconds_Behind_Master、Slave_IO_Running、Master binlog 磁碟佔用
  5. GTID 模式: MySQL 5.6+ 啟用 GTID (gtid_mode=ON),自動定位同步點,彈性容錯

GTID 模式下的簡化修復


# 開啟 GTID 後,無需指定文件位置
CHANGE MASTER TO 
    MASTER_HOST='master_ip',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='password',
    MASTER_AUTO_POSITION=1;
START SLAVE;

強烈建議生產環境遷移至 GTID 架構,徹底解決 1236 類定位問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved