深入浅出 MySQL Binlog 全解析:记录模式、主从复制与数据恢复详解

Binlog

记录模式

Binlog 基本特性:

  • 记录所有数据库表结构变更(DDL)和表数据修改(DML)
  • 不会记录 SELECT 和 SHOW 这类只读操作
  • 三种记录格式:STATEMENT、ROW、MIXED

Binlog 的核心应用场景

主从复制

  • 主库配置文件中开启 Binlog 功能
  • 主库的 Binlog 会通过 I/O 线程实时传输到从库
  • 从库的 SQL 线程重放这些日志事件

数据恢复

  • 通过 mysqlbinlog 工具解析二进制日志
  • 支持按时间点恢复(Point-in-Time Recovery)

Binlog 记录模式详解

ROW 模式(行复制模式)

  • 记录每一行数据的变化细节
  • 适合数据安全性要求高的系统

STATEMENT 模式(语句复制模式)

  • 记录实际执行的SQL语句
  • 适合批处理作业较多的系统

MIXED 模式(混合模式)

  • 默认使用 STATEMENT 模式
  • 在特定情况自动切换到 ROW 模式

文件格式

常见的 Log Event 类型

  • Query Event:记录 SQL 语句
  • Row Event:行变更
  • Xid Event:事务提交事件
  • Table Map Event:表结构信息

写入机制

事件触发与生成

  • 根据记录模式和操作触发 Event 事件生成

缓冲区管理

  • 缓冲区大小由 binlog_cache_size 参数控制,默认为32KB

写入控制参数

  • sync_binlog=0:依赖系统刷新
  • sync_binlog=1:每次事务提交都刷盘

文件操作

-- 查看状态
show variables like 'log_bin'

-- 查看事件
show binary logs;
show master status;

-- 恢复数据
mysqlbinlog --start-datetime="时间" --stop-datetime="时间" binlog文件 | mysql

-- 删除
purge binary logs to '文件名';