萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 主從同步錯誤 1236 解決方案:Could not find first log file name in binary log index file

錯誤現象

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'

常見原因:Master 清理了 Binlog(手動 PURGE BINARY LOGS、expire_logs_days 過期、或磁碟空間不足導致檔案遺失),Slave 還在舊位置尋找已刪除的 Binlog。

標準修復流程(4 步驟)

步驟 1:停止 Slave 同步執行緒

mysql> STOP SLAVE;

步驟 2:Master 刷新 Binlog 產生新檔案

mysql> FLUSH LOGS;

此操作會關閉當前 Binlog,開啟新編號檔案(如 mysql-bin.000004),並更新 mysql-bin.index 索引檔。

步驟 3:獲取 Master 最新 Binlog 位置

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      106 |              |                  |
+------------------+----------+--------------+------------------+

記下 File 與 Position。

步驟 4:Slave 重新指向新位置並啟動

mysql> CHANGE MASTER TO
    MASTER_LOG_FILE='mysql-bin.000004',
    MASTER_LOG_POS=106;

mysql> START SLAVE;

步驟 5:驗證恢復

mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

完整主從部署參考(Windows 環境)

Master (192.168.0.17) my.ini

[mysqld]
server-id=111
log-bin=mysql-bin
binlog-do-db=a111cnnet
binlog-ignore-db=mysql

建立同步帳號

GRANT FILE, REPLICATION SLAVE, REPLICATION CLIENT, SUPER
ON *.* TO 'backup2'@'192.168.0.119' IDENTIFIED BY 'backup2';

Slave (192.168.0.119) my.ini

[mysqld]
server-id=112
master-host=192.168.0.17
master-user=backup2
master-password=backup2
master-connect-retry=60
replicate-do-db=a111cnnet
replicate-ignore-db=mysql

驗證啟動

mysql> SHOW SLAVE STATUS\G
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

進階排查:若上述方法無效

  1. 檢查 Master mysql-bin.index 是否存在且可讀
  2. 確認 expire_logs_days 設定合理(建議 ≥ 7 天)
  3. 若 Master 資料量小,考慮重新做全量同步:
    Master FLUSH TABLES WITH READ LOCK → mysqldump --master-data=2 → Slave 匯入 → CHANGE MASTER TO ... → START SLAVE
  4. MySQL 5.6+ 建議啟用 GTID 模式,故障恢復更簡單:CHANGE MASTER TO MASTER_AUTO_POSITION=1

預防措施

  • 監控 Seconds_Behind_Master 與磁碟空間
  • 設置 expire_logs_days=7 並定期備份 Binlog
  • 使用 sync_binlog=1 確保 Binlog 持久化
  • 部署 MHA/Orchestrator 實現自動故障轉移
copyright © 萬盛學電腦網 all rights reserved