首页 > 代码库 > 使用bin-log恢复误删数据
使用bin-log恢复误删数据
错误执行update或者delete语句,造成整个表变化,传统使用全量备份+binlog增量备份恢复到删除以前的状态,如果数据量比较大的话,会造成恢复过程很复杂。
如果binlog-format是ROW的话,会有一种相对简单的方式来进行
0准备
0.1修改binlog-format为ROW
修改/etc/my.cnfbinlgo-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查看执行结果
感谢贺春旸,思路和代码都来自他的文章,根据自己的实际情况,做了一次测试,非常成功。
再次感谢。
使用bin-log恢复误删数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。