news 2026/3/1 10:04:55

<span class=“js_title_inner“>解析MySQL Binlog的利器:my2sql 使用指南</span>

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
<span class=“js_title_inner“>解析MySQL Binlog的利器:my2sql 使用指南</span>

本文首发于「数据库干货铺」公众号,转载请联系授权

在 MySQL 运维和数据恢复场景中,二进制日志(binlog)是不可或缺的核心组件。当发生误操作、需要审计变更或进行数据回溯时,如何高效、准确地从 binlog 中提取出可读的 SQL 语句,成为 DBA 和开发人员关注的重点。

目前社区中有多种工具可用于解析 binlog,其中 my2sql 是近年来广受关注的一款开源工具。它由国内开发者使用 Go 语言编写,具备高性能、功能丰富、部署简单等特点。本文将详细介绍 my2sql 的使用方法,并简要说明其与同类工具(如 binlog2sql)在技术特性上的差异,帮助大家根据实际需求选择合适的方案。

一、my2sql 是什么?如何安装?

my2sql 是一个用于解析 MySQL ROW 格式 binlog 的命令行工具。它可以将 binlog 中的事件还原为原始的 DML(INSERT/UPDATE/DELETE)或 DDL(CREATE/ALTER/DROP)语句,同时也支持生成对应的回滚 SQL(Flashback),适用于数据恢复、变更审计、同步校验等场景。

主要特点包括:

  • 支持按时间、binlog 文件、数据库、表名等多维度过滤

  • 可输出原始 SQL 或回滚 SQL

  • 支持 GTID 模式下的事务定位

  • 同时解析 DML 与 DDL 语句

  • 无需依赖外部运行环境,提供静态编译的二进制文件

  • 开源免费,项目持续维护中

1. 使用前提

在使用 my2sql 前,请确保满足以下条件:

  • MySQL 已开启 binlog,且格式为ROW:

[mysqld]log-bin = mysql-binbinlog_format = ROWbinlog_row_image=fullserver-id = 1
  • 连接账号具备必要权限:

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'%';

获取目标 binlog 文件路径或名称(可通过 SHOW BINARY LOGS; 查看)

2. 安装方式

  • 方式一:源码编译安装

1) 安装Go环境:

yum install -y epel-releaseyum install -y go git

安装完成后验证

# go versiongo version go1.20.12 linux/amd64

2) 拉取源码:

执行git clone https://github.com/liuhr/my2sql.git命令克隆源码仓库至本地。

# git clone https://github.com/liuhr/my2sql.gitCloning into 'my2sql'...remote: Enumerating objects: 738, done.remote: Counting objects: 100% (189/189), done.remote: Compressing objects: 100% (57/57), done.remote: Total 738 (delta 149), reused 132 (delta 132), pack-reused 549 (from 1)Receiving objects: 100% (738/738), 25.97 MiB | 10.10 MiB/s, done.Resolving deltas: 100% (344/344), done.

3) 编译生成可执行文件:

进入源码目录并执行编译命令

cd my2sql && go build -o my2sql

4) 编译完成后,目录下将生成my2sql二进制文件,可以验证一下是否有效

./my2sql -V

  • 方式二:二进制包安装

从GitHub Releases页面下载对应系统的二进制包,下载地址:https://github.com/liuhr/my2sql/blob/master/releases,目前有编译好的centos7的二进制包,下载后,赋予可执行权限,例如:

[root@vbox ~]# wget https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql--2026-01-23 01:44:28-- https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sqlResolving github.com (github.com)... 20.205.243.166Connecting to github.com (github.com)|20.205.243.166|:443... connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/html]Saving to: ‘my2sql’ [ <=> ] 184,744 765KB/s in 0.2s 2026-01-23 01:44:30 (765 KB/s) - ‘my2sql’ saved [184744] [root@vbox ~]# ll -h total 192K-rw-------. 1 root root 1.3K Jan 13 20:25 anaconda-ks.cfg-rw-r--r-- 1 root root 943 Jan 22 01:43 deadlock.sh-rw-r--r-- 1 root root 181K Jan 23 01:44 my2sql[root@vbox ~]# chmod +x my2sql [root@vbox ~]# ll -h total 192K-rw-------. 1 root root 1.3K Jan 13 20:25 anaconda-ks.cfg-rw-r--r-- 1 root root 943 Jan 22 01:43 deadlock.sh-rwxr-xr-x 1 root root 181K Jan 23 01:44 my2sql[root@vbox ~]#

执行./my2sql -v命令,若终端输出版本信息,说明安装成功。(我测了一下当前的在centos7.9上运行异常,因此大家可以优先考虑编译安装的版本)

二、 如何使用my2sql

my2sql的核心功能通过命令行参数组合实现,语法结构如下:

./my2sql \ -host <MySQL地址> \ -port <端口> \ -user <用户名> \ -password <密码> \ -start-file <起始binlog文件> \ [其他选项]

重要参数说明如下:

参数说明
-hostMySQL 主机地址(默认 127.0.0.1)
-portMySQL 端口(默认 3306)
-user

/-password

数据库账号、密码

-start-file起始 binlog 文件名,如 mysql-bin.000001
-stop-file结束 binlog 文件(可选)
-start-datetime

/-stop-datetime

时间范围,格式

'YYYY-MM-DD HH:MM:SS'

-databases指定数据库,多个用逗号分隔
-tables指定表,格式db1.tb1,db2.tb2
-sql

要解析的sql类型,可选参数insert、update、delete,默认全部解析

-work-type

工作模式:2sql:生成原始sql;rollback:生成回滚sql;stats:只统计DML、事务信息

-output-to

输出方式:stdout(默认);file 输出到文件

-output-dir-output-to=file时指定输出目录

三、 实战场景应用示例

场景1:解析指定时间范围binlog,生成执行SQL

[root@vbox my2sql]# ./my2sql -host 127.0.0.1 -port 3306 -user test -password 123456 \ -start-file mysql-bin.000001 \ -start-datetime "2026-01-01 10:00:00" \ -stop-datetime "2026-02-01 11:00:00" \ -databases testdb -work-type 2sql \ -output-dir ./

内容如下:

场景2:解析指定时间范围binlog,生成回滚SQL

[root@vbox my2sql]# ./my2sql -host 127.0.0.1 -port 3306 -user test -password 123456 -start-file mysql-bin.000001 -start-datetime "2026-01-01 10:00:00" -stop-datetime "2026-02-01 11:00:00" -databases testdb -work-type rollback -output-dir ./[2026/01/23 03:02:44] [info] binlogsyncer.go:164 create BinlogSyncer with config {1113306 mysql 127.0.0.1 3306 test utf8 false false <nil> false Local false 0 0s 0s 0 false false 0 <nil> 0xc0001a8000 0x635100}[2026/01/23 03:02:44] [info] binlogsyncer.go:400 begin to sync binlog from position (mysql-bin.000001, 4)[2026/01/23 03:02:44] [info] events.go:61 start thread 1 to generate redo/rollback sql[2026/01/23 03:02:44] [info] events.go:61 start thread 2 to generate redo/rollback sql[2026/01/23 03:02:44] [info] events.go:221 start thread to write redo/rollback sql into file[2026/01/23 03:02:44] [info] stats_process.go:166 start thread to analyze statistics from binlog[2026/01/23 03:02:44] [info] repl.go:16 start to get binlog from mysql[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000001, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000002, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000003, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000004, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000005, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000006, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000007, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000008, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000009, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000010, 4)[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000011, 4)[2026/01/23 03:02:49] [info] repl.go:84 deadline exceeded.[2026/01/23 03:02:49] [info] repl.go:18 finish getting binlog from mysql[2026/01/23 03:02:49] [info] events.go:196 exit thread 1 to generate redo/rollback sql[2026/01/23 03:02:49] [info] stats_process.go:266 exit thread to analyze statistics from binlog[2026/01/23 03:02:49] [info] events.go:196 exit thread 2 to generate redo/rollback sql[2026/01/23 03:02:49] [info] events.go:270 finish writing rollback sql into tmp files, start to revert content order of tmp files[2026/01/23 03:02:49] [info] rollback_process.go:15 start thread 1 to revert rollback sql files[2026/01/23 03:02:49] [info] rollback_process.go:41 start to revert tmp file .rollback.8.sql into rollback.8.sql[2026/01/23 03:02:49] [info] rollback_process.go:156 finish reverting tmp file .rollback.8.sql into rollback.8.sql[2026/01/23 03:02:49] [info] rollback_process.go:25 exit thread 1 to revert rollback sql files[2026/01/23 03:02:49] [info] events.go:283 finish reverting content order of tmp files[2026/01/23 03:02:49] [info] events.go:288 exit thread to write redo/rollback sql into file

会生成一个回滚文件

内容如下,逆向的结果:

其他场景可以参考官方案例进行试用

https://github.com/liuhr/my2sql?tab=readme-ov-file

四、工具对比

在社区中,binlog2sql 是较早被广泛使用的 binlog 解析工具。两者在设计目标上有相似之处,但在实现细节和能力覆盖上存在差异:

对比维度

my2sql

binlog2sql

开发语言

Go语言,编译型,性能优异

Python,解释型,性能一般

解析速度

较快,支持10GB及以上大binlog分批解析,内存占用低

较慢,处理大binlog时易出现卡顿、内存溢出问题,需手动拆分文件

核心功能

支持SQL/JSON/CSV格式解析、回滚SQL生成、主从延迟分析、大事务识别

支持SQL解析、回滚SQL生成,功能较为基础

兼容性

支持MySQL 5.6~8.0+版本,适配TiDB等国产数据库

支持MySQL 5.6~5.7版本,对8.0+新版本特性适配滞后

上手难度

中等,二进制包可直接部署使用,参数丰富需掌握核心用法

较低,基于Python脚本开发,参数简洁,适合新手入门

依赖环境

二进制包无额外依赖,源码编译需Go环境

需依赖Python 2.7+环境,同时需安装pymysql等依赖库

适用场景

生产环境、大binlog解析、主从架构优化、复杂业务审计

测试环境、小体量binlog解析、简单数据恢复场景

五、结语

my2sql 作为一款现代、轻量、功能完整的 binlog 解析工具,正在被越来越多的团队采纳。它不仅提升了数据恢复的效率,也为变更审计和故障排查提供了可靠支持。

无论你是 DBA、运维工程师,还是后端开发,掌握这类工具都能在关键时刻“力挽狂澜”。

🔗 项目地址:https://github.com/liuhr/my2sql

📥 下载地址:GitHub Releases 提供 Linux/macOS/Windows 全平台支持

欢迎留言交流你的数据恢复、binlog解析等经验及实战案例。

关注微信公众号「数据库干货铺」,获取更多数据库运维干货。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 23:40:37

基于PLC的出货平台自动门设计

基于PLC的出货平台自动门设计 第一章 绪论 出货平台作为仓储物流与运输环节的衔接枢纽&#xff0c;自动门的运行效率与安全性直接影响货物装卸效率和人员作业安全。传统出货平台门多采用人工手动控制或简易电磁感应控制&#xff0c;存在响应滞后、误触发率高、缺乏安全防护等问…

作者头像 李华
网站建设 2026/2/26 6:25:37

.NET Core Web 中的健康检查端点

.NET Core Web 中的健康检查端点 文章目录 .NET Core Web 中的健康检查端点概述核心概念1. 健康状况状态2. 主要组件 基本配置1. 添加健康检查服务2. 配置端点路由 创建自定义健康检查实现 IHealthCheck 接口 常用内置健康检查1. 数据库健康检查2. URL 健康检查3. 内存检查 高级…

作者头像 李华
网站建设 2026/2/17 10:34:20

moltbook爆火背后:人类操控?伪造截图?Karpathy发风险提醒

部分开发者认为 moltbook 是科幻照进现实的突破&#xff0c;可能催生 AI 集体智慧&#xff08;甚至自主意识&#xff09;的涌现&#xff0c;并为研究 AI 社会提供真实案例。这个周末&#xff0c;整个科技圈都被 moltbook 刷屏了。简单来说&#xff0c;这是一个专为 AI 设立的社…

作者头像 李华
网站建设 2026/2/20 5:40:07

横评后发现!继续教育论文神器 —— 千笔·专业学术智能体

你是否也曾为论文写作而焦虑&#xff1f;选题无从下手、框架杂乱无章、文献查找费时费力、查重率高得让人崩溃……这些困扰&#xff0c;是否让你在学术道路上举步维艰&#xff1f;面对毕业季的压力&#xff0c;你是否渴望一个高效、专业的写作助手&#xff1f;千笔AI&#xff0…

作者头像 李华
网站建设 2026/2/17 9:38:20

2026毕设ssm+vue农村贫困户管理系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于精准扶贫信息管理问题的研究&#xff0c;现有研究主要以宏观政策分析和单一功能模块开发为主&#xff0c;专门针对整合贫困…

作者头像 李华