mysql--my2sql 详解

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

my2sql的GitHub地址:https://github.com/liuhr/my2sql

优点:

功能丰富,不仅支持回滚操作,还有其他实用功能。

基于golang实现,速度快,全量解析1.1Gbinlog只需要1分30秒左右,当前其他类似开源工具一般要几十分钟。

二、my2sql用途

数据快速回滚(闪回)

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

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

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

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

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

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

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

三、产品性能对比

binlog2sql当前是业界使用最广泛的MySQL回滚工具,下面对my2sql和binlog2sql做个性能对比。

my2sql binlog2sql

1.1G binlog生成回滚SQL 1分40秒 65分钟

1.1G binlog生成原始SQL 1分30秒 50分钟

1.1G binlog生成表DML统计信息、以及事务统计信息 40秒 不支持

四、功能对比

五、安装

方式一 go编译

git clone https://github.com/liuhr/my2sql.git

cd my2sql/

go build .

复制my2sql 到/usr/bin 或者 /usr/local/bin 中

方式二 已编译好的二进制文件

二进制文件下载地址

​ ​https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql​​

#1、把my2sql 二进制文件复制到安装目录下

cp /usr/local/bin/my2sql  mysql8:/usr/local/bin

chmod +x /usr/local/bin/my2sql

参数说明:

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

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

-big-trx-row-limit n

transaction with affected rows greater or equal to this value is considerated as big transaction

找出影响了n行数据的事务,默认500条

-start-file  

开始解析的binlog文件

-stop-file

解析到此binlog文件为止,不包括这个文件

与binlog2sql是包含这个文件,两者有区别,请注意

-databases 、 -tables 库及表条件过滤, 以逗号分隔

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

-doNotAddPrifixDb

Prefix table name witch database name in sql,ex: insert into db1.tb1 (x1, x1) values (y1, y1)

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

-file-per-table 为每个表生成一个sql文件

-full-columns

For update sql, include unchanged columns. for update and delete, use all columns to build where condition.

default false, this is, use changed columns to build set part, use primary/unique key to build where condition

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

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

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

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

-threads 线程数,默认8个

-work-type 2sql表示生成原始sql,rollback表示生成回滚sql,stats表示只统计DML、事务信息

六、解析用法

解析标准sql:

my2sql -user admin -password admin -host 172.20.2.181 -port 3308 -work-type 2sql -start-file mysql-bin.000004 -databases test -tables tt8 -output-dir /u01/mysql3308/backup/my2sql_recover

解析回滚sql:

my2sql -user admin -password admin -host 172.20.2.181 -port 3308 -work-type rollback -start-file mysql-bin.000004 -databases test -tables tt8 -output-dir /u01/mysql3308/backup/my2sql_recover

七、my2sql 与binlog2sql 对比总结

从解析效率对比来看,my2sql 是优胜于 binlog2sql 的,并且 my2sql 另外还具有解析大事务或者长事务,生成 DML 统计信息的功能,是很实用一款 binlog 解析工具,但是通过实验来看,my2sql 的并发功能似乎并没有加快其解析效率,建议解析时使用默认的线程数即可。


虽说 my2sql 优点很多,但是使用时还是需要注意,它也有一些限制,如
my2sql 是伪装成从库去在线获取主库 binlog,然后进行解析,因此执行操作的数据库用户需要具有 SELECT,REPLICATION SALVE,REPLICATION CLIENT 的权限。
使用回滚/闪回功能时,binlog 格式必须为 row ,且 binlog_row_image=full ,DML 统计以及大事务分析不受影响
只能回滚 DML ,不能回滚 DDL
my2sql 工具在使用时需要注意下字段的数据类型,存在解析 bug ,会导致解析的数据与原数据有差异,具体参考:​ ​https://github.com/liuhr/my2sql/issues/31​​


binlog2sql 使用时也需要注意,它也有一些限制,如
My​ ​SQL Server​​ 必须设置 server_id ,log_bin ,max_binlog_size=1G ,binlog_format=row ,binlog_row_image=full 这些参数,
与 my2sql 一样,也是伪装成从库拉取 binlog ,需要连接数据库的用户有 SELECT ,REPLICATION SLAVE ,REPLICATION CLIENT 权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值