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,一经查实,立即删除!

相关文章

Java FileInputStream available()方法与示例

FileInputStream类的available()方法 (FileInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of bytes left that can be read from this Fi…

mysql 输出参数 sql语句_MySQL: 详细的sql语句

1添1.1【插入单行】insert [into] (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (开心朋朋,男,1980/6/15)1.2【将现有表数据添加到一个已有表】insert into (列名) select from 例:insert into tongxunlu (姓名,地址,电子邮…

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

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

Java File类boolean delete()方法(带示例)

文件类布尔型delete() (File Class boolean delete()) This method is available in package java.io.File.delete(). 软件包java.io.File.delete()中提供了此方法。 This method is used to delete file or directory by using delete() method and this method is accessible…

Unity3D Adam Demo的学习与研究

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

Java File类boolean isFile()方法(带示例)

File类boolean isFile() (File Class boolean isFile()) This method is available in package java.io.File.isFile(). 软件包java.io.File.isFile()中提供了此方法。 This method is used to check whether the file is specified by filepath is a file or not. 此方法用于检…

要加油!

现实中我容易佩服一个人。 一个顽强的女人,一个艰苦奋斗的男人..... 但是在网络的世界里,我没有佩服过几个,但是不得不说的就是冰河。同样的年龄人家做的事情和我们做的事情差距是多么的大,真的想想心里都是天壤之别。 比一比才知…

Java DataOutputStream writeInt()方法及示例

DataOutputStream类writeInt()方法 (DataOutputStream Class writeInt() method) writeInt() method is available in java.io package. writeInt()方法在java.io包中可用。 writeInt() method is used to write the given integer value to the basic DataOutputStream as 4 b…

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…

ES6特性之:Spread操作符

Spread操作符(...),也称作展开操作符,作用是将可迭代的(Iterable)对象进行展开。 比如有2个数组,我们要将其中一个数组中所有元素插入到另一个数组中,通过Spread操作符,就可以这样进行: var fruits ["…

Java类class isMemberClass()方法及示例

类的类isMemberClass()方法 (Class class isMemberClass() method) isMemberClass() method is available in java.lang package. isMemberClass()方法在java.lang包中可用。 isMemberClass() method is used to check whether the underlying class is a member class or not.…

velocity自定义函数_velocity基本语法和总结

一:基本语法:1、#set(#a "a")$a ##输出语句时直接写变量的名称即可2、判断语句:#if($a "a") ##判断语句没有括号,也是直接输出$a3、数组:#set($arry [0..10])$foreach($i in $arry)$i ##换行#e…

docker-machine指定cpu个数

序 给本机的一个服务压测,结果半天qps上不了万,而且经常跑满cpu,搞半天发现,docker里头才1核1G内存。原来boot2docker默认给docker-machine分配1个cpu和1G内存。 修改配置 docker-machine create \--driver virtualbox \--virtual…

Java ClassLoader findResources()方法与示例

ClassLoader类findResources()方法 (ClassLoader Class findResources() method) findResources() method is available in java.lang package. findResources()方法在java.lang包中可用。 findResources() method is used to find all the resources with the given resource …

Java ByteArrayInputStream mark()方法与示例

ByteArrayInputStream类mark()方法 (ByteArrayInputStream Class mark() method) mark() method is available in java.util package. mark()方法在java.util包中可用。 mark() method is used to set the current mark position in the stream from where read or write can b…

java mediainfo.dll_MediaInfo库的简单使用

想到一个问题, 如何获得一个图像文件(比如jpg, bmp, png)的信息. 自己查查文件的格式, 写一个解析, 应该不困难; 但是找了下现成的, 发现MediaInfo库已经可以非常好的实现需要的功能了.MediaInfo可以在sourceforge上找到, 是一个解析视频,音频, 图片等媒体文件的库. 可以得到文…

Redis配置和常用命令

1 redis.conf配置文件:2 引用3 #是否作为守护进程运行4 daemonize yes5 #配置pid的存放路径及文件名,默认为当前路径下6 pidfile redis.pid7 #Redis默认监听端口8 port 63799 #客户端闲置多少秒后,断开连接 10 timeout 300 11 #日志显示级别 …

oracle中dbms_DBMS中的功能依赖性和属性关闭

oracle中dbms功能依赖 (Functional Dependency) A relational Database management System (RDBMS) represents the database o a collection of relations/tables. A functional dependency is a constraint between two sets of attributes in a relation. It is the propert…

java invoke 泛型_利用Java反射机制和泛型,全自动解析json

有啦这个简直,太爽啦,利用Java 反射机制,利用Class 就可以得到 类的 变量 Field[] fieldscls.getDeclaredFields();还可以通过类中 的方法名字 去执行这个方法m1 cls.getDeclaredMethod(getMothodName(fields[j].getName()), String.class)…

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

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