合 MySQL误操作闪回恢复利器之my2sql
- 一、my2sql简介
- 二、my2sql用途
- 三、产品性能对比
- 四、安装
- 五、重要参数说明
- 六、使用案例
- 6.1 解析出标准SQL
- 根据时间点解析出标准SQL
- 根据pos点解析出标准SQL
- 6.2 解析出回滚SQL
- 根据时间点解析出回滚SQL
- 根据pos点解析出回滚SQL
- 6.3 统计DML以及大事务
- 统计时间范围各个表的DML操作数量,统计一个事务大于500条、时间大于300秒的事务
- 统计一段pos点范围各个表的DML操作数量,统计一个事务大于500条、时间大于300秒的事务
- 6.4 从某一个pos点解析出标准SQL,并且持续打印到屏幕
- 七、限制
- 八、案例演示
- 8.1 准备MySQL环境
- 8.2 执行DML操作
- 8.3 解析binlog生成标准SQL
- 8.4 执行闪回操作
- 8.5 解析binlog 统计DML、长事务与大事务分析
一、my2sql简介
可以用于MySQL误操作闪回的工具包括my2sql、binlog2sql和MyFlash等工具,其中,个人感觉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秒 | 不支持 |
四、安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | -- 申请一台全新的主机 docker rm -f lhrmy2sql docker run -d --name lhrmy2sql -h lhrmy2sql \ --privileged=true lhrbest/lhrcentos76:8.0 \ /usr/sbin/init docker exec -it lhrmy2sql bash -- 方法1:编译安装 yum install -y golang go version go env | grep GOPATH mkdir -p /root/go/src cd /root/go/src git clone https://github.com/liuhr/my2sql.git cd my2sql/ go build . -- 方法2:直接下载编译好的二进制文件。 -- https://github.com/liuhr/my2sql/tree/master/releases wget https://raw.githubusercontent.com/liuhr/my2sql/master/releases/centOS_release_6.x/my2sql wget https://raw.githubusercontent.com/liuhr/my2sql/master/releases/centOS_release_7.x/my2sql mv my2sql /usr/local/bin/my2sql chmod +x /usr/local/bin/my2sql -- 若不能下载,请添加以下解析: echo " 13.229.188.59 github.com 199.232.4.133 raw.githubusercontent.com " >> /etc/hosts |
五、重要参数说明
-U 优先使用unique key作为where条件,默认false
-add-extraInfo 是否把database/table/datetime/binlogposition...信息以注释的方式加入生成的每条sql前,默认false
123 datetime=2020-07-16_10:44:09 database=orchestrator table=cluster_domain_name binlog=mysql-bin.011519 startpos=15552 stoppos=15773UPDATE <code>orchestrator</code>.<code>cluster_domain_name</code> SET <code>last_registered</code>='2020-07-16 10:44:09' WHERE <code>cluster_name</code>='192.168.1.1:3306'
-big-trx-row-limit n
transaction with affected rows greater or equal to this value is considerated as big transaction
找出影响了n行数据的事务,默认500条-databases 、 -tables 库及表条件过滤, 以逗号分隔
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!