Binlog 是 MySQL 服务器层记录所有数据变更的二进制日志,是主从复制和时间点恢复的基础。它有语句、行、混合三种记录格式,还被 Canal、Debezium 等工具用来捕获数据变更,同步到缓存、搜索引擎与数据仓库。

| 类别 | 数据库日志 |
| 所属系统 | MySQL 服务器层 |
| 记录格式 | STATEMENT / ROW / MIXED |
| 默认格式 | ROW |
| 主要用途 | 复制、恢复、CDC |
| 关键参数 | sync_binlog、GTID |
Binlog(binary log,二进制日志)是 MySQL 在服务器层记录数据库所有数据变更操作的日志文件,以事件(event)形式按提交顺序追加写入,是 MySQL 复制体系与时间点恢复的核心基础设施。
与属于 InnoDB 存储引擎、用于崩溃恢复的 Redo Log 不同,Binlog 位于引擎之上的服务器层,与具体引擎无关,记录的是逻辑变更而非物理页修改。所有修改数据或结构的操作(INSERT、UPDATE、DELETE、DDL 等)都会生成事件写入当前 Binlog 文件,文件按序号滚动,可设置保留期自动清理。MySQL 8.0 起默认开启。
Binlog 的三大用途:一是主从复制,从库拉取主库 Binlog 重放,实现读写分离与高可用;二是时间点恢复(PITR),在全量备份基础上重放 Binlog 到指定时刻,可挽救误删数据;三是变更数据捕获(CDC),阿里开源的 Canal、Debezium、Maxwell 等工具伪装成从库解析 Binlog,把变更实时同步到 Redis 缓存、Elasticsearch、Kafka 或数据仓库。
问:Binlog 和 Redo Log 有什么区别?答:Redo Log 是 InnoDB 的物理日志、循环写、用于崩溃恢复;Binlog 是服务器层逻辑日志、追加写、用于复制与归档恢复,两者通过内部两阶段提交保持一致。
问:为什么生产环境推荐 ROW 格式?答:它记录真实行变化,不受 UUID、NOW 等不确定函数影响,复制最可靠,也便于 CDC 工具解析,代价是日志体积较大。
问:误删数据能靠 Binlog 找回吗?答:若开启了 Binlog 且有此前的全量备份,可恢复备份后重放到误操作前一刻;部分工具还能将 ROW 事件反转生成回滚 SQL。

| 类别 | 数据库日志 |
| 所属系统 | MySQL 服务器层 |
| 记录格式 | STATEMENT / ROW / MIXED |
| 默认格式 | ROW |
| 主要用途 | 复制、恢复、CDC |
| 关键参数 | sync_binlog、GTID |
登录 后参与讨论
暂无讨论,来发表第一条评论吧