核心内容摘要
BooruDatasetTagManager:AI训练数据标注的效率革命
本文首发于「数据库干货铺」公众号转载请联系授权在 MySQL 运维和数据恢复场景中二进制日志binlog是不可或缺的核心组件。
当发生误操作、需要审计变更或进行数据回溯时如何高效、准确地从 binlog 中提取出可读的 SQL 语句成为 DBA 和开发人员关注的重点。
目前社区中有多种工具可用于解析 binlog其中 my2sql 是近年来广受关注的一款开源工具。
它由国内开发者使用 Go 语言编写具备高性能、功能丰富、部署简单等特点。
本文将详细介绍 my2sql 的
使用方法并简要说明其与同类工具如 binlog2sql在技术特性上的差异帮助大家根据实际需求选择合适的方案。
my2sql 是什么如何安装my2sql 是一个用于解析 MySQL ROW 格式 binlog 的命令行工具。
它可以将 binlog 中的事件还原为原始的 DMLINSERT/UPDATE/DELETE或 DDLCREATE/ALTER/DROP语句同时也支持生成对应的回滚 SQLFlashback适用于数据恢复、变更审计、同步校验等场景。
主要特点包括支持按时间、binlog 文件、数据库、表名等多维度过滤可输出原始 SQL 或回滚 SQL支持 GTID 模式下的事务定位同时解析 DML 与 DDL 语句无需依赖外部运行环境提供静态编译的二进制文件开源免费项目持续维护中
使用前提在使用 my2sql 前请确保满足以下条件MySQL 已开启 binlog且格式为ROW[mysqld]log-bin mysql-binbinlog_format ROWbinlog_row_imagefullserver-id 1连接账号具备必要权限GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO user%;获取目标 binlog 文件路径或名称可通过 SHOW BINARY LOGS; 查看
安装方式方式一源码编译安装1 安装Go环境yum install -y epel-releaseyum install -y go git安装完成后验证# go versiongo version go
1.
2
12 linux/amd642 拉取源码执行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/
, done.remote: Compressing objects: 100% (57/
, done.remote: Total 738 (delta
, reused 132 (delta
, pack-reused 549 (from
Receiving objects: 100% (738/
,
2
97 MiB |
1
10 MiB/s, done.Resolving deltas: 100% (344/
, done.
编译生成可执行文件进入源码目录并执行编译命令cd my2sql go build -o my2sql4 编译完成后目录下将生成my2sql二进制文件可以验证一下是否有效./my2sql -V方式二二进制包安装从GitHub Releases页面下载对应系统的二进制包下载地址https://github.com/liuhr/my2sql/blob/master/releases目前有编译好的centos7的二进制包下载后赋予可执行权限例如[rootvbox ~]# wget https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_
x/my2sql--
01:44:28-- https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_
x/my2sqlResolving github.com (github.com)...
20.
205.
2
166Connecting to github.com (github.com)|
20.
205.
2
166|:
.. connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/html]Saving to: ‘my2sql’ [ ] 184,744 765KB/s in
2s
01:44:30 (765 KB/s) - ‘my2sql’ saved [184744] [rootvbox ~]# ll -h total 192K-rw-------. 1 root root
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[rootvbox ~]# chmod x my2sql [rootvbox ~]# ll -h total 192K-rw-------. 1 root root
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[rootvbox ~]#执行./my2sql -v命令若终端输出版本信息说明安装成功。
我测了一下当前的在centos
9上运行异常因此大家可以优先考虑编译安装的版本
如何使用my2sqlmy2sql的核心功能通过命令行参数组合实现,语法结构如下./my2sql \ -host MySQL地址 \ -port 端口 \ -user 用户名 \ -password 密码 \ -start-file 起始binlog文件 \ [其他选项]重要参数说明如下参数说明-hostMySQL 主机地址默认
127.
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指定表格式db
tb1,db
tb2-sql要解析的sql类型可选参数insert、update、delete默认全部解析-work-type工作模式2sql生成原始sqlrollback生成回滚sqlstats只统计DML、事务信息-output-to输出方式stdout默认);file 输出到文件-output-dir当-output-tofile时指定输出目录
实战场景应用示例场景1解析指定时间范围binlog生成执行SQL[rootvbox my2sql]# ./my2sql -host
127.
0.
1 -port 3306 -user test -password 123456 \ -start-file mysql-bin.000001 \ -start-datetime
10:00:00 \ -stop-datetime
11:00:00 \ -databases testdb -work-type 2sql \ -output-dir ./内容如下场景2解析指定时间范围binlog生成回滚SQL[rootvbox my2sql]# ./my2sql -host
127.
0.
1 -port 3306 -user test -password 123456 -start-file mysql-bin.000001 -start-datetime
10:00:00 -stop-datetime
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.
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,
[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,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000002,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000003,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000004,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000005,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000006,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000007,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000008,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000009,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000010,
[2026/01/23 03:02:44] [info] binlogsyncer.go:816 rotate to (mysql-bin.000011,
[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.
sql into rollback.
sql[2026/01/23 03:02:49] [info] rollback_process.go:156 finish reverting tmp file .rollback.
sql into rollback.
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?tabreadme-ov-file
工具对比在社区中binlog2sql 是较早被广泛使用的 binlog 解析工具。
两者在设计目标上有相似之处但在实现细节和能力覆盖上存在差异对比维度my2sqlbinlog2sql开发语言Go语言编译型性能优异Python解释型性能一般解析速度较快支持10GB及以上大binlog分批解析内存占用低较慢处理大binlog时易出现卡顿、内存溢出问题需手动拆分文件核心功能支持SQL/JSON/CSV格式解析、回滚SQL生成、主从延迟分析、大事务识别支持SQL解析、回滚SQL生成功能较为基础兼容性支持MySQL
6~
0版本适配TiDB等国产数据库支持MySQL
6~
7版本对
0新版本特性适配滞后上手难度中等二进制包可直接部署使用参数丰富需掌握核心用法较低基于Python脚本开发参数简洁适合新手入门依赖环境二进制包无额外依赖源码编译需Go环境需依赖Python
7环境同时需安装pymysql等依赖库适用场景生产环境、大binlog解析、主从架构优化、复杂业务审计测试环境、小体量binlog解析、简单数据恢复场景
结语my2sql 作为一款现代、轻量、功能完整的 binlog 解析工具正在被越来越多的团队采纳。
它不仅提升了数据恢复的效率也为变更审计和故障排查提供了可靠支持。
无论你是 DBA、运维工程师还是后端开发掌握这类工具都能在关键时刻“力挽狂澜”。
项目地址https://github.com/liuhr/my2sql 下载地址GitHub Releases 提供 Linux/macOS/Windows 全平台支持欢迎留言交流你的数据恢复、binlog解析等经验及实战案例。
关注微信公众号「数据库干货铺」