对于MySQL数据库中的误操做删除数据的恢复问题,可使用基于MySQL中binlog作到相似于闪回或者生成反向操做的SQL语句来实现,是MySQL中一个很是实用的功能。
原理不难理解,基于MySQL的row格式的binlog中,记录历史的增删改SQL信息,基于此解析出来对应的SQL语句(回滚的话就是反向的SQL语句)。
在格式为binlog格式为row的日志模式下,binlog中的内容记录了数据库中曾经执行的增删改信息,都是包含了反向信息的
好比执行delete from table where pk_id = 1;按照主键来删除一条记录
对应的binlog中的sql语句为:delete from table where pk_id = 1 and name = 'xxx' and other_column = 'xxx';where条件不单单是原始语句的Id,并且还包括中这一行全部的字段的信息的
update操做也同理,不但记录了update操做,同时记录了update记录在更新以前的每个字段的值。这样就能够利用这个日志来生成反向操做信息。html
以下是利用mysqlbinlog 工具解析出来的一个MySQL中典型的binlog日志文件的部份内容,能够清楚地看到执行过的sql语句的信息。
说到这里,对于MySQL中基于binlog的一些应用,好比复制或者数据库还原,其实就是重复执行某个数据库上的历史执行过的增删改SQL语句来实现的。
题外话:MySQL的binlog做用记录事务语句的做用上,基本上等同于SQLServer的的事务日志。
可是SQL Server的事务日志正的二进制内容的,微软官方也没有提供解析的方法,而MySQL中彻底能够经过mysqlbinlog 来解析出来这个日志中的内容。python
以下是经过MySQL自带的mysqlbinlog工具解析出来的binlog日志文件中的信息,能够看到其中的SQL语句信息。mysql
知道了binlog中的内容,就能够基于这个binlog来实现各类实用的功能,典型的就是误删数据的还原操做,好比苏家小萝卜同窗就本身用Python搞定这个解析功能
相似功能比较知名的还有大众点评网DBA本身写的binlog2sql工具,也是久闻大名,终于有机会尝试了。
binlog2sql须要语句pip安装,因此须要先安装pip
pip 安装参考:http://www.javashuo.com/article/p-gllszdeg-em.htmlgit
binlog2sql下载以及安装:https://github.com/danfengcao/binlog2sqlgithub
完成了binlog2sql以后,就可使用它来实现数据的还原操做了,以下模拟一个误操做的恢复sql
在开启了binlog,日志格式为row的测试数据下,对于测试表test_01,分别执行如下sql语句:数据库
insert into test_01 values (1,'aaa'); insert into test_01 values (2,'bbb'); insert into test_01 values (3,'vvv'); --如下误操做,更新了所有数据 update test_01 set name = 'xxx';
经过show master logs;找到当前的binlog文件,对应的sql语句的执行就存储在当前这个binlog中,binlog2sql的目标就是这个文件工具
参考下图,能够发现
执行:python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' -ddb01 -t test_01 --start-file='binlog.000021' (更多参数以及使用方式参考下文连接),经过binlog2sql来解析当前的binlog文件,
解析出来的SQL语句就是正常SQL语句的执行(insert insert insert update(3行记录))
执行:python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' -ddb01 -t test_01 --start-file='binlog.000021' -B,经过-B参数生成反向的操做信息
加参数-B解析出来的SQL语句与上面的SQL语句恰好相反,包括顺序,也即以倒序的方式生成反向的操做
原始操做是insert insert insert update update update,反向的操做就是upfate update update delete delete delete,
这样一来,能够根据具体的状况,截取生成的反向的sql语句,进行误操做的还原。测试
以上操做注意安装的binlog2sql的路径问题,若是路径不对,找不到binlog2sql.py,上述命令也就没法执行3d
更多binlog2sql参数以及用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql
来源:MSSQL123
连接:http://www.cnblogs.com/wy123/p/8529787.html
更多精彩干货可关注公众号二维码,回复“干货”便可领取