使用场景
- 排查问题获取一段时间内的binlog,颗粒度 表级
- 数据闪回操作
- dml操作信息统计分析
为什么需要使用第三方工具,原生mysqlbinlog工具不能吗?
- 原生mysqlbinlog不支持获取表级别binlog
- 不支持生成回滚语句
- 获取的binlog可读性差,不利于分析排查问题
my2sql
github:https://github.com/liuhr/my2sql
go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成:
- 原始SQL
- 回滚SQL
- 去除主键的INSERT SQL等等
- 从binlog生成标准SQL
- 也可以生成DML统计信息
总结:用来sql闪回和binlog分析
对比
相对于binlog2sql,速度优势明显
性能对比
命令参数
忽略,参考github
基础功能验证
根据时间点解析出标准SQL
#伪装成从库解析binlog
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode repl -work-type 2sql -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -output-dir ./tmpdir
#直接读取binlog文件解析
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode file -local-binlog-file ./mysql-bin.011259 -work-type 2sql -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -output-dir ./tmpdir
解析出回滚SQL
#伪装成从库解析binlog
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode repl -work-type rollback -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -output-dir ./tmpdir
#直接读取binlog文件解析
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode file -local-binlog-file ./mysql-bin.011259 -work-type rollback -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -output-dir ./tmpdir
统计时间范围各个表的DML操作数量
统计一个事务大于500条、时间大于300秒的事务
#伪装成从库解析binlog
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode repl -work-type stats -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -big-trx-row-limit 500 -long-trx-seconds 300 -output-dir ./tmpdir
#直接读取binlog文件解析
./my2sql -user root -password xxxx -host 127.0.0.1 -port 3306 -mode file -local-binlog-file ./mysql-bin.011259 -work-type stats -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -big-trx-row-limit 500 -long-trx-seconds 300 -output-dir ./tmpdir
问题
- 分析dml命令计算方式存在问题,不准确
- 给出的编译包存在问题,需要修改。
二进制包
修复问题重新编译
mac-arm:
linux:
bingo2sql
https://github.com/hanchuanchuan/bingo2sql
go版MySQL binlog解析工具
- 本地离线解析:指定本地binlog文件和要解析的表结构即可
- 远程在线解析:指定远程数据库地址,起止时间范围或binlog范围,可指定库/表和操作类型,GTID/线程号等
- 解析服务API:提供HTTP协议方式的解析接口,支持解析和打包下载
总结:用来sql闪回和binlog获取
对比
相对于binlog2sql,速度优势明显
相对于my2sql,有如下优势
- 代码可读性更强,可靠性更强
- 提供api服务
- 社区更活跃
缺点:
- 未提供binlog分析能力
命令参数
忽略参考官网
基础功能验证
根据时间点解析出标准SQL
/bingo2sql -h 127.0.0。1 -u ** -P 30036 -p *** --start-time="2022-08-27 00:15:00" --stop-time "2022-08-27 18:17:00" -d test_xiaozhuang --star
t-file "mysql-bin.000002" --output ./out
解析出回滚SQL
/bingo2sql -h 192.168.54.234 -u *** -P 30036 -p *** --start-time="2022-08-27 00:15:00" --stop-time "2022-08-27 18:17:00" -d test_xiaozhuang --star
t-file "mysql-bin.000002" -B --output ./out
总结
推荐使用bingo2sql,并进行源码学习,可尝试二次开发。
且bingo2sql的和goinception是同一作者,实力还是很强的,建议学习。