mysql 刷新二进制日志_使用binlog日志恢复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有没有被注释掉(每行第一个字符为#号表示该行被注释),若没被注释表示开启,若被注释表示没有开启。

a4c26d1e5885305701be709a3d33442f.png

方法二:

在MySQL命令行下使用show variables like

‘log_bin’;命令查看binlog日志是否开启,Value的值为ON表示开启,为OFF表示关闭。

a4c26d1e5885305701be709a3d33442f.png

方法三:在存放数据库的文件夹中是否存在mysql-bin.000001类似的文件,有则表示binlog日志功能是开启的。

a4c26d1e5885305701be709a3d33442f.png

在数据恢复过程中会用到的binlog日志操作命令

1、查看所有binlog日志列表:

在mysql命令界面输入命令: mysql> show master logs

a4c26d1e5885305701be709a3d33442f.png

2、查看master状态,即最后(最新)一个binlog日志的编号名称及其最后一个操作事件pos结束点(Position)值:

在mysql命令界面输入命令: mysql> show master status

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

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日志实现增量恢复数据库删除数据的流程:

a4c26d1e5885305701be709a3d33442f.png

01.判断数据库是否开启了binlog日志:

在MySQL命令行下使用show variables

like‘log_bin’;命令中log_bin的Value为ON,该数据库的binlog日志是开启的。

a4c26d1e5885305701be709a3d33442f.png

02.判断数据库是否有被删除的操作:

1)在mysql命令界面通过show master logs;命令查看binlog日志列表,发现一共有8条日志。

a4c26d1e5885305701be709a3d33442f.png

2)在mysql命令界面通过命令show binlog events in

'mysql-bin.000008';可以查看最后两条命令为“use ‘test‘;delete from t1,use

`test`;DROP TABLE `t1`”由此可判断出数据库test中t1表中的内容被清空了,并且把表也删除了。

a4c26d1e5885305701be709a3d33442f.png

03.恢复数据库中删除的数据:

1)由于表t1被删除了,没有该表的数据结构无法直接通过binlog日志来恢复删除的数据;但是我们在电脑中发现了该数据库的备份,直接还原后就可以得到表t1的数据结构。(这里不做还原的详细解说,如果您想了解还原详细操作步骤,可在后台留言)。

a4c26d1e5885305701be709a3d33442f.png

恢复出的数据结构

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,如下图:

a4c26d1e5885305701be709a3d33442f.png

4)提取日志文件该段落:

在mysql安装界面的bin目录下输入一下命令:

mysqlbinlog C:\xampp\data\mysql-bin.000008 --start-position=4

--stop-position=1223 -r 1.sql,该命令把日志文件中的所有语句提取到了bin目录下的1.sql中。

a4c26d1e5885305701be709a3d33442f.png

5)通过分析该sql文件可以发现其中记录了每一条命令的执行的时间,找到备份创建时间2018-11-21

15:27:12之后的所有命令另存为2.sql。如下图:

a4c26d1e5885305701be709a3d33442f.png

6)另存为2.sql后,把最后两条删除的命令去除,直接在数据库中运行,就可以恢复出表中的所有数据。

注意事项:

1、在恢复之前一定要确认MySQL数据库的binlog日志是开启的;

2、若把表删除一定要想办法把表的数据结构找到,这样才能准确的恢复出数据;

3、binlog日志中是记录了每条语句的执行时间的,可以通过时间来恢复;

4、在截取插入语句的时候一定要注意不要把最后一条删除的语句截取到,不然恢复的数据又会被删除。

以上就是使用binlog日志恢复MySQL数据库删除数据的方法,希望上述的问题解决思路能给大家一些参考和帮助。如对文中的操作、描述有任何疑问,或者有相关数据库恢复案件协助支持也可以直接在微信公众号后台给我们留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

执行git push出现Everything up-to-date

在github上git clone一个项目,在里面创建一个目录,然后git push的时候,出现报错"Everything up-to-date" 原因:1)没有git add .2)没有git commit -m "提交信息"如果上面两个步骤都成功…

Unity3D Adam Demo的学习与研究

1.简述 这篇文章是对Adam各种相关资料了解后进行一些精简的内容。如果你想仔细研究某个技术请跳转至unity相关页面。 Adam官方页面: https://unity3d.com/cn/pages/adam 搬运视频以及资源包网盘下载: http://pan.baidu.com/s/1jH6NF86 Adam这个demo由8个人的团队耗时6个月(part…

python安卓自动化实现方法_uiautomator +python 实现安卓UI自动化

简单实例注:安卓6.0以上的手机不会自动安装app-uiautomator.apk和app-uiautomator-test.apk,需要手动安装,否则报错ioerror RPC server not starteduiautomator pythonHTMLTestRunner 安卓UI自动化实现#coding:utf-8from uiautomator importD…

2_C语言中的数据类型 (四)整数与无符号数

1.1 sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1 int类型 1.1.1 int常量,变量 int就是32位的一个二进制整数,在内存当中占据4个字节…

Spring实战——通过Java代码装配bean

上篇说的是无需半行xml配置完成bean的自动化注入。这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果。 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如ComponentScan Component等就完成了…

java.io和util的区别_Java NIO与IO的区别和比较

Java NIO与IO的区别和比较导读J2SE1.4以上版本中发布了全新的I/O类库。本文将通过一些实例来简单介绍NIO库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道。一. 介绍NIONIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共…

区块链+税务的思考

2016年,区块链技术火了!各大金融公司、互联网巨头都竞相参加到区块链技术的研究中。我们公司的业务是税务的信息化领域,也希望通过区块链技术的应用,来提升为财税领域的服务。 区块链技术优缺点总结 下图是对区块链技术的一些特点…

如何使用JavaScript删除CSS属性?

In this article, well see how we can remove a CSS property from a certain element using JavaScript? We can remove only those properties that we assign ourselves and the pre-default ones cannot be removed by this method. 在本文中,我们将看到如何使…

【喜报】JEEWX荣获“2016 年度码云新增热门开源软件排行榜”第一名!

为什么80%的码农都做不了架构师?>>> 2016 年度码云新增项目排行榜 TOP 50 正式出炉!根据 2016 年在码云上新增开源项目的 Watch、Star、Fork 数量以及其他角度的统计,JEEWX捷微管家荣获“2016 年度码云新增热门开源软件排行榜”第…

java 二叉树特点_疯狂java笔记之树和二叉树

树的概述树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构1.树的定义和基本术语计算机世界里的树,是从自然界中实际的树抽象而来的,它指的是N个有父子关系的节点…

tomcat +apache 配置集群

2019独角兽企业重金招聘Python工程师标准>>> APACHE2.2.25TOMCAT6.0.37配置负载均衡 目标: 使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求: 1. Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例&…

java双缓存机制_详解JVM类加载机制及类缓存问题的处理方法

前言大家应该都知道,当一个Java项目启动的时候,JVM会找到main方法,根据对象之间的调用来对class文件和所引用的jar包中的class文件进行加载(其步骤分为加载、验证、准备、解析、初始化、使用和卸载),方法区中开辟内存来存储类的运…

什么是mvc?

什么是MVCMVC 是一种设计模式,它将应用划分为3 个部分:数据(模型)、展现层(视图)和用户交互层(控制器)。换句话说,一个事件的发生是这样的过程:1.…

mysql的安装和基本命令_MySQL安装以及简单命令用法

MYSQL:关系型数据库存储引擎:负责将逻辑层的概念转化为物理层机制,在物理层完成物理机制。支持事务:transaction必须满足的条件:ACID(一致性,持久性,原子性,隔离性)锁:并发访问随机访问:数据在磁盘上是随机存储的安装&…

docker集群运行在calico网络上

2019独角兽企业重金招聘Python工程师标准>>> ##网络及版本信息 docker1 centos7 192.168.75.200 docker2 centos7 192.168.75.201 物理网络 192.168.75.1/24 Docker version 1.10.3, build 3999ccb-unsupported ,安装过程略 # calicoctl version Version…

人脸识别python face_recognize_python2.7使用face_recognition做人脸识别

偶然看到一篇文章,说是可以实时人脸识别,很有兴趣就自己按照文章开始动手人脸识别,但是实现过程中遇到了几个问题这里做个总结,希望可以帮助到大家安装face_recognition这个之前需要先安装编译dlib,如果没有安装dlib&a…

jvm延迟偏向_用于偏向硬币翻转模拟的Python程序

jvm延迟偏向Here, we will be simulating the occurrence coin face i.e. H - HEAD, T - TAIL. Simply we are going to use an inbuilt library called as random to call a random value from given set and thereby we can stimulate the occurrence value by storing the o…

opengl es的射线拾取

2019独角兽企业重金招聘Python工程师标准>>> 在opengl中关于拾取有封装好的选择模式,名字栈,命中记录,实现拾取的功能,相对容易一些。但是到了opengl es里面就比较倒霉了,因为opengl es是opengl的简化版&am…