深入浅出 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 '文件名';