【MySQL5.7】binlog恢复delete的数据

xixuefeng MySQL, MySQL-DEV 2019-06-03 18:23:51 1,090 次浏览 【MySQL5.7】binlog恢复delete的数据已关闭评论

一:MySQL binlog相关参数情况(1、开启了日志;2、日志模式为row)

注:binlog_format 这个参数共有三个值(三种模式)(row,statement,Mixed)

1)row:清楚的记录下每一行数据修改的细节,非常容易理解,当然,带来的问题是,产生了大量的日志

2)statement:不是记录每一行的修改,它记录的是执行语句,好处是节省了IO及存储资源,但是也很容易出现bug,如自增ID不一致问题、函数不存在的问题等等

3)Mixed:混合模式,表结构变更的时候就会以statement模式来记录,如果sql语句是DML语句,那么还是以row模式来记录。

二:遇到需要恢复数据的场景

一张小表,不到100条记录,应用在处理逻辑时,触发了删除操作,导致该表中数据丢失。

三:恢复过程

1)应用开发人员还是比较给力,第一时间通过分析应用日志,确定了删除数据的时间范围

2)通过时间范围,确定了具体的日志文件

3)通过mysqlbinlog挖掘日志中删除数据的详细语句

通过这个命令可以将日志的内容打印在窗口。注:当然,也可以将结果重定向(>>)至文件中。

4)因为数据量较小,手工处理一下数据,将删除的数据写回数据库。

四:小结

1)MySQL数据库开启日志,且日志模式binlog_format为row或者mixed,那么可以通过MySQL提供的工具mysqlbinlog恢复删除或修改的数据。

2)grep DELETE -A 10

这句话也可以写成grep DELETE -A10或者grep -A 10 DELETE  或者grep -A10 DELETE,意思为过滤出包含DELETE的记录,-A的意思是after,-A10的意思是,DELETE之后的10行也一并打印出来。

还有一个参数是-B,-B的意思是before,也就是之前的意思,用法同-A

回顶部