记一次MySQL数据误删-恢复体验

数据误删了怎么办?本文也许能给您一定的提示。

一、查看日志

数据无意中发现不见了,怎么办?

也许首先想到的是去查日志,找到问题原因,但是这个时间有可能会比较长,并且线上的业务在这段时间会收到影响。

因此,先不要去管什么原因,首先应该做的第一件事情应当是数据恢复,保证正常的业务不受影响,而后再回过来查找原因即可。

那么,想要恢复数据,首先想到的也是日志:有无所有SQL操作的记录日志,有无开启binlog同步日志。这样才能根据SQL记录重新恢复数据,否则,数据将无法找回。

其次,我们需要查以下MySQL服务器开启了哪些日志,于是首先查看MySQL的配置文件 /etc/my.cnf ,发现开启了errorlog、slowlog和binlog,这时就可以松一口气了,因为只要有binlog,所有数据都将找得回来,slowlog对我们当前的问题来说并没有什么用,errorlog后面我们拿来查找问题原因也许会有用。

此外,我们通过 show variables 命令查看当前MySQL变量发现,其实MySQL还有另外一类日志,叫做generallog

当前服务器没有开启该日志,该日志用以记录所有执行的SQL语句,它和binlog的区别在于:

1、generallog仅仅是记录的日志文本文件,而binlog原本是拿来进行服务器之间的数据同步用的,是一个二进制文件;

2、binlog记录了比generallog更全面的SQL执行记录,而generallog提供的文本日志可读性更强;

 

二、恢复数据

找到了binlog,那么我们需要从binlog中恢复数据。

1、查看当前有哪些binlog文件

发现有3个binlog文件,我们再来查看当前正在使用的binlog文件是哪个:

发现是 mysql-bin.000007文件。了解的信息差不多了,我们进入到MySQL的数据存放目录 /data/mysql/,先将这几个binlog文件备份起来,以便防止数据丢失,并且后面也许还需要再从这几个文件查找数据丢失原因。

由于对于我们当前的业务来说,被删除的数据仅仅是2017-08-01到2017-08-25之间的重要数据,因此,我们仅需要恢复这段时间的数据即可,从mysql-bin.000007这个文件导出这个时间段的sql:

执行完成之后使用mysql命令进入mysql控制台,use 需要恢复数据的数据库,执行source命令即可:

 

 

参考链接:

http://blog.csdn.net/ouyang111222/article/details/50300851

http://www.cnblogs.com/taui/p/6265809.html

http://www.cnblogs.com/cobbliu/p/4311926.html

 

 

 

 

 

 

 

 

 

 

 

Leave a Reply

Your email address will not be published.