对于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语句信息(参数--base64-output=decode-rows -v)。

知道了binlog中的内容,就可以基于这个binlog来实现各种实用的功能,典型的就是误删数据的还原操作,比如苏家小萝卜同学就自己用Python搞定这个解析功能

类似功能比较知名的还有大众点评网DBA自己写的binlog2sql工具,也是久闻大名,终于有机会尝试了。

binlog2sql需要语句pip安装,所以需要先安装pip

pip 安装参考:https://www.cnblogs.com/technologylife/p/5870576.html

完成了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的目标就是这个文件

参考下图,可以发现

执行: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,上述命令也就无法执行

mysql binlog恢复sql_binlog2sql实现MySQL误操作的恢复相关推荐

  1. mysql权限的误操作的恢复

    mysql权限的误操作的恢复 原因:由于误操作,我把repl用户授予了所有权限,但删除了数据库中的其他用户及权限,因此repl用户虽然具有操作所有数据库的权限,但没有grant权限,所以若想授予其他用 ...

  2. SQLServer数据库误操作如何恢复

    总目录 文章目录 总目录 前言 一.恢复数据实例 1.创建初始数据 2.保证数据恢复的前提条件 前提1 - 数据库创建时便已设置恢复模式为完整 前提2 - 至少做过一次完整的备份 3.模拟不小心误操作 ...

  3. 分析一次磁盘分区表的误操作和恢复

    前两天帮谢姨装Ubuntu到一个分区上做Win7和Ubuntu双系统,当时大脑发热就直接在Win7下把Ubuntu所在的分区格式化了.然后便是各种凶残的的误操作和恢复,折腾了一夜.现在把过程写下来,对 ...

  4. GHOST 误操作的恢复方法

    GHOST 误操作的恢复方法 来自网络,重新整理并排版. 相信不少朋友有过使用GHOST误操作的经历,就象下面这样: 恢复系统的时候不慎选择了 LOCAL-DISK-FROM-IMAGE 直接选择恢复 ...

  5. mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据

    传统解法 用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态.然后跳过误操作的SQL,再继续应用binlog.此法费时费力,不值得再推荐. 利用binlog2sql快速闪回 首先, ...

  6. mysql+误操作怎么恢复_Mysql误操作恢复流程

    一.开启binlog. show variables like 'log_bin'; #vim  /etc/my.cnf 在[mysqld]中加入 log-bin                 =  ...

  7. mysql binlog 备份_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...

    原文:https://www.toutiao.com/i6855460778359816715/ 平台:头条 作者:程序员不就是0和1 一. 备份恢复策略 进行备份或恢复操作时需要考虑一些因素: 1. ...

  8. 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  9. mysql binlog跟踪_在MySQL中使用init-connect与binlog来实现用户操作追踪记录

    在MySQL中使用init-connect与binlog来实现用户操作追踪记录 分类: MySQL 前言: 测试环境莫名其妙有几条重要数据被删除了,由于在binlog里面只看到是公用账号删除的,无法查 ...

最新文章

  1. 路由与交换大作业pkt_干货 | 交换机“练功大法”——略有小成(一)
  2. 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
  3. c+和python先学哪个比较好-【编程先学什么好,c还是python】python教程c
  4. JZOJ 5404. 【NOIP2017提高A组模拟10.10】Graph
  5. 不忘每份支持,网易云信感谢一路有你
  6. 得到app文稿导出_再见了扫描仪!微信打开这个功能,一键将纸质文稿扫描成电子档...
  7. Aspose.Java实现word转pdf,添加水印等操作
  8. mongoose只更新数组中某一项的字段
  9. matlab——图像细化
  10. php html5 api,HTML5 File API解读
  11. SQL Server存储过程初学者
  12. 支付宝推生物识别;Google 爆重大隐私问题;TensorFlow 2.0 即将发布 | 极客头条
  13. Bailian2766 最大子矩阵【最大子段和+DP】
  14. 计算机无法安装网卡驱动,实在无法安装电脑驱动的解决办法
  15. rank函数在c语言怎么用,如何利用RANK函数排名?RANK函数怎么使用?
  16. 使用第三方类库对html进行解析
  17. JAVA访问控制权限
  18. 本地IIS启动后网页HTTP 错误 404.3 - Not Found解决方案
  19. ijkplayer源码---倍速
  20. JAVA网络编程、正则表达式

热门文章

  1. myeclipse调试java
  2. 如何提高ORACLE数据库的查询统计速度
  3. python语言代码片段-有用的Python代码片段
  4. 如何二值图转化为灰度图_木工真空吸附雕刻机如何用精雕5.21把精雕图模型转为灰度图...
  5. 一致性hash算法_分布式寻址算法
  6. 小学校园里计算机文字,中小学计算机教学论文(共2228字).doc
  7. 小波包分解 matlab_多尺度一维小波分解
  8. 计算机导论第一章试题及答案,计算机导论第一章测试题
  9. 服务器开机修改grub,修改 grub
  10. revit建筑样板_Revit出建筑施工图步骤及注意事项