概述

今天发现某个MySQL数据库,磁盘空间增长非常迅速。观察了一下,发现binlog在疯狂增长。估计又是谁狂写数据库了。

现象

 ll binlog.00025*
-rw-r----- 1 mysql mysql 1073883804 63 07:45 binlog.000250
-rw-r----- 1 mysql mysql 1073904262 63 07:51 binlog.000251
-rw-r----- 1 mysql mysql 1073867113 63 07:57 binlog.000252
-rw-r----- 1 mysql mysql 1073826263 63 08:01 binlog.000253
-rw-r----- 1 mysql mysql 1074181517 63 08:04 binlog.000254
-rw-r----- 1 mysql mysql 1073775421 63 08:08 binlog.000255
-rw-r----- 1 mysql mysql 1073898674 63 08:12 binlog.000256
-rw-r----- 1 mysql mysql 1073779116 63 08:16 binlog.000257
-rw-r----- 1 mysql mysql 1073776540 63 08:21 binlog.000258
-rw-r----- 1 mysql mysql 1073896248 63 08:30 binlog.00025

排查

  1. 查看 2026年6月3日 08:00:00 至 08:30:00 之间的日志,看看到底都写了什么
    | 文件名 | 时间 |
    |--------|------|
    | binlog.000253 | 08:01 |
    | binlog.000254 | 08:04 |
    | binlog.000255 | 08:08 |
    | binlog.000256 | 08:12 |
    | binlog.000257 | 08:16 |
    | binlog.000258 | 08:21 |
    | binlog.000259 | 08:30 |

  2. 解析binlog

mysqlbinlog \
  --start-datetime="2026-06-03 08:00:00" \
  --stop-datetime="2026-06-03 08:30:00" \
  --base64-output=decode-rows \
  -vv \
  binlog.00025[3-9] \
  > /tmp/binlog_0800_0830.sql
  1. 添加时区显示
  • Mysql时区设置是依赖系统
mysql> SHOW VARIABLES LIKE 'time_zone';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| time_zone     | SYSTEM |
+---------------+--------+
1 row in set (0.00 sec)
  • 系统显示是东八区
[root@logs]# timedatectl | grep "Time zone"
       Time zone: Asia/Shanghai (CST, +0800)
[root@logs]# 
  1. 添加时区设置,然后解析binlog
TZ='Asia/Shanghai' mysqlbinlog \
  --start-datetime="2026-06-03 08:00:00" \
  --stop-datetime="2026-06-03 08:30:00" \
  --base64-output=decode-rows \
  -vv \
  binlog.000253 binlog.000254 binlog.000255 binlog.000256 binlog.000257 binlog.000258 binlog.000259 \
  > /tmp/binlog_0800_0830.sql

统计

根据解析的sql文件,进行统计

grep -E "(INSERT|UPDATE|DELETE)" ./binlog_0800_0830.sql | sort | uniq -c | sort -rn
  • sort 排序
  • uniq -c 统计
  • sort -rn 数值降序
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐