首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Binlog 處理機制詳解:格式、WAL、主從流程、InnoDB/MyISAM 一致性對比

     編輯:MySQL 資料庫相關知識

Binlog 基礎特性

  • 二進制順序寫入,不加密、不壓縮
  • 文件頭 4 字節標記:0xFE 0x62 0x69 0x6E
  • 單位為 LOG_EVENT,含時間戳、類型、數據
  • 啟用 Binlog 約增加 1% 負載,通常非瓶頸

寫入流程

以 UPDATE 為例:

  1. 存儲引擎執行 ha_update_row 修改數據
  2. 調用 binlog_query 寫 Binlog
  3. 事務表再調用 ha_autocommit_or_rollback 提交/回滾

為什麼先寫數據再寫 Binlog?若先寫 Binlog 再更新時 Crash,Slave 可能已應用,導致主從不一致。

主從同步架構

  • Master:TCP 短連接發送 Binlog
  • Slave:I/O 線程 接收 → 寫 Relay Log;SQL 線程 讀 Relay Log → 重放 SQL

關鍵問題答疑

問題答案
Binlog 格式?二進制順序,不加密、不壓縮
Binlog 用 WAL?No
Master 發送用內存 copy?大概率先讀磁盤再發送
Relay Log 用 WAL?Yes,先寫再應用
Binlog 與 Relay Log SQL 一致?網絡可靠前提下 Yes

一致性核心:存儲引擎決定數據

  • InnoDB:自帶 Redo/Undo Log,事務包含 Binlog 寫入。
    需 innodb_support_xa=1 + sync_binlog=1 才能保證 Binlog 與數據強一致。
  • MyISAM:無事務,異常時數據與 Binlog 必不一致,依賴應用層補償或定期全量同步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved