首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

binlog解析工具—my2sql

一、工具介绍

  my2sql是go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息。类似工具有binlog2sql、MyFlash、my2fback等,本工具基于my2fback、binlog_rollback工具二次开发而来。

1.1 工具对比

binlog2sql:Python 编写,用于生成回滚/前滚 SQL 进行数据恢复/补偿

MyFlash:C 语言编写,用于生成反向 binlog 文件(二进制)进行数据恢复

my2sql:Go 语言编写,除了闪回,还提供了前滚和事务分析的功能

1.2 用途

数据快速回滚(闪回)

主从切换后新master丢数据的修复

从binlog生成标准SQL,带来的衍生功能

生成DML统计信息,可以找到哪些表更新的比较频繁

IO高TPS高, 查出哪些表在频繁更新

找出某个时间点数据库是否有大事务或者长事务

主从延迟,分析主库执行的SQL语句

除了支持常规数据类型,对大部分工具不支持的数据类型做了支持,比如json、blob、text、emoji等数据类型sql生成

1.3 限制

使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响

只能回滚DML, 不能回滚DDL

支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp

此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限

MySQL8.0版本需要在配置文件中加入default_authentication_plugin =mysql_native_password,用户密码认证必须是mysql_native_password才能解析

1.4 性能对比

二、工具使用

2.1 参数说明

-U

  优先使用unique key作为where条件,默认false

-add-extraInfo

  是否把database/table/datetime/binlogposition…信息以注释的方式加入生成的每条sql前,默认false

datetime=2020-07-16_10:44:09 database=orchestrator table=cluster_domain_name binlog=mysql-bin.011519 startpos=15552 stoppos=15773

-big-trx-row-limit n

  找出满足n条sql的事务,默认500条

-databases 、 -tables

  库及表条件过滤, 以逗号分隔

-sql

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

-doNotAddPrifixDb

  默认生成insert into db1.tb1 (x1, x1) values (y1, y1)类sql,也可以生成不带库名的sql

-file-per-table

  为每个表生成一个sql文件

-full-columns

  生成的sql是否带全列信息,默认false

-ignorePrimaryKeyForInsert

  生成的insert语句是否去掉主键,默认false

-output-dir

  将生成的结果存放到制定目录

-output-toScreen

  将生成的结果打印到屏幕,默认写到文件

-threads

  线程数,默认8个

-work-type

  2sql:生成原始sql,rollback:生成回滚sql,stats:只统计DML、事务信息

2.2 使用案例

解析标准SQL

[root@zijie releases]# ./my2sql -user root -password 970125 -work-type 2sql -start-file /data/mysql/binlog/binlog.000008 -start-datetime "2021-03-01 00:00:00" -stop-datetime "2021-04-01 00:00:00" -output-dir ./

解析回滚SQL

统计DML以及大事务

统计各个表的DML操作数量,统计一个事务大于500条、时间大于300秒的事务

从某一位置解析出标准SQL,并且持续打印到屏幕

------------END-----------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210322A02GKL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券