电子数据取证之MySQL数据库删除数据的恢复指南
mhr18 2024-10-18 06:52 32 浏览 0 评论
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL数据库使用的比较多。
公检法部门在处理涉黄、诈骗的案件时,常常会遇到对涉案网站、论坛的服务器进行取证,有时嫌疑人为了毁灭罪证,故意删除数据,这就涉及到对MySQL数据库进行数据恢复、固定和取证。效率源科技的技术大咖针对一线办案人员遇到的痛点,写了这篇MySQL数据库删除数据的恢复指南,希望对办案人员有所启发。
binlog日志简介:
binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。
binlog日志包括两类文件:
1)二进制日志索引文件(文件名后缀为.index):用于记录所有的二进制文件;2)二进制日志文件(文件名后缀为.00000*):记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,可以尝试用binlog日志功能进行数据恢复操作。正是由于binlog日志以上的特性,在实际的案件取证中也可以通过binlog日志来恢复删除数据。要通过binlog日志恢复mysql数据库删除数据的前提:binlog日志确定是开启的。
查看binlog日志是否开启,有以下三种方法
方法一:打开MySQL数据库的配置文件(windows系统中的配置文件为my.ini,一般在安装目录的根目录下;Linux系统中配置文件为my.cnf,一般在/usr/local/mysql/etc/目录下),在配置文件中查看log-bin=MySQL-bin有没有被注释掉(每行第一个字符为#号表示该行被注释),若没被注释表示开启,若被注释表示没有开启。
方法二:在MySQL命令行下使用show variables like ‘log_bin’;命令查看binlog日志是否开启,Value的值为ON表示开启,为OFF表示关闭。
方法三:在存放数据库的文件夹中是否存在mysql-bin.000001类似的文件,有则表示binlog日志功能是开启的。
在数据恢复过程中会用到的binlog日志操作命令
1、查看所有binlog日志列表:
在mysql命令界面输入命令: mysql> show master logs
2、查看master状态,即最后(最新)一个binlog日志的编号名称及其最后一个操作事件pos结束点(Position)值:
在mysql命令界面输入命令: mysql> show master status
3、刷新log日志,自此刻开始产生一个新编号的binlog日志文件:
在mysql命令界面输入命令:mysql> flush logs
注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志
4、重置(清空)所有binlog日志:
在mysql命令界面输入命令:mysql> reset master
如何读取binlog日志中的内容?
1、使用mysqlbinlog自带查看命令法:
注: binlog是二进制文件,普通文件查看器cat more vi等都无法打开,必须使用自带的 mysqlbinlog 命令查看binlog日志与数据库文件在同目录中。
Mysql安装路径下的bin文件夹下输入以下命令:
C:\xampp\mysql\bin>mysqlbinlog C:\xampp\mysql\data\mysql-bin.000009
2、上面这种办法读取出binlog日志的全文内容较多,不容易分辨查看pos点信息,这里介绍一种更为方便的查询命令在MySQL的命令界面:
在mysql命令界面输入:mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
选项解析↓
IN 'log_name':指定要查询的binlog文件名(不指定就是第一个binlog文件)FROM pos:指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)LIMIT [offset,]:偏移量(不指定就是0)row_count:查询总条数(不指定就是所有行)
删除数据案例及操作步骤:
下面我们通过一个实例操作来完整查看「如何通过binlog日志恢复MySQL数据库删除数据。
案例介绍:
现有MySQL数据库,其中有名为test的数据库,其中没有任何的表,怀疑数据被删除,在该电脑中还发现了该数据库的备份,备份最后被修改的时间为2018-11-21 15:27:12。
目的:
查看是否有删除的操作,如有删除尝试恢复出删除的表的内容。
思路分析:
1、判断数据库是否开启了binlog日志的功能;
2、通过binlog日志查询是否有删除的操作;
3、若删除了数据,通过binlog日志恢复数据库中的内容。
下图就是通过binlog日志实现增量恢复数据库删除数据的流程:
01.判断数据库是否开启了binlog日志:
在MySQL命令行下使用show variables like‘log_bin’;命令中log_bin的Value为ON,该数据库的binlog日志是开启的。
02.判断数据库是否有被删除的操作:
1)在mysql命令界面通过show master logs;命令查看binlog日志列表,发现一共有8条日志。
2)在mysql命令界面通过命令show binlog events in 'mysql-bin.000008';可以查看最后两条命令为“use ‘test‘;delete from t1,use `test`;DROP TABLE `t1`”由此可判断出数据库test中t1表中的内容被清空了,并且把表也删除了。
03.恢复数据库中删除的数据:
1)由于表t1被删除了,没有该表的数据结构无法直接通过binlog日志来恢复删除的数据;但是我们在电脑中发现了该数据库的备份,直接还原后就可以得到表t1的数据结构。(这里不做还原的详细解说,如果您想了解还原详细操作步骤,可在后台留言)。
恢复出的数据结构
2)备份最后修改时间为2018-11-21 15:27:12,MySQL-bin.000008的创建时间为2018?-?11?-?20 ??14:15:40,可以推断出备份后表t1的所有操作都在该日志中。
3)在mysql命令界面使用命令show binlog events in 'mysql-bin.000008';打开最后一个日志文件,找出开始和结尾的pos点,分别为:4和1223,如下图:
4)提取日志文件该段落:在mysql安装界面的bin目录下输入一下命令:mysqlbinlog C:\xampp\data\mysql-bin.000008 --start-position=4 --stop-position=1223 -r 1.sql,该命令把日志文件中的所有语句提取到了bin目录下的1.sql中。
5)通过分析该sql文件可以发现其中记录了每一条命令的执行的时间,找到备份创建时间2018-11-21 15:27:12之后的所有命令另存为2.sql。如下图:
6)另存为2.sql后,把最后两条删除的命令去除,直接在数据库中运行,就可以恢复出表中的所有数据。
注意事项:
1、在恢复之前一定要确认MySQL数据库的binlog日志是开启的;2、若把表删除一定要想办法把表的数据结构找到,这样才能准确的恢复出数据;3、binlog日志中是记录了每条语句的执行时间的,可以通过时间来恢复;4、在截取插入语句的时候一定要注意不要把最后一条删除的语句截取到,不然恢复的数据又会被删除。
以上就是效率源科技的技术大咖针对使用binlog日志恢复MySQL数据库删除数据的方法,希望上述的问题解决思路能给公检法一线办案人员一些参考和帮助。如对文中的操作、描述有任何疑问,或者有相关数据库恢复案件协助支持也可以直接联系效率源科技,获得技术协助。
相关推荐
- Java培训机构,你选对了吗?(java培训机构官网)
-
如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...
- 产品经理MacBook软件清单-20个实用软件
-
三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...
- RAD Studio(Delphi) 本月隆重推出新的版本12.3
-
#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...
- 图解Java垃圾回收机制,写得非常好
-
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...
- Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷
-
1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...
- 半虚拟化如何提高服务器性能(虚拟化 半虚拟化)
-
半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...
- HashMap底层实现原理以及线程安全实现
-
HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...
- long和double类型操作的非原子性探究
-
前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...
- 数据库DELETE 语句,还保存原有的磁盘空间
-
MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...
- 线程池—ThreadPoolExecutor详解(线程池实战)
-
一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...
- navicat如何使用orcale(详细步骤)
-
前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...
- 你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开
-
各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...
- 大数据正当时,理解这几个术语很重要
-
目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...
- 秒懂列式数据库和行式数据库(列式数据库的特点)
-
行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...
- AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4
-
AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)