1027mysqlbinlog工具日志恢复

时间:2023-01-05 16:16:31

-- 转自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 数据库通过日志恢复

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

  9. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)

    SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...

随机推荐

  1. Angularjs真是个好东西

    事件篇: 实例:(点击按钮内容加1) <!DOCTYPE html><html><head><meta charset="utf-8"&g ...

  2. 在网页上添加QQ消息代码

    进入:http://shang.qq.com/v3/widget.html 复制代码 到网页

  3. 【随笔】android开发的学习路线

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...

  4. Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。

    1.Car c = new Car(); Car c2 = new Car(); 1> c 和 c2之间的区别? public static void main(String[] args) { ...

  5. 自绘CProgressCtrl进度条控件,支持自定义显示文本和进程百分比信息

    // CXProgressCtrl 头文件 #pragma once // CXProgressCtrl class CXProgressCtrl : public CProgressCtrl { D ...

  6. JVM内存堆布局图解分析

    JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...

  7. 《java系统性能优化》--2&period;高速缓存

    上一节.简介了怎样发现性能瓶颈.从这节開始.我会和大家分享我在项目中做的一些性能调优工作.这个系列没有什么顺序可言,认为什么重要.就说说什么. 这节.我们聊缓存. 最開始接触缓存这个词,是学习硬件知识 ...

  8. Log4J1升级Log4J2

    近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId ...

  9. 对web&period;config加密,和解密码详细说明

    可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码.数据库连接字符串和加密密钥).对配置信息进行加密后,即使攻击者获取了对配置文件的访问 ...

  10. shell脚本&lowbar;查找无效网址

    #!/bin/bashif [ $# -ne 1 ];then      echo -e "$Usage: $0 URL\n"      exit 1;fi echo Broken ...