在window下恢复Mysql DELETE误删的数据

误删数据库是一种怎样的体验

Delete一时爽,恢复泪千行…

都说程序员删库跑路,我是删库差点给自己断后路…

2020-05-22 17:59:00,本想关电脑,手工一天工资到手,谁知脑子短路执行了一个旧的接口,对两张表delete from table_xxx.瞬间焕然大悟,可惜后悔莫及,花了整整1hour忍受饥饿恢复了1年来用户积累的数据,还好mysql够给力,一切还算顺利。

话不多说,上解药了

环境

windows、Mysql
执行语句:delete from xxx(注意不是drop xxx,drop的话不知道能不能恢复得回来)

Step1

查看binlog功能是否开启(默认应该是开启的,我安装mysql时是没有专门配置这个),如果为log_bin为ON说明可以恢复,如果为OFF说明没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚了,GAMEOVER,下面的不用看了(好像可以通过ibd恢复,具体可以参考 https://blog.csdn.net/hanjun0612/article/details/102466509 )。
在这里插入图片描述

Step2

查看数据文件存放的路径
show variables like ‘%datadir%’;
在这里插入图片描述
在datadir目录下找到xxxl-bin.****这样的文件,注意这个文件的时间和你执行删除语句的时间,找到对应的那个文件(我当初这个文件的时间是2020-05-22 18:01:00,刚好能对上),我把它拷贝到E盘根目录
在这里插入图片描述

Step3

查看Mysql的安装目录:show variables like “%basedir%”;
在这里插入图片描述
在Mysql安装目录新的bin里找到mysqlbinlog.exe,
执行命令找到删除的数据
mysqlbinlog --base64-output=decode-rows -v --database=DBName_xxx --start-datetime=“2020-05-22 17:58:00” --stop-datetime=“2020-05-22 18:02:00” E:\WIN-O92TML2S3D2-bin.000002 > mysqllog.sql
在这里插入图片描述
参数说明:
mysqlbinlog 命令的参数说明
–base64-output=decode-rows //数据转换正常的字符,如果不设置这个参数将显示base64的数据
–database=DBName //数据库名(一个mysql数据库比较多,指定方便恢复)
–start-datetime=“2019-11-26 18:00:00” //恢复起始时间
–stop-datetime=“2019-11-26 18:10:00” //恢复结束时间
D:\MySQL\Data\mysql-bin_copy.000028 //为数据恢复的日志文件
mysqllog.sql //恢复以后我们需要的文件名

Step4

打开mysqllog.sql文件,搜索 DELETE 关键字,找到被删除数据
在这里插入图片描述
但是这些数据真是一团糟,这个文件又大,直接打开都要卡死更别说替换和删除一些内容了,于是我写了脚本按行读取里面的内容顺便替换为对应的insert语句
在这里插入图片描述
最后,执行这些insert语句,恢复,完美,肚子真饿了,不过经历这件事真学到了点知识。

总结:
1、不要随便用DELETE,删除前一定要先备份
2、数据库做好定时备份,如果数据库不大,可以一小时备份一次,再大也可以每天备份一次,这样真恢复不了实时数据时,最多也是损失这个时间差内的数据
3、一定要Mysql开启binlog功能,不然白搭。
4、做事一定要细心

引用

https://www.cnblogs.com/hanjun0612/p/11941434.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值