您好,欢迎访问迅维职业技能培训中心

18823306610

全国咨询热线

MySQL误操作数据恢复的简单实践

更新时间:2017-02-15 13:36:21

  前几天有个同事碰到了一个MySQL数据恢复的问题,他运行了一条update语句,结果忘记了加where条件,结果等反应过来已经晚了。我简单确认了下,是否存在备份,没有,是否开启了日志,没有。所以这个恢复无从谈起。
  当然后来他也花了些功夫逐条数据修复,事情过去了,数据恢复的重要性,人为操作的重要性就不言而喻了,但是有些时间工作职责还是需要下移。我觉得还是需要好好总结下数据恢复的问题,我会从以下几个方面来谈:
 
  ⊙手工恢复数据的简单示例
  ⊙使用开源工具恢复数据的配置
  ⊙使用开源工具恢复数据的实践
  ⊙小结
 
  首先手工恢复数据,其实有一些思路,一种就是通过全备+binlog的时间、偏移量来恢复。另外一类是通过解析binlog来恢复,前提条件是日志格式为row。我们来简单模拟解析binlog的恢复方式。
 
  手工恢复数据的简单示例
  先看一看binlog的情况,可以看到当前的binlog是序号为15的日志文件。
  为了方便模拟,我们可以切换一下日志,flush logs之后得到的日志情况如下:
  创建表test
  插入几条数据
  查看一下数据的基本情况:
  为了测试方便,先标记一个时间戳
  我们开始模拟DML的操作。
  做完上面三个DML操作之后,我们标记一下时间。
  下面我们来解读一下binlog,根据时间戳得到一个基本可读的日志,里面还有这些数据变更,但是语句和执行的还是有一些出入,我们直接拷贝一份binlog到/tmp目录下解析。
  生成的文件result.sql内容如下,可以看到这些操作在binlog中都有了很详细的标记,数据的情况基本都是一目了然,update的部分变化前变化后的数据都一览无余。其实DML中难度较大的就是update,而insert,delete就是一个加减法。
  delete操作对应binlog日志中的SQL
  update操作对应binlog日志中的SQL
  insert操作对应binlog日志中的SQL
  值得一提的是-v(–verbose)选项会将行事件重构成被注释掉的伪SQL语句,如果想看到更详细的信息可以使用-vv选项,这样可以包含一些数据类型和元信息的注释内容。
  比如:
  -vv的结果:
  回到数据恢复的问题,如果需要手工恢复就需要做几件事情,一个就是根据字段标示拼接出可运行的SQL语句,然后按照逆向的顺序执行即可。
 
  使用开源工具恢复数据的配置
  从上面的步骤可以看到,如果手工修复其实还是可以实现的,不过手工的操作不少,这个时候能够简化你的工作就是好工具,我试用了下binglog2sql这个开源工具,也是大众点评的DBA团队推出的,总体还不错。
  这个工具是Python开发,当然有一些依赖的库和环境需要配置。如果你的服务器是联网环境,那就省事多了。
  两个步骤即可完成。
  而如果不是,那么就有一些额外的工作需要你去做。比如我这个环境连pip都没有。可以先在其他服务器上下载到对应的脚本,部署即可。
  有些环境在pip部署的时候可能有下面的错误。
  看来还和一个setuptools的库有关,我们继续安装。
  然后使用 python ez_setup.py install 即可编译成功setuptools
  再次尝试python setup.py install即可完成pip的安装。
  对于插件PyMySQL可以使用如下的方式来安装:
  对于插件mysql replication可以使用如下的方式:
  就这样前期的工作就做好了。
 
 
  使用开源工具恢复数据的实践
  完成了环境的配置,工具使用起来和mysqlbinlog还是有一些相似之处,好的地方就是多了一些辅助功能。
  我们创建一个用户admin来解析。
  比如我们使用如下的命令来解析binlog得到指定时间戳范围内的SQL情况,在此我们限定数据为test
  得到的文件内容如下:
  其实看起来还是很省事了。
  如果希望得到闪回的语句,有一个flashback的选项,其实就是在原来的基础上进行了解析和顺序调整。
  得到的内容如下:
  运行了如上的语句之后,再次查看数据,数据就恢复了正常。

  小结:
  对于DML的闪回其实还是有一些技巧可以参考,对于DDL的闪回相对来说就麻烦的多了。

  手机数据恢复系列专题帖

 
  硬盘开盘数据恢复系列专题帖
学到熟练维修 需要多少钱?
当前水平
零基础
会拆装
会修小问题
计划学习时间
1~2个月全天上课
利用闲暇时间学习

 联系方式

培训咨询点击这里给我发消息

技术交流群迅维网官方群7

加微信,和老师沟通一下技术问题!

加微信,和老师沟通一下技术问题!

打开微信,点击右上角的“+”,

选择“扫一扫”功能,

用摄像头对准下方二维码即可。


客服老师

恭喜你,获得维修课程一节

添加老师微信,帮你一对一安排试听课

了解试听需求

安排试听时间

微信号:18823306610

复制微信号添加