binlog 存在哪、能长多大
binlog 默认与数据文件放在同一个数据目录下,路径由 log_bin 相关变量决定;单个文件的大小上限由 max_binlog_size 控制,默认 1GB,但它是软上限,大事务跨过边界时文件会继续写到事务结束,因此实际可能明显超过 1GB。binlog 占用应单独纳入容量监控,写满磁盘会直接影响业务写入。
基本信息
| 适用 | MySQL 5.7 / 8.0,需 log_bin 开启 |
|---|---|
| 默认位置 | 与 datadir 同盘,除非单独指定路径 |
| 单文件上限 | max_binlog_size 默认 1GB,属软上限 |
| 文件切换时机 | 实例重启、执行 FLUSH LOGS、达到大小上限 |
查看清单与占用
查看清单与占用
SHOW VARIABLES LIKE 'log_bin%'; # 确认是否开启以及文件前缀
SHOW VARIABLES LIKE 'max_binlog_size'; # 单文件大小上限
SHOW BINARY LOGS; # 文件清单与逐个大小
SELECT SUM(File_size)/1024/1024/1024 AS total_gb FROM performance_schema.binary_log_files; # 总体积
FLUSH BINARY LOGS; # 手工切换新文件,便于归档或清理
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds'; # 配合过期策略一起评估容量判断要点
| 观察项 | 含义 | 判断 |
|---|---|---|
| SHOW BINARY LOGS 总数 | 当前保留的文件与体积 | 是否接近磁盘可用空间 |
| max_binlog_size | 单文件软上限 | 大事务会让文件超出该值 |
| 与 datadir 同盘 | 数据与日志竞争同一磁盘 | 大事务写日志可能把盘写满 |
| 磁盘剩余空间 | 写入可用余量 | 低于阈值时写入会直接失败 |
| binlog 过期策略 | 自动清理窗口 | 窗口过长会持续堆积 |
典型使用场景
- 磁盘水位排查:确认 binlog 占用了多少空间
- PITR 规划:按保留窗口评估需要的磁盘容量
- 归档与清理:用 FLUSH 切换文件后再处理旧文件
- 大事务复盘:解释为何单文件超过预期大小
- 容量规划:把 binlog 增长纳入实例磁盘预算
binlog 目录与数据目录同盘时,大事务不仅写数据,还会同时写 binlog,磁盘压力是叠加的,容量评估要按两者之和来算。
binlog 写满磁盘会导致实例不可写,恢复需要清理或扩容磁盘;把 binlog 单独放到独立磁盘并设置告警是更稳的做法。
容量治理动作
- 把 binlog 目录放到独立磁盘,避免与数据文件争抢同一块盘
- 按保留窗口定期清理,并确认下游从库已消费到相应位点
- 为 binlog 所在分区设置独立的磁盘水位告警