-- 转自http://bbs.csdn.net/topics/310068149
-- 其实就是找到对应的位置然后执行语句即可

-- 第一部分 输出
mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000063" > D:\ab\01.txt

-- 第二部分 输入到mysql
mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000063" | mysql -uroot -p111111 back_db

mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000063" | mysql -uroot -p111111 back_db

237 1018 1170 1488
mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000064" --start-position 1170 --stop-position 1488 | mysql -uroot -p111111 back_db

mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000064" --start-position 237 --stop-position 1018 | mysql -uroot -p111111 back_db

237 664
mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 5.6\Data\mysql-bin.000065" --start-position 237 --stop-position 664 | mysql -uroot -p111111 back_db

mysqlbinlog工具的使用,大家可以看MySQL的帮助手册。里面有详细的用,
在这个例子中,重点是--start-position参数和--stop-position参数的使用。

•--start-position=N
从二进制日志中第1个位置等于N参量时的事件开始读。
•--stop-position=N
从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

OK,现在开始,要启动二进制日志记录,
要先在my.cnf / my.ini文件的mysqld里添加
log-bin=日志名
在这里,偶是的设置是log-bin=liangck
然后再启动mysql服务,因为偶是用windows系统,
所以执行net start mysql命令即可。

然后在一测试数据库里,创建一个表,并添加记录。

SQL code

 

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
mysql> create table test(id int auto_increment not null primary key,
             val int,data varchar(20));
 
mysql> insert into test(val,data) values(10,'liang');
Query OK, 1 row affected (0.03 sec)
 
mysql> insert into test(val,data) values(20,'jia');
Query OK, 1 row affected (0.08 sec)
 
mysql> insert into test(val,data) values(30,'hui');
Query OK, 1 row affected (0.03 sec)
 
mysql> flush logs;   --产生第二个日志文件
Query OK, 0 rows affected (0.09 sec)
 
mysql> insert into test(val,data) values(40,'aaa');
Query OK, 1 row affected (0.05 sec)
 
mysql> insert into test(val,data) values(50,'bbb');
Query OK, 1 row affected (0.03 sec)
 
mysql> insert into test(val,data) values(60,'ccc');
Query OK, 1 row affected (0.03 sec)
 
mysql> delete from test where id between and 5;  --删除记录
Query OK, 2 rows affected (0.05 sec)
 
mysql> insert into test(val,data) values(70,'ddd');
Query OK, 1 row affected (0.03 sec)
 
mysql> flush logs;          --产生第三个文件文件
Query OK, 0 rows affected (0.11 sec)
 
mysql> insert into test(val,data) values(80,'dddd');
Query OK, 1 row affected (0.05 sec)
 
mysql> insert into test(val,data) values(90,'eeee');
Query OK, 1 row affected (0.03 sec)
 
mysql> drop table test;       --删除表
Query OK, 0 row affected (0.05 sec)

――――――――――――――――――――――――――――――――――
OK,现在测试数据已经建好了,要求是什么呢?
就是将test表的数据全部恢复出来。

先用mysqlbinlog工具将日志文件生成txt文件出来分析。

F:\Program Files\MySQL_Data\data\log>
                mysqlbinlog liangck.000001 > G:\001.txt

F:\Program Files\MySQL_Data\data\log>
       mysqlbinlog liangck.000002 > G:\002.txt

F:\Program Files\MySQL_Data\data\log>
         mysqlbinlog liangck.000003 > G:\003.txt

通过这三个命令,可以在G盘下生成3个文件,
里面分别记录了日志文件的内容,
也就是用户操作的步骤。
因为我们需要重做第一个日志文件的所有操作,
所以这里只需要将第一个日志文件全恢复就行了。
F:\Program Files\MySQL_Data\data\log>
        mysqlbinlog liangck.000001 | mysql -uroot –p

Ok,接着,我们需要分析的是第二个日志文件。为什么要分析它呢,
因为它中途执行了一个操作是DELETE,因为我们要做的是恢复全部数据,
也就是我们不希望去重做这个语句。所以在这里我们要想办法去绕开它。
我们先打开002.txt文件来分析一下。

在这个文件中,我们可以看到DELETE的操作的起始位置是875,终止位置是1008.
那么我们只要重做第二个日志文件的开头到875的操作,然后再从1008到末尾的操作,
我们就可以把数据给恢复回来,而不会DELETE数据。所以执行两个命令:

F:\Program Files\MySQL_Data\data\log>
       mysqlbinlog liangck.000002 --stop-pos=875 | mysql -uroot -p

F:\Program Files\MySQL_Data\data\log>
        mysqlbinlog liangck.000002 --start-pos=1008 | mysql -uroot -p mytest

OK,现在第二个日志文件的数据了。
第三个日志文件也是同理,只要找到DROP TABLE的位置,就可以了。

F:\Program Files\MySQL_Data\data\log>
    mysqlbinlog liangck.000003 --stop-pos=574 | mysql -uroot –p

现在我们再查一下数据看看:

SQL code

 

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> select from test;
+----+------+-------+
| id | val  | data  |
+----+------+-------+
|  1 |   10 | liang |
|  2 |   20 | jia   |
|  3 |   30 | hui   |
|  4 |   40 | aaa   |
|  5 |   50 | bbb   |
|  6 |   60 | ccc   |
|  7 |   70 | ddd   |
|  8 |   80 | dddd  |
|  9 |   90 | eeee  |
+----+------+-------+
rows in set (0.00 sec)

可以看到,全部数据都回来了。

1027mysqlbinlog工具日志恢复的更多相关文章

  1. 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!

    前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...

  2. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  3. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  4. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  5. MySQL的binlog日志恢复(转)

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  6. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  7. 使用binlog2sql工具来恢复数据库

    (一)binlog2sql介绍 binlog2sql是国内MySQL大佬danfengcao开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件.根据不同选项,可以得到原始SQL. ...

  8. MySQL二进制binlog日志说明以及利用binlog日志恢复数据

    MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...

  9. MySQL 数据库通过日志恢复

    http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...

随机推荐

  1. android开发环境搭建日记和嵌入式Android开发环境初探

    非常感谢博客园的各位,按照你们的博文,还有利用百度和谷歌逐渐建立了android的开发环境,只是给自己备份参考查看,看过的人可以忽略这篇文章. 本文章大部分参考了:http://www.cnblogs ...

  2. [转]ASP.NET MVC 3 Razor + jqGrid 示例

    本文转自:http://www.cnblogs.com/think8848/archive/2011/07/15/2107828.html 前些天写了一篇有关jqGrid的文章,因为是公司项目的原因一 ...

  3. ajax小结

    1. http是一种无状态协议 2. http请求:四部分组成 ① http 请求的方法或动作,如:GET / POST ② 正在请求的URL,总得知道请求的地址是什么 ③ 请求头,包含一些客户端环境 ...

  4. 时光煮雨 Unity3d 序列目标点的移动①

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  5. Observe the 0CTF & 0CON

    I went to observe 0CTF and 0CON on 4.22 ~ 4.24 and just come back. Not only do I learn a lot from th ...

  6. NOIP2014飞扬的小鸟[DP][WRONG]

    坑人啊朴素的dp 75分 用了完全背包才是80分,结果普遍偏小 为什么啊啊啊啊啊 等以后再写一遍吧 #include<iostream> #include<cstdio> #i ...

  7. ANE原生代码的调试(安卓)

    忙了一天终于有空继续这篇教程了. ANE的原生代码的调试其实在Adobe的官网有介绍的,但是同样很含糊,我摸索了一段时间现在记录下我的心得. 首先你得安装Eclipse,然后你得启动Eclipse 然 ...

  8. 万能的 SQL编程

    简介:T-SQL语句创建库.创建表和听.和添加约束等.T-SQL是数据库结构化查询语言,常见的增加.删出.修改.查询.创建库和创建表的语句,还支持定义变量.输出语句.逻辑控制语句(IF.CASE.WH ...

  9. java 24 - 6 GUI之 创建只能输入数字的文本框

    需求: 创建一个含有标签和文本框的窗体,其中文本框只能输入数字 步骤:(大致上) 创建窗体对象 创建标签对象 创建文本框对象 把组件添加到窗体中 设置标签的监听事件,对键盘按下的数据进行监听 设置窗体 ...

  10. bzoj1036 [ZJOI2008]树的统计Count

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 12646  Solved: 5085 [Subm ...