-- 转自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. monkeyrunner之夜神模拟器的安装与使用(二)

    在上一篇文章-安卓开发环境搭建中,我们创建并启动了eclipse自带的安卓模拟器,该模拟器不仅启动慢,而且在使用过程中的反应速度也是出奇的差,经常出现卡机现象.为了解决这种现象,因此,我们又寻找到了更 ...

  2. MySQL Database on Azure 参数设置

    在使用MySQL过程中,经常会根据需要对MySQL的参数进行一些设置和调整.作为PaaS版本的MySQL,MySQL Database on Azure在参数设置方面有一些限制,客户不能像使用on-p ...

  3. SQL--实现分页查询

          在查询数据中,对于某些数据量过大,为了减少页面上单页的加载时间,我们常常会选择分页查询,分页查询有很多方法,下面主要介绍两种分页方法.   一. 通过主键来实现分页: 1.数据库背景. P ...

  4. 一行代码远离Google浏览器兼容问题的困扰

    跟Html相比,Web Flash开发的最大优势就在于兼容性好,因为FlashPlayer的开发商只有Adobe一家.但自从Google插了一脚进来,改版出自己的FlashPlayer以后,这一优势就 ...

  5. java 22 - 23 多线程之定时器的概述和使用例子

    定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行. 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编 ...

  6. 比较全的JavaScript倒计时脚本[xyytit]

    需要做一个功能,给特定的活动或者商品添加一个倒计时提示,在网上找了好些方法,总结了比较好的一些方法,以备后用: 1. 比较长时间的倒计时(如:距离2014年还有0年, 0月, 30天, 9小时, 41 ...

  7. Screen 对象

    Screen 对象 Screen 对象 Screen 对象包含有关客户端显示屏幕的信息. 注意: 没有应用于 screen 对象的公开标准,不过所有浏览器都支持该对象. Screen 对象属性 属性 ...

  8. centos7 安装拼音输入法(转载)

    http://m.blog.csdn.net/article/details?id=52137523

  9. PAT 1011. A+B和C (15)

    给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A.B ...

  10. Basic: Fisher's transform

    来源:http://bbs.chinahrd.net/thread-709742-1-1.html,Kenneth的回答. z = 0.5 * ln [ (1+r)/(1-r) ]" C0 ...