码迷,mamicode.com
首页 > 其他好文 > 详细

MyFlash工具

时间:2021-03-03 12:15:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:roo   rem   mes   its   nbsp   number   tab   lib   host   

MyFlash工具是美团开发的一个开源辅助性工具,主要用来恢复数据(误删删除是每个DBA比较头疼的事情)

MyFlash的安装和使用

下载地址:https://github.com/Meituan-Dianping/MyFlash

1.环境说明:

  1)本机是centos7.x

  2)mysql5.7.26 默认的binlog模式是row 且binlog_row_image=full

  3)只支持DML语句的回滚(insert/delete/update) 

2.安装

  1)安装依赖包

    >>yum -y  install gcc*  pkg-config glib2 libgnomeui-devel  glib2-devel

  2) 下载并安装Myflash工具

    >>git clone XXXXXXXXXXXXXXXX

       >>cd Myflash   --->gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback  编译安装

3.使用

    ./flashback --binlogFileName=binlog文件 --start-position= --stop-position=  --databaseNames=‘‘ --tableNames=‘‘  --sqlTypes=‘DELETE|INSERT|UPDATE‘

 

4.参数说明:

1.databaseNames    指定需要回滚的数据库名。多个数据库可以用“,”隔开。如果不指定该参数,相当于指定了所有数据库。  2.tableNames?指定需要回滚的表名。多个表可以用“,”隔开。如果不指定该参数,相当于指定了所有表。
3.start-position?指定回滚开始的位置。如不指定,从文件的开始处回滚。请指定正确的有效的位置,否则无法回滚
4.stop-position?指定回滚结束的位置。如不指定,回滚到文件结尾。请指定正确的有效的位置,否则无法回滚
5.start-datetime?指定回滚的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
6.stop-datetime?指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
 7.sqlTypes?指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开。
 8.maxSplitSize?一旦指定该参数,对文件进行固定尺寸的分割(单位为M),过滤条件有效,但不进行回滚操作。该参数主要用来将大的binlog文件切割,防止单次应用的binlog尺寸过大,对线上造成压力
9.binlogFileNames?指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持
10.outBinlogFileNameBase?指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback
11.logLevel?仅供开发者使用,默认级别为error级别。在生产环境中不要修改这个级别,否则输出过多
 12.include-gtids?指定需要回滚的gtid,支持gtid的单个和范围两种形式。
13.exclude-gtids?指定不需要回滚的gtid,用法同include-gtids

解析文件后会在同名文件夹下生成 binlog_output_base.flashback 文件

 

5.恢复:

  mysqlbinlog binlog_output_bash.flashback|mysql -u -p  建议先在测试环境进行恢复,研发进行数据校对,再进行线上恢复

6.结论

  1.MyFlash生成的结果是原生binlog格式,所以要用mysqlbinlog应用,如果想可视化,用mysqlbinlog再度解析即可

  2.MyFlash是离线解析,速度也很快,非常方面

  3MyFlash能增强恢复精度,能根据操作类型过滤

7.补充:

  1.经过最新测试 myflash是支持mysql5.7-MGR 架构数据恢复的

  2.针对gtid复制模式,需要在应用回滚日志时加上--skip-gtids可以防止报错,恢复成功

 

案例1(测试成功:

(1)创建数据并修改数据

###创建数据
root@localhost:liulin>desc t;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| f     | int(11) | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

root@localhost:liulin>insert into t values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

root@localhost:liulin>
root@localhost:liulin>
root@localhost:liulin>select * from t;
+----+------+
| id | f    |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
|  6 |    6 |
|  7 |    7 |
|  8 |    8 |
|  9 |    9 |
| 10 |   10 |
+----+------+

####修改数据

root@localhost:liulin>update t set f=100 where id<5;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0


root@localhost:liulin>select * from t;
+----+------+
| id | f |
+----+------+
| 1 | 100 |
| 2 | 100 |
| 3 | 100 |
| 4 | 100 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
+----+------+

 

(2)使用mysqlbinlog或show binlog events in ‘xxxxx‘找到闪回的起点和终点

   例如:>>mysqlbinlog mysql-bin.000004  –base64-output=decode-rows -vv   可以更加详细查看binlog日志文件中的内容找到要恢复的起点位置和终点位置

 

(3)再使用flashback工具生产要闪回的文件

  命令:>>flashback  --binlogFileNames=/data/mysql/3308/binlog/mysql-bin.000004 --start-position=680 --stop-position=1005

  这时会生成一个binlog_output_base.flashback

(4)然后再应用该文件到数据中执行数据库中数据闪回

  命令:>>mysqlbinlog binlog_output_base.flashback   --skip-gtids |mysql -uroot -p123 -S /data/mysql/3308/mysql.sock

(5)进行检查,看是否进行闪回成功

 

 

案例2:

  基于时间点恢复:

   >>./binary/flashback --databaseNames="d1" --tableNames="t1" --start-datetime="2020-11-29 17:22:30" --stop-datetime="2020-11-29 17:24:30" --sqlTypes="UPDATE,DELETE" --binlogFileNames=/opt/mysql/log/binlog/3308/mysql-bin.000001 --outBinlogFileNameBase=test.sql

MyFlash工具

标签:roo   rem   mes   its   nbsp   number   tab   lib   host   

原文地址:https://www.cnblogs.com/zmc60/p/14471538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!