mysql 针对MYSQL delete、update、insert语句误操作(如update忘记加where条件)

目前还没有特别好的办法进行恢复,主要是根据binlog日志文件进行恢复,网上也有

很多的博客说明这些操作步骤,目前总结起来快速方便的办法是:

利用淘宝的彭立勋开发出的一个flashback插件进行恢复,之前的插件版本只针对MySQL-5.5.18,

无法用于目前主流的5.6版本的。后来平民软件将该功能移植到5.6版本上,

让相关人员对数据库有更强的掌控能力。


相关的博客:http://www.cnblogs.com/youge-OneSQL/p/5249736.html

相关的博客:http://blog.csdn.net/wyzxg/article/details/9454375


0. MYSQL可恢复的前提

(1)开启binlog

(2)binlog_format的格式采用 ROW 格式,

          ROW 方式会产生大量的binlog信息,参数binlog_row_image = MINIMAL 时可适当优化。


1. 下载 mysql5.6  flashback插件(二进制版本,无需安装)

下载地址:http://pan.baidu.com/s/1nvGOOIl 

最新更新的日期: 2016/4/8


2. 将二进制插件文件拷贝到  原mysqlbinlog程序的目录中


 下载的插件程序文件重命名 mysqlbinlogFB(保证和mysqlbinlog不重名即可)


下载下来的插件程序文件和之前的mysqlbinlog 工具一样使用,只是参数多了一个 -B参数


3. 模拟一下 delete 没有加 where条件的情况



 4. 找到刚才delete 操作在binlog日志文件中的开始和结束位置点

 这里主要看如何使用mysqlbinlog工具了,例如:产生delete误操作的时间点大概是在“2016-07-06 21:41:00”左右,我们查看binlog日志文件时指定开始时间点为“2016-07-06 21:40:00”并且匹配表名称“t_name”,如果打印出的binlog日志比较多时,可只看前20行和后20行即可。

20行:

[root@myDBserver data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021 |grep -i 't_name' -C20 | head -n 20

20行:

[root@myDBserver data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021 |grep -i 't_name' -C20 | tail-n 20


由于是测试的表数据,binlog信息量比较少,所以直接打印2016-07-06 21:40:00时间点之后的全部binglog信息,最后找出的位置起始结束点信息如下:

[root@myDBserver data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021


 注意到两个 位置点  1377 和  1567,查看binlog中的日志信息确实是刚才误操作的delete 语句。

 在指定--start-position时,需要注意包含table_map_event的位置,否则工具无法找到相关表的元数据信息。


 5. 采用myslqbinlogFB 工具进行恢复

[root@myDBserver data]# mysqlbinlogFB-B-v --start-position=1377 --stop-position=1567   mysql-bin.000021| mysql -uroot -proot123 mytest


采用上面的命令即可 将刚才的delete的 binlog信息反转成insert语句插入到 mytest数据库中的t_name表中。

最后查看 t_name表:



同理,对于update,insert 语句恢复,一样的步骤操作。






Logo

更多推荐