ITPub博客

首页 > 数据库 > MySQL > MySQL数据恢复——MyFlash恢复工具

MySQL数据恢复——MyFlash恢复工具

原创 MySQL 作者:a960549548 时间:2024-08-28 17:17:00 0 删除 编辑

概述 :

1. 如果 binlog 日志保留,可以闪回到任意时间

2. 可以针对实例、数据库、表及指定的 DML 语句进行回滚

3. 性能优于 binlog2sql 、 mysqlbinlog

限制:

1.binlog 格式必须为 row, 且 binlog_row_image=full

2. 仅支持 5.6 与 5.7

3. 只能回滚 DML (增、删、改)

1.安装:

unzipMyFlash-master.zip
mvMyFlash-master/usr/local/MyFlash/
gcc-wpkg-config--cflags--libsglib-2.0source/binlogParseGlib.c-obinary/flashback

2.参数介绍:

[root@10-31-1-119MyFlash]# cd binary/
[root@10-31-1-119binary]# ./flashback --help
Usage:
  flashback[OPTION?]
HelpOptions:
  -h, --helpShowhelpoptions
ApplicationOptions:
  --databaseNamesdatabaseNametoapply. ifmultiple, seperatebycomma(,)
  --tableNamestableNametoapply. ifmultiple, seperatebycomma(,)
  --start-positionstartposition
  --stop-positionstopposition
  --start-datetimestarttime(format%Y-%m-%d%H:%M:%S)
  --stop-datetimestoptime(format%Y-%m-%d%H:%M:%S)
  --sqlTypessqltypetofilter. supportINSERT, UPDATE,DELETE. ifmultiple, seperatebycomma(,)
  --maxSplitSizemaxfilesizeaftersplit, theuintisM
  --binlogFileNamesbinlogfilestoprocess. ifmultiple, seperatebycomma(,)  
  --outBinlogFileNameBaseoutputbinlogfilenamebase
  --logLevelloglevel, availableoptionisdebug,warning,error
  --include-gtidsgtidstoprocess
  --exclude-gtidsgtidstoskip

--databaseNames: 需要闪回的数据库名称,如果有多个数据库,用逗号”,”隔开。

--tableNames:要闪回的表名称,如果有多个表,用逗号”,”隔开。

--start-position:闪回的起始位置,如不指定,从文件开始处回滚。

--stop-position: 闪回的终止位置,如不指定,回滚到文件结尾。

--start-datetime:闪回的开始时间。

--stop-datetime: 闪回的终止时间。

--sqlTypes:指定需要回滚的sql类型,支持INSERT、UPDATE、DELETE,多个类型使用逗号”,”分开。

--maxSplitSize:对文件进行固定尺寸的切割,以防止单次应用binlog尺寸较大,对线上造成压力。

--binlogFileNames: 指定需要回滚的binlog文件,美团文档说目前只支持单个binlog文件,经测试已经支持多个binlog文件同时闪回。

--outBinlogFileNameBase:指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback。

logLevel:仅供开发者使用,默认级别为error级别。在生产环境中不要修改这个级别,否则输出过多。

include-gtids:指定需要回滚的gtid,支持gtid的单个和范围两种形式。

exclude-gtids:指定不需要回滚的gtid,用法同include-gtids。

3.使用方法:

(1).回滚整个文件:

./flashback--binlogFileNames=haha.000041mysqlbinlogbinlog_output_base.flashback|mysql-h<host>-u<user>-p

(2).回滚该文件中的所有insert语句:

/flashback--sqlTypes='INSERT'--binlogFileNames=haha.000041
mysqlbinlogbinlog_output_base.flashback|mysql-h<host>-u<user>-p

(3).回滚大文件:

回滚

./flashback--binlogFileNames=haha.000042

切割大文件

./flashback--maxSplitSize=1--binlogFileNames=binlog_output_base.flashback

应用

mysqlbinlogbinlog_output_base.flashback.000001|mysql-h<host>-u<user>-p

...

mysqlbinlogbinlog_output_base.flashback.<N>|mysql-h<host>-u<user>-p

4.使用案例:

mysql>selectcount(*) frome;
+----------+
|count(*) |
+----------+
|107|
+----------+
 
mysql>deletefrome;
QueryOK, 107rowsaffected(0.00sec)
 
 
mysql>flushlogs;
QueryOK, 0rowsaffected(0.00sec)

查看binlog信息,定位delete误删时间点:(可将误删除SQL在binlog中过滤)

mysqlbinlog--base64-output=decode-rows-vv/mysql/app/data/mysql_bin.000118|more

起始时间点:1341

metazo • /  /• VARSTRINGCIOO) • /  • at 1173  •211231 server id 21 1204 CRC32 Oxb004b3Sd  at 1204  *211231 server 'd 21 1269 acn oxcof8i7%  TRANSACTION READ  • at 1269  id 21  32 0.791101cf  •211231  SET  BEGLN  at i341  *211231 server 'd 21 1410 acn  ox6i2S083c  1410  '*ERE  /• INT —tazo a,'  p VARSTRING(60)  VARSTRING('S)  VARSTRINGC7S) "ta•7S •t  *s.' sis.123.4s67• meta-so nullable-l is_null.o •  is_null-o •i  •9=WLL /• DECIMALC2.2) •i  •IO=NULL /• [NT "tEO •  X' d • 34  Qu thr  Table_map: ' Npped to 108  Delete_rms: table id nags:  r br_a' I s

stop position:(该删除语句后第一个commit时间点8573)

DELETE FRO" 'test'. e  "HERE  '1-205 TNT nullable-o is_null-o •l  •Shelley •  SIS. 123.8080 • /• VARSTRINGC60?  DATE "taro nu •1  07-•AC_»•• p VARSTRING(30) •t  rullable•o /  /• meta•S14 nullable•l •t  •10-101 INT reta•o nullable•l  ts_null-o •1  DELETE VRON •test • .  *ERE  01=206 /• nunablezo •1  /• VARSTRING(60) "taz60 is_nuneO •Z'  03-•Gietz• VARSTRING(7S)  nullable-o  p VAR5TRING(7S)  SlhrS.123.81S1• /• VARSTRING(60) nullable•l •  OATE meta-O is  VARSTRIVC(JO)  110  • at 849S  • 54 server 'd 21 end_l  12:11.  SET •  INT —ta=o nunablel •1  /• INT "taro nunablel •1  •37 'd 21 8526 cRC32 Ox12073f49  cn ox2$b7ssai  nysqlbinlog • /  xid.36  Rotate to nysqI_bfn.OOOii9  POS 4

执行恢复:

./flashback--binlogFileNames=/mysql/app/data/mysql_bin.000118
--start-position=1341--stop-position=8573
--databaseNames=test--tableNames=e
--sqlTypes='DELETE'
--outBinlogFileNameBase=test_tb

随后会生成test_tb.flashback文件

查看该文件:

mysqlbinlog --base64-output=decode-rows -vv test_tb.flashback | more

ENSERT INTO ftest  s ET  al-IOO INT meta-O nullable•o is_nun.o •1  VARSTRING(60) "ta•60 rwllable•l is_null.o  VARSTRENG(7S) is_null.O •Z  is _null=o •  /• oare nu e/  VARSTRINGC30) nullab'e=o i •i  '8=24000.00 /• DECIMAL (8.2) •I  A9—NuLL •1  glO—wLL INT nullable•l •t  011•90 /• INT i S_nu11.O • /  INSERT INTO 'test . e  — tE7S •1  VARSTRINGC7S)  4568' "ta•60 nullablel •  OATE —two  p meta-so is_nun.o •z'  pa-17000.00 OECIMAL(S.2) nullable•o ts_null.o •1  •7  ENSERT INTO  •1•102 INT "ta•o nullableo is_mll.o •1  meta•60 rwllable•l is_null.o  Baan • /• VARSTRtNG(7S) nullable•o 's_null.o •Z  VARSTRtNG(7S) •Z  /• VARSTRINGC303 •1  —tuS14 •1  •10—100 p INT is_nun.o •J  /-• INT nullable•l i S_nu11.O • /  INSERT INTO 'test'. e  "ta=60 is  /• VARSTRIVGC7ft •Z'  VARSTRINGC7 ) —tu7S •/

恢复:

mysqlbinlog--no-defaultstest_tb.flashback|mysql-uroot-p123456

查看:

mysql>selectcount(*) frome;
+----------+
|count(*) |
+----------+
|107|
+----------+


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3026218/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE,MySQL 8.0 OCP,PMP,拥有OceanBase OBCP,TiDB PCTP,GoldenDB GDCP等多项认证,ITPUB认证专家,微信公众号:DBA之友。

注册时间:2022-02-08

  • 博文量
    132
  • 访问量
    171519