运维时刻面临着悲剧。


昨天,公司同事误删了一个表的数据,而且还是TRUNCATE。


能恢复的数据的唯一方法就是binlog了。


以前知道这个可以恢复数据,只是这次真的要实践的时候还是在网上乱搜了一通。


1:找到binlog目录


2:用mysqlbinlog 命令提取binlog里的时间段,导出为sql文件。

    mysqlbinlog --start-datetime="2016-08-11 17:19:00" --stop-datetime="2016-09-01 20:00:00" /data/mysql/data/mysql-bin.000003 >./restore_db.sql


3:得到了sql文件之后就可以恢复了。上面的--start-datetime  是开始时间,--stop-datetime是结束时间,也可以用 --start-position - --stop-position,更精准。 


4:恢复:操作之前先备份您的数据库。万一发生意外可以及时恢复。

      mysql  -u root -p    登录数据库

      注意!!!!!!用此文件恢复数据库跟平时恢复不一样,binlog里记录的是哪个数据库被修改的记录,所以,用此文件恢复,目标不可以定义。比如说,里面有a,b,c三个数据库,只有a数据出问题。我想单独恢复a是不行的,里面包含了对b,c数据的操作。一样会对b,c数据进行修改。切记。最好的方法是备份一遍,到另外一台机器操作。

      mysql>source    /path/restore_db.sql   (path代表路径)

      执行的时间视文件大小而定。耐心等待。一会数据恢复完成了。