分享一个 MySQL binlog 分析小工具

什么场景下会用上这个工具呢?

  1. 云服务场景,无法登录 MySQL 服务器查看 binlog 的时间戳信息。
  2. 主从延迟时,可以使用这个工具来查看 binlog 的大小或者某个时间段 binlog 的写入量。
  3. 基于时间点的恢复时,可以根据操作的大致时间来定位对应的 binlog 文件。

不多说,直接看看工具的效果。

yaml 复制代码
./mysql-binlog-time-extractor -h 10.0.0.108 -P 3306 -u root -p 123456+------------------+--------------------+---------------------+---------------------+-----------+---------+|     Log_name     |     File_size      |     Start_time      |      End_time       | Duration  |  GTID   |+------------------+--------------------+---------------------+---------------------+-----------+---------+| mysql-bin.000046 | 805 (805.00 bytes) | 2025-06-22 11:09:38 | 2025-06-24 10:33:59 | 47:24:21  | 503-504 || mysql-bin.000047 | 12103 (11.82 KB)   | 2025-06-24 10:33:59 | 2025-07-05 00:02:27 | 253:28:28 | 505-517 || mysql-bin.000048 | 261 (261.00 bytes) | 2025-07-05 00:02:27 | 2025-07-10 15:03:01 | 135:00:34 |         || mysql-bin.000049 | 261 (261.00 bytes) | 2025-07-10 15:03:01 | 2025-07-10 15:05:29 | 00:02:28  |         || mysql-bin.000050 | 9074 (8.86 KB)     | 2025-07-10 15:05:29 | 2025-07-23 12:20:32 | 309:15:03 | 518-550 || mysql-bin.000051 | 586710 (572.96 KB) | 2025-07-23 12:20:32 | 2025-07-24 08:48:08 | 20:27:36  | 551-754 || mysql-bin.000052 | 464 (464.00 bytes) | 2025-07-24 08:48:08 |                     |           |         |+------------------+--------------------+---------------------+---------------------+-----------+---------+

工具地址

项目地址:github.com/slowtech/my...

可直接使用二进制包,也可以源码编译。

直接使用二进制包

shell 复制代码
# wget https://github.com/slowtech/mysql-binlog-time-extractor/releases/download/v1.0.0/mysql-binlog-time-extractor-linux-amd64.tar.gz# tar xvf mysql-binlog-time-extractor-linux-amd64.tar.gz

解压后,会在当前目录生成一个名为mysql-binlog-time-extractor的可执行文件。

源码编译

shell 复制代码
# wget https://github.com/slowtech/mysql-binlog-time-extractor/archive/refs/tags/v1.0.0.tar.gz# tar xvf v1.0.0.tar.gz # cd mysql-binlog-time-extractor-1.0.0/# go build

编译完成后,会在当前目录生成一个名为mysql-binlog-time-extractor的可执行文件。

参数解析

java 复制代码
# ./mysql-binlog-time-extractor --helpUsage of ./mysql-binlog-time-extractor:  -P int        MySQL port (default 3306)  -h string        MySQL host (default "localhost")  -n int        Number of goroutines to run concurrently (default 5)  -p string        MySQL password  -u string        MySQL user (default "root")  -v    Enable verbose logging

其中,-h、-P、-u、-p 分别用来指定实例的 IP、端口、用户名和密码。如果不指定 -p,则会提示输入密码。

-n 是并发数,默认是 5,即每次会同时分析 5 个 binlog。在 binlog 数量较多的情况下,可以适当增加并发数来提高分析效率。

-v 打印分析进度,例如,

css 复制代码
[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go SHOW BINARY LOGS done, 7 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000052 done, still 6 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000051 done, still 5 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000050 done, still 4 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000049 done, still 3 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000048 done, still 2 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000047 done, still 1 binlogs to analyze[2025/07/25 00:02:29] [info] mysql_binlog_time_extractor.go mysql-bin.000046 done, still 0 binlogs to analyze

实现原理

  1. 首先执行 SHOW BINARY LOGS,获取所有 binlog 文件的列表,包括文件名和文件大小。

  2. 将自己"伪装"为从库,逐个分析每个 binlog 文件的前两个事件:FORMAT_DESCRIPTION_EVENTPREVIOUS_GTIDS_EVENT

    其中,FORMAT_DESCRIPTION_EVENT 记录了 binlog 的创建时间,PREVIOUS_GTIDS_EVENT 记录了当前 binlog 之前的所有 GTID 集合。

  3. 为了提升分析效率并减少对主库的影响,该工具只会分析每个 binlog 文件的前两个事件。那么,如何确定当前 binlog 的结束时间呢?这里采用了一种巧妙的方式:直接使用下一个 binlog 的创建时间作为当前 binlog 的结束时间,而不是扫描所有事件来获取最后一个事件的时间。

注意事项

工具执行过程中,可能会打印以下错误,表示在尝试关闭 binlog streamer 时,发现其已处于关闭状态。该错误来自第三方库 github.com/go-mysql-org/go-mysql/replication,不影响工具的正常使用,可忽略。

行业拓展

分享一个面向研发人群使用的前后端分离的低代码软件------JNPF

基于 Java Boot/.Net Core双引擎,它适配国产化,支持主流数据库和操作系统,提供五十几种高频预制组件,内置了常用的后台管理系统使用场景和实用模版,通过简单的拖拉拽操作,开发者能够高效完成软件开发,提高开发效率,减少代码编写工作。

JNPF基于SpringBoot+Vue.js,提供了一个适合所有水平用户的低代码学习平台,无论是有经验的开发者还是编程新手,都可以在这里找到适合自己的学习路径。

此外,JNPF支持全源码交付,完全支持根据公司、项目需求、业务需求进行二次改造开发或内网部署,具备多角色门户、登录认证、组织管理、角色授权、表单设计、流程设计、页面配置、报表设计、门户配置、代码生成工具等开箱即用的在线服务。

相关推荐
lypzcgf1 天前
Coze源码分析-资源库-删除插件-前端源码-核心组件实现
前端·typescript·前端框架·react·coze·coze插件·智能体平台
草梅友仁1 天前
草梅 Auth 1.6.0 发布密码强度组件 Twilio 短信支持 | 2025 年第 36 周草梅周报
前端·开源·github
正义的大古1 天前
OpenLayers常用控件 -- 章节七:测量工具控件教程
前端·javascript·vue.js·openlayers
Hashan1 天前
深入理解:Webpack编译原理
前端·webpack
雲墨款哥1 天前
一个前端开发者的救赎之路-JS基础回顾(五)-数组
前端·javascript·面试
朱程1 天前
深入JS(一):手写 Promise
前端·javascript
Hierifer1 天前
跨端技术:浅聊双线程原理和实现
前端
FreeBuf_1 天前
加密货币武器化:恶意npm包利用以太坊智能合约实现隐蔽通信
前端·npm·智能合约
java水泥工1 天前
基于Echarts+HTML5可视化数据大屏展示-图书馆大屏看板
前端·echarts·html5
半夏陌离1 天前
SQL 实战指南:电商订单数据分析(订单 / 用户 / 商品表关联 + 统计需求)
java·大数据·前端