我本身仅是一名前端,由于公司特殊情况(没员工),我负责数据库维护,社区维护,社区管理等工作。今天因为后台管理没法查到一个用户的数据,所以我拿着userid去mysql查询。


我看到后端原本写好了一句查询语句,我就把id复制进去,然后选中,鼠标右键“选择运行”,这时候我没有注意到前的delete,当我看到MYSQL-Front提示影响一条数据记录的时候。我知道,我一不小心把他删了。

这时候我立马考虑到binlog恢复数据,然而后端并没有配置。


而我再查了下,在webapp目录下也没有mysql数据备份。

恭喜我,成功的在没备份数据库的情况下删除了一个正常的用户。

那么如何处理呢?首先我们了解下mysql的简化工作流程。

解析语句 -> 找索引表 -> 找数据 -> 更新数据 -> 写入文件

然而对于innodb来说,字段以及数据的操作,在开启日志系统sys_log的情况下,数据库的操作变化会存在在lbdata和ldb文件中。这就简单了,意味着现在开始不要操作数据库!去日志目录下找到最新修改的文件,从中提取过去的数据不就行了?

输入语句

show variables;

查询之后找到datadir


好了,这就是我们数据库日志文件的目录了。

C:\ProgramData\MySQL\MySQL Server 5.7\Data\


好了,在这里有很多的文件,今天是5月21日,也就是ibdata1 和 ib_logfile0 是最后修改的文件。要看到具体数据库的idb文件,需要到对应数据库名字的目录里面去,这里为了方便,我直接选取org/user.idb来做操作。


打开之后是一串很乱的数据,在这里我找不到对应的解析器,但是不碍事,这里我们先找到一个正确的,系统可以找到的用户的id,作为解析这个文件的方法。


这里我用我自己的userid找到了一条数据,直觉告诉我这就是用户数据,用户数据的格式大概就是这样。因为这里有我的昵称,手机,头像和openId

根据拆分出来的数据,我可以简单的解析下这段数据。


提取出比较的数据之后,根据被删掉的用户的userid,查他之前的资料


接着insert语句,插入数据库,验证用户相关数据是否正常读取。

ok,至此数据恢复完毕。

为什么我不用工具,而是手工分析呢?因为我不敢在服务器乱动东西哈哈哈。

更多相关文章

  1. 在Postgres STRING_AGG中对条件数据进行排序
  2. 怎样在办公网络通过跳板机获取生产环境的MySQL数据
  3. 新手求学:用VF如何去添加、删除、修改SQL Server服务器数据库中表
  4. Ms sql 2005 中的bit 数据类型
  5. 从Visual Studio 2012访问Netezza SQL数据库时出错
  6. 烂泥:Wing FTP Server与mysql数据库整合
  7. 如何用SQL语句在一个已有数据库内新建一个表?
  8. 数据库 T-SQL 里的 GO 是什么意思
  9. 数据库sql及索引优化

随机推荐

  1. 两分钟带你了解如何使用“strcpy()”函数
  2. putchar函数可以向终端输出一个字符么
  3. C语言怎么获取数组的长度
  4. C语言中求余运算符是什么?
  5. c语言函数声明格式
  6. c语言中定义结构体的保留字是什么?
  7. visualc++6.0怎么使用
  8. c语言中continue作用是什么?
  9. 手把手教你在C语言中如何打印倒三角形
  10. strncmp函数用法详解