使用bin-log恢复误删数据

  1. 错误执行update或者delete语句,造成整个表变化,传统使用全量备份+binlog增量备份恢复到删除以前的状态,如果数据量比较大的话,会造成恢复过程很复杂。
  2. 如果binlog-formatROW的话,会有一种相对简单的方式来进行

0准备

0.1修改binlog-format为ROW

修改/etc/my.cnf
binlgo-format=ROW

0.2查看数据库中内容

我们模拟没有加where条件,直接删除tb_a中的数据


1.查看binlog相关内容

mysqlbinlog --base64-output=decode-rows -v -v --start-datetime='2016-08-25 15:30:00' mysql-bin.000004| grep -B 50'### DELETE FROM `test_db`.`tb_a`'| more


红色部分可以看到删除时用到的数据,其中@1、@2表示我们测试表中第一个和第二个字段

2.我们关心中间delete的部分,使用如下命令将中间部分保存下来

mysqlbinlog --base64-output=decode-rows -v -v --start-datetime='2016-08-25 15:30:00' mysql-bin.000004|sed -n '/end_log_pos 418/,/COMMIT/p'|tail -n +2> recovery.binlog

3.查看recover.binlog内容

4.从binlog中反向整理出可执行的sql语句

cat recovery.binlog | sed -n '/###/p'| sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/\nREPLACE INTO/g;s/WHERE/SELECT/g'|sed -r 's/(@2.*),/\1;/g'|sed 's/@[1-9].*=//g'>recory.sql

:@2表示最后一个字段


5.执行sql文件

source /data/mysql/recovery.sql

6查看执行结果

感谢贺春旸,思路和代码都来自他的文章,根据自己的实际情况,做了一次测试,非常成功。
再次感谢。

转载于:https://www.cnblogs.com/cnsuifeng/p/5811285.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值