简介
binlog_inspector通过解释mysql/mariadb binlog/relaylog实现以下三大功能:
1)flashback/闪回/回滚, 实现DML的回滚到任意时间或者位置。
生成的SQL形式如下
```sql
begin
DELETE FROM `binlog_inspector`.`emp` WHERE `id`=1
# datetime=2017-10-23_00:14:28 database=binlog_inspector table=emp binlog=mysql-bin.000012 startpos=417 stoppos=575
commit
```
2)前滚,把binlog/relaylog的DML解释成易读的SQL语句。
生成的SQL形式如下
```sql
begin
# datetime=2017-10-23_00:14:28 database=binlog_inspector table=emp binlog=mysql-bin.000012 startpos=417 stoppos=575
INSERT INTO `binlog_inspector`.`emp` (`id`,`name`,`sr`,`icon`,`points`,`sa`,`sex`) VALUES (1,'张三1','华南理工大学&SCUT',X'89504e47',1.1,1.1,1)
commit
```
3)统计分析, 统计各个表的DML情况, 找出大事务与长事务。
*以上功能均可指定任意的单库多库, 单表多表, 任意时间点, 任意binlog位置。
*支持mysql5.5及以上,也支持mariadb的binlog, 支持传统复制的binlog, 也支持GTID的binlog。
*支持直接指定文件路径的binlog, 也支持主从复制, binlog_inspector作为从库从主库拉binlog来过解释。
*也支持目标binlog中包含了DDL(增加与减少表字段, 变化表字位置)的场景。
限制
*binlog格式必须为row,且binlog_row_image=full
*只能回滚DML, 不能回滚DDL
*支持V4格式的binlog, V3格式的没测试过
适用场景
1)数据被误操作, 需要把某几个表的数据不停机回滚到某个时间点
2)数据异常, 帮忙从binlog中找出这个表的某些数据是什么时间修改成某些值的
3)IO高TPS高, 帮忙查出那些表在频繁更新
4)需要把这个表从昨晚1点到3点的更新提供给开发查问题
5)帮忙找出某个时间点数据库是否有大事务或者长事务
特点
1)速度快。 解释512MB的binlog:
1.1)生成回滚的SQL只需要1分26秒(6线程)
1.2)生成前滚的SQL只需要1分26秒(6线程)
1.3)生成表DML统计信息, 大事务与长事务统计信息只需要55秒
1.4)mysqlbinlog解释同样的binlog只需要36秒
2) 支持V4版本的binlog, 支持传统与GTID的binlog, 支持mysql5.5与mairiadb5.5及以上版本的binlog, 也同样支持relaylog(结果中注释的信息binlog=xxx startpos=xxx stoppos=xx是对应的主库的binlog信息)
--mtype=mariadb
3)支持以时间及位置条件过滤, 并且支持单个以及多个连续binlog的解释。
解释binlog的开始位置:
--start-binlog=mysql-bin.000101
--start-pos=4
解释binlog的结束位置:
--stop-binlog=mysql-bin.000105
--stop-pos=4
解释binlog的开始时间
--start-datetime="2018-04-21 00:00:00"
解释binlog的结束时间
--stop-datetime="2018-04-22 11:00:00"
4)支持以库及表条件过滤, 以逗号分隔
--databases=db1,db2
--tables=tb1,tb2
5)支持以DML类型(update,delete,insert)条件过滤
--sqltypes=delete,update
6) 支持分析本地binlog,也支持复制协议, binlog_inspector作为一个从库从主库拉binlog来本地解释
--mode=file //解释本地binlog
--mode=repl //binlog_inspector作为slave连接到主库拉binlog来解释
7)输出的结果支持一个binlog一个文件, 也可以一个表一个