mysql表数据误删恢复操作

Author Avatar
yyq 2020-08-17 15:26:34
  • 二维码

mysql表数据误删恢复操作

            作为一名程序员,在mysql操作过程中难免会遇到手滑的时候,误删了数据库中的数据,如果数据库开启了binlog,那可能还是有方法恢复的,如果木有开启,请自求多福。

        

            NO1:查看binlog是否开启,执行命令:show variables like 'log_%'; 查看项 : log_bin | on 是否是on


            NO2:本篇数据可恢复的前提是你在误操作之前的某个时间点对数据有做过备份处理,或者是一张新建表,在经过一系列处理后被你清除


            NO3:此处以新建表为例演示开始:新建一张表名为yyqtest的数据表,字段有id,name,create_time,update_time


            NO4:新增数据:

                INSERT INTO yyqtest(`name`,`age`,`create_time`,`update_time`) VALUES('wangshibo',27,1557887367,1557887367),('guohuihui',27,1557887367,1557887367);


            NO5:更新数据:

                UPDATE yyqtest SET age=28 WHERE `name`='wangshibo';


            NO6:再次插入数据:

                INSERT INTO yyqtest(`name`,`age`,`create_time`,`update_time`) VALUES('ww',26,1557887367,1557887367),('hh',26,1557887367,1557887367);


            NO7:最后清理表数据:

                TRUNCATE TABLE yyqtest;


            NO8:以上即模拟了数据表的一番操作后误删的处理,如果开启了binlog,此时这些操作数据都已经被记录在了日志文件。此时,为了方便查找日志内误删数据部分,可以在mysql下执行命令flush logs; 意思是重新生成一个日志文件记录之后的数据库操作;


            NO9:在mysql安装目录下找到以'xxx.0000x'格式的日志文件,xxx看个人数据库配置log-bin=binlog,我的是binlog.000001,此处可以将其做个备份文件(我是直接复制到了 D:\binbak\binlog.000001),以防又有啥误操作,影响数据恢复。文件直接打开的话是二进制文件,需要使用mysql工具,在bin目录下的mysqlbinlog,但是我们一般是在mysql命令行操作如下命令查看:SHOW BINLOG EVENTS IN 'binlog.000001';可以看到类似如下数据:

            1597648167(1).jpg


            NO10:根据NO9表数据找到重要的点如下,Pos点 586开始插入数据,End_log_pos1798清理表,所有我们只需要获取到从586开始的操作到1798之前的操作即可,此处需要通过cmd命令行执行语句如下:

            mysqlbinlog --no-defaults --start-position=586 --stop-position=1789 D:\binbak\binlog.000001 > D:\binbak\yyqtest.sql

            此时会在D:\binbak\下生成文件yyqtest.sql恢复文件,此处需要编辑下,打开文件注释掉里面的truncate table yyqtest语句


            NO11:最后登录mysql,执行数据恢复语句:source D:/binbak/yyqtest.sql;然后你会发现数据已经被完全恢复,当然这只是个简单的恢复操作,正式线上数据远要比这复杂,但是定时做数据备份这个是没有问题的

上一篇 返回列表 下一篇

发表评论

Tips:评论内容请文明用语