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

mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法相关推荐

  1. mysql服务在系统盘_重装系统后恢复MySQL服务

    如果重装操作系统了,如果MySQL原先是安装在非系统盘(非c盘)里可以不用从新安装只要从新添加服务就可以使用,以前是数据还存在. 1.确保原来的数据库文件是存在的. 首先找到原来安装的MySQL目录下 ...

  2. mfc从mysql中读取数据类型_在MFC中使用SQlite数据库读取数据

    本人在数据库里面用回调函数来处理读取函数的返回值,回调函数必须使用static类型才可以,这样处理起返回的数据变得非常的麻烦,很难处理结果集. 后来从网上找了一个预编译的例子,放在网上和网友分享. 例 ...

  3. mysql 刷新二进制日志_mysql binglog 二进制日志文件

    1.MySQL Server 有四种类型的日志--Error Log.General Query Log.Binary Log 和 Slow Query Log. 1.1.第一个是错误日志,记录 my ...

  4. binlog是什么?能做什么?Window下怎么开启binlog?怎么查看binlog日志?利用binlog日志恢复数据

    binlog是什么?能做什么?Window下怎么开启binlog?怎么查看binlog日志?利用binlog日志恢复数据 windows如何开启Binlog日志 文档来源 ##1.什么是Binlog日 ...

  5. mysql数据库删除数据的三种方式:

    mysql数据库删除数据的三种方式: delete from table where 直接删除表中的某一行数据,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作.所以delete相 ...

  6. java 序列化 文件_一种恢复Java序列化文件数据的方法与流程

    本发明涉及信息安全技术领域,特别涉及一种恢复Java序列化文件数据的方法. 背景技术: 在数据解析恢复领域经常会遇到序列化文件的解析.Java序列化是Java 自身提供的一种数据序列化方式,它允许开发 ...

  7. mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结: 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态, ...

  8. mysql 日志文件 自动_教你自动恢复MySQL数据库的日志文件

    如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用 ...

  9. mysql元数据死锁日志_这个未修复的MySQL 5.7死锁Bug,你知道么?

    破产码农 IT圈最会讲故事的网红 · 南山彭于晏 最近在生产上变更时遇到从机死锁的问题.表现的现象为:同一张的表的DROP TABLE操作进入了同一组.而由于并行复制,并且从机提交顺序需要保证与主机一 ...

最新文章

  1. SRIO学习(四)——SRIO管脚
  2. Android之AsyncTask源码解析
  3. HNOI2018酱油记
  4. c均值聚类matlab程序_机器学习笔记-9-聚类
  5. 常熟理工C语言试卷带答案,常熟理工学院 C语言 考试样卷
  6. IBM分布式深度学习技术将语音识别训练时间从一周缩短到11小时
  7. Qt:QML:JavaScript 和QML 语法错误表
  8. matlab恒压频比,基于matlab的三相异步电机恒压频比调速仿真.doc
  9. spring boot英语在线学习系统毕业设计-附源码211714
  10. python+selenium+tkinter打造网易云音乐下载器
  11. Java实现简单电子邮件的发送
  12. Android动态设置控件宽高和padding
  13. INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法
  14. 【基于QMediaPlayer的简易视频播放器】— 3、结合QSlider实现播放进度控制和音量控制
  15. C++ 与 elang 通信注意问题
  16. 推荐10款好用的数据可视化工具,赶紧收藏
  17. zcmu 1603 卡斯丁狗的战舰帝国(并查集+模拟)
  18. CE修改器基础使用教程
  19. undefined reference to `OsqpEigen::Solver::lu_solve()‘问题解决
  20. SPDY:Google开发的下一代HTTP协议

热门文章

  1. vs写c语言能用scanf,【PAT编写代码时遇到的问题】vs中使用scanf(%c,x);
  2. java快捷键 --_Java中的快捷方式“或分配”(| =)运算符
  3. vue底部选择器_vue实现动态显示与隐藏底部导航的方法分析
  4. Python二级笔记(2)
  5. java.io.file.sync_Java(25)IO流和File类
  6. oracle高水位线
  7. 日常问题——pdsh localhost Connection refused
  8. Angular之ngx-permissions的常见使用情况
  9. Springboot 整合 swagger
  10. MySQL5.7.17的简单配置文件