-- 转自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命令即可。
然后在一测试数据库里,创建一个表,并添加记录。
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 4 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
现在我们再查一下数据看看:
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 | + ----+------+-------+
9 rows in set (0.00 sec)
|
可以看到,全部数据都回来了。
1027mysqlbinlog工具日志恢复的更多相关文章
-
数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...
-
SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
-
解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
-
Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
-
MySQL的binlog日志恢复(转)
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...
-
【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
-
使用binlog2sql工具来恢复数据库
(一)binlog2sql介绍 binlog2sql是国内MySQL大佬danfengcao开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件.根据不同选项,可以得到原始SQL. ...
-
MySQL 数据库通过日志恢复
http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...
-
SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
随机推荐
-
Angularjs真是个好东西
事件篇: 实例:(点击按钮内容加1) <!DOCTYPE html><html><head><meta charset="utf-8"&g ...
-
在网页上添加QQ消息代码
进入:http://shang.qq.com/v3/widget.html 复制代码 到网页
-
【随笔】android开发的学习路线
第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...
-
Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。
1.Car c = new Car(); Car c2 = new Car(); 1> c 和 c2之间的区别? public static void main(String[] args) { ...
-
自绘CProgressCtrl进度条控件,支持自定义显示文本和进程百分比信息
// CXProgressCtrl 头文件 #pragma once // CXProgressCtrl class CXProgressCtrl : public CProgressCtrl { D ...
-
JVM内存堆布局图解分析
JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...
-
《java系统性能优化》--2.高速缓存
上一节.简介了怎样发现性能瓶颈.从这节開始.我会和大家分享我在项目中做的一些性能调优工作.这个系列没有什么顺序可言,认为什么重要.就说说什么. 这节.我们聊缓存. 最開始接触缓存这个词,是学习硬件知识 ...
-
Log4J1升级Log4J2
近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId ...
-
对web.config加密,和解密码详细说明
可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码.数据库连接字符串和加密密钥).对配置信息进行加密后,即使攻击者获取了对配置文件的访问 ...
-
shell脚本_查找无效网址
#!/bin/bashif [ $# -ne 1 ];then echo -e "$Usage: $0 URL\n" exit 1;fi echo Broken ...