mysql误删除数据恢复_mysql误删除数据恢复

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:42   1378   0

某天,我正在快乐的敲着代码

突然旁边的马大哈同事一声惨叫,好事的我,连忙把头伸过去问问怎么了,马大哈说,他不小心在表上点了清空表

这个时候,要镇静,假装不慌,,,

但是没有两分钟,对面的同事说,怎么访问不了了……

好吧,这里直接说方案

由于navicat的清空表,实际上就是执行的是delete,更狠的截断表先不说,那个更难恢复

首先查看一下mysql自带的bin日志

登陆你的mysql执行下面这个命令

先看看最新的日志文件名字

show master status;

cc473daccb36b56bc2a2dc625cf0f2b8.png

在看看日志位置

show variables like \'log_bin_basename%\';

56fd868f6e1ff31357170156c4eec7ab.png

如果你也是centos系统安装的,而且默认,那么直接cd到这个路径即可

然后尝试回忆一下你删除的时间

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″ //恢复结束时间

cd /var/lib/mysql/

mysqlbinlog -d=要恢复的数据库名字 --no-defaults --start-datetime=\'2020-03-16 12:56:00\' --stop-datetime=\'2020-03-16 14:57:00\' -vv mysql-bin.000001 > result.txt

打开这个result.txt你应该可以看到删除的记录

现在使用sed过滤一下目标库表

cat result.txt | sed -n \'/### DELETE FROM `数据库`.`表名`/,/COMMIT/p\' > delete.txt

然后你得到的delete.txt应该是这样

b8915a4ad8ac224bb729fe7d34fce8c2.png

如果是,那么请继续

将delete.txt替换成insert语句即可

cat delete.txt | 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\' | sed \'0~5s/,/;/\' > insert.sql

如果执行成功应该是这样

681b3a2d3a329ca63666572aa7afee3c.png

到这里基本结束了

登陆mysql导入这个脚本

\. insert.sql

数据又都回来了

nice

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。导航:艺宵博客 mysql误删除数据恢复

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP