binlog是MySQL Server层生成的二进制逻辑日志,记录所有数据变更操作(如INSERT、UPDATE、DELETE、CREATE等),不记录SELECT等只读操作;支持STATEMENT、ROW、MIXED三种格式,主要用于主从复制、时间点恢复、数据审计和增量备份。

binlog(Binary Log,二进制日志)是 MySQL Server 层生成的一种逻辑日志,专门记录所有对数据库造成**数据变更**的操作,包括 INSERT、UPDATE、DELETE、CREATE、ALTER、DROP 等 DDL 和 DML 语句,但不记录 SELECT、SHOW 等只读操作。
binlog 的核心特点
• 是二进制格式文件,不能直接用文本编辑器打开,需借助 mysqlbinlog 工具解析
• 每个写入操作以“事件(event)”形式记录,如 Query_event、Xid_event、Rows_log_event 等
• 支持事务安全,配合 InnoDB 的 redo log 可实现 crash-safe(崩溃安全)
• 日志持续追加,达到 max_binlog_size(默认 1GB)或执行 FLUSH LOGS 时自动滚动生成新文件
• 文件名形如 mysql-bin.000001,配套索引文件 mysql-bin.index 记录所有 binlog 文件路径
binlog 的三种格式与选择
• STATEMENT:记录原始 SQL 语句。日志体积小,但某些函数(如 NOW()、UUID()、自增主键插入)可能导致主从不一致
• ROW:记录每一行数据修改前后的镜像。复制精确度高,是 MySQL 5.7.7+ 默认格式,适合生产环境
• MIXED:默认用 STATEMENT,遇到不安全语句自动切为 ROW。兼顾兼容性与准确性,但判断逻辑可能引入不确定性
binlog 的主要用途
• 主从复制:主库将 binlog 发送给从库,从库重放事件实现数据同步
• 时间点恢复(PITR):配合全量备份(如 mysqldump 或 xtrabackup),用 mysqlbinlog 回放指定时间段的变更,恢复到故障前任意时刻
• 数据审计与行为追溯:定位谁在何时执行了哪条变更语句(需结合 general_log 或应用层日志更完整)
• 增量备份基础:仅备份新增的 binlog 文件,节省空间与时间
常见管理操作
• 查看是否启用:SHOW VARIABLES LIKE 'log_bin';(值为 ON 表示已开启)
• 查看当前日志状态:SHOW MASTER STATUS;
• 列出所有 binlog:SHOW BINARY LOGS;
• 查看某 binlog 内容:mysqlbinlog mysql-bin.000001(加 -v -v 可解析 ROW 格式)
• 清理旧日志:PURGE BINARY LOGS BEFORE '2025-12-01'; 或 PURGE BINARY LOGS TO 'mysql-bin.000010';










