MyFlash快速恢复数据

说明:

    6月11号下午,研发不小心执行update语句,将一个表数据全部更新,表有15万条数据,需尽快恢复数据。

恢复过程:

   1,使用腾讯云的极速恢复到时间点

   2,使用binlog2sql工具

 使用1,数据库是早上0点备份,要回放0点到现在的全部sql,执行会比较慢

 使用2,binlog2sql,生成15万条update回滚语句,执行一直很慢

数据量小用binlog2sql,很快,一旦10万以上,就太慢,有没有其他更快的恢复数据方法,在网上了一下,MyFlash恢复大量数据比较快,

其恢复数据原理好binlog2sql,有区别,能快速恢复数据。

MyFlash使用:

  1,安装MyFlash

  2,根据时间查出执行 SQL的gtid或者是start-pos和end-pos

测试:update student_ocean set update_time=now(),更新全表数据,共176654条

mysqlbinlog --read-from-remote-server  --base64-output=DECODE-ROW -vvv  --host=10.0.0.1 --port=3306 --user=xxx --password=xxx  --start-datetime="2021-06-17 10:12:09" --stop-datetime="2021-06-17 10:26:16"  mysql-bin.000648 |grep student_ocean -A 120 -B 10 >/data/61.txt

 到对应gtid,start-pos和end-pos,这里-A 120,就是要把后面的信息打印出来,如end-pos的信息

通过 head  -n 20  /data/61.txt 和  tail -n 160 /data/61.txt  ,找到对应的start-pos和end-pos

mysqlbinlog --read-from-remote-server  --base64-output=DECODE-ROW -vvv  --host=10.0.0.1  --port=3306 --user=xxx --password=xxx --start-position=233673651 --stop-position=275603033  mysql-bin.014292  >/data1/binlog/621.txt

这样621.txt,就是完整的更新信息

grep 'student_ocean' 60.txt |wc -l    ,计数student_ocean个数:176656,多2个表名:因为,binlog包含下面信息,看信息是完整的:

# update student_ocean set update_time=now()
# at 233673808
#210625 15:26:36 server id 219103 end_log_pos 233673919 CRC32 0x269a4e74 Table_map: `db_support_test`.`student_ocean` mapped to number 99901648

确认后,执行:

./flashback --databaseNames=db_support_test --tableNames=student_ocean --start-position=233673651 --stop-position=275603033 --sqlTypes='update' --binlogFileNames=/data1/binlog/mysql-bin.014292

应用到数据:

mysqlbinlog  --skip-gtids binlog_output_base.flashback|mysql -uxxx -pxxx -h10.0.0.1

  这里的xxx用户,需要super权限,因腾讯云上没有开super权限,可以将表同步到自建库里,再自建库里运行改命令

 

上一篇:Codeforces Contest 1079 problem C Playing Piano——枚举


下一篇:1079 延迟的回文数 (20 分)