对付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记录在更新之前的每一个字段的值。这样就可以操作这个日志来生成反向操纵信息。
如下是操作mysqlbinlog 东西理会出来的一个MySQL中典范的binlog日志文件的部门内容,可以清楚地看到执行过的sql语句的信息。
说到这里,对付MySQL中基于binlog的一些应用,好比复制可能数据库还原,其实就是反复执行某个数据库上的汗青执行过的增删改SQL语句来实现的。
题外话:MySQL的binlog浸染记录事务语句的浸染上,根基上等同于SQLServer的的事务日志。
可是SQL Server的事务日志正的二进制内容的,微软官方也没有提供理会的要领,劳务派遣管理系统,而MySQL中完全可以通过mysqlbinlog 来理会出来这个日志中的内容。
如下是通过MySQL自带的mysqlbinlog东西理会出来的binlog日志文件中的信息,可以看到个中的SQL语句信息。
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308164842483-540762978.png" width="832" height="514" />
知道了binlog中的内容,就可以基于这个binlog来实现各类实用的成果,劳务派遣管理系统,典范的就是误删数据的还原操纵,昆山软件开发,好比苏家小萝卜同学就本身用Python搞定这个理会成果
雷同成果较量知名的尚有公共点评网DBA本身写的binlog2sql东西,也是久闻台甫,终于有时机实验了。
binlog2sql需要语句pip安装,所以需要先安装pip
pip 安装参考:https://www.cnblogs.com/technologylife/p/5870576.html
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308221003938-2070733874.png" width="644" height="204" />
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308170242735-798945893.png" />
binlog2sql下载以及安装:https://github.com/danfengcao/binlog2sql
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308170254752-532166014.png" />
完成了binlog2sql之后,就可以利用它来实现数据的还原操纵了,如下模仿一个误操纵的规复
在开启了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的方针就是这个文件
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308173926921-368981531.png" />
参考下图,可以发明
执行:python binlog2sql.py -p27.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 -p27.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,上述呼吁也就无法执行
苏州软件定制开拓 用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql " src="http://www.importnew.com/https:/images2018.cnblogs.com/blog/380271/201803/380271-20180308170306707-758038631.png" />
更多binlog2sql参数以及用法和限制参考官方GitHub:https://github.com/danfengcao/binlog2sql