概述

  代码bug,在处理上传出现异常时执行了DELETE FROM t_resource WHERE resource_id = ? OR parent_id = ?因为OR条件导致用户的上传的所有数据被清空了。

show

  查看是否有开启log-bin备份

show variables like 'log_bin'

欣慰的是,已经开启了二进制日志备份。那接下来就简单多了,找到这个二进制日志,找到这个节点,去恢复它。执行这个命令,查看正在写入的二进制日志是哪个文件

show master status

当然也可以flush重新开始一个文件写入。用这个文件名在Linux全局搜下这个文件在哪==> find / -name mysql,找到这么久好办了。

mysqlbinlog

mysqlbinlog -vv --start-datetime='2019-9-24 11:24:00' --stop-datetime='2019-9-24 11:25:20' mysql-bin.000211| grep "t_resource" | more

查看里面执行删除操作的pos位置

然后去查看从哪里开始执行了删除

show binlog events in 'mysql-bin.000211'

知道了开始和结束的节点,恢复数据就很快了,因为logbin是二进制日志,我们把它弄成我们看得懂的

mysqlbinlog -vv --start-position=956859551 --stop-position=956863056 mysql-bin.000211 |grep ^"###" >bin_1448

就生成了一个bin_1448文件。我们打开看下

这个就是执行delete删除的东西

INSERT

接下去就是把它反过去变成insert语句就OK了

cat bin_1448 | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@6.*),/\1;/g' | sed 's/@[1-9]=//g' | sed 's/@[1-9][0-9]=//g' >resource.sql

打开,resource.sql 就是我们很多眼熟的sql语句了。。调整执行就很简单了

总结

  以上只能对delete的误操作有效,而且binlog是行模式,如果是truncate的语句造成,那只能祈祷有备份文件了。

参考

https://yq.aliyun.com/articles/664444

最新文章

  1. NFC OMA 访问
  2. python学习心得第五章
  3. 各个版本spring的jar包以及源码下载地址
  4. HttpModule的认识与深入理解及MVC运行机制
  5. xcode -饼状进度条
  6. PAT (Advanced Level) 1071. Speech Patterns (25)
  7. List的输出方法
  8. 九种迹象表明你该用Linux了
  9. 8.Vue基础
  10. Python内置函数(31)——id
  11. w7 全网架构-rsync-备份
  12. laravel中常用的获取路径的函数
  13. 1. easyui tree 初始化的两种方式
  14. vdscode连接git服务器(以码云为例)
  15. 使用Dom4j创建xml文档
  16. HTML5 Canvas ( 图形变换矩阵 ) transform, setTransform
  17. vue开发 ES5——> ES6设置
  18. easyui的filebox过滤文件
  19. MVC中FileResult 返回类型返回Excel
  20. mac上golang编译出现clang错误

热门文章

  1. java--正则校验
  2. 再谈EFAGE寄存器中的C位,P位,O位
  3. 第七篇Scrum冲刺博客
  4. java基础类型的byte为长度
  5. linux 本地套接字通信
  6. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
  7. 201871010105-曹玉中《面向对象程序设计(java)》第十四周学习总结
  8. vue项目实基础到实战,入门到精通,移动商城
  9. 接口测试Post和Get区别(面试题)
  10. LeetCode 110. Balanced Binary Tree平衡二叉树 (C++)