1027mysqlbinlog工具日志恢复
-- 转自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二进制binlog日志说明以及利用binlog日志恢复数据
MySQL的binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全量备份+binlog日志恢复增量数据部分). 一.关于 ...
- MySQL 数据库通过日志恢复
http://blog.csdn.net/hanxin1987216/article/details/5976856 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选 ...
随机推荐
- 必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序
冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个 ...
- sql查询一天内的where写法,sql写法
sql查询一天内的写法: 1. where createtime BETWEEN (select date_format(now(),'%Y-%m-%d 00:00:00')) and (select ...
- AWS国际版的Route 53和CloudFront
注册AWS国际版账号后,却发现Route 53和CloudFront功能是无法使用的.于是提交了一个Service Request,得到的答复是这两个功能需要验证后才能激活. 在控制台中点击进入Rou ...
- Medusa引擎开源了
首先贴出 Github地址 然后博客地址 相比于市面上其他的著名游戏引擎,例如Unity,cocos2dx,Unreal,Medusa游戏引擎目前还非常的简陋,目前实现的功能还集中在2D部分,3D的虽 ...
- Java Web之Servlet技术
1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...
- zookeeper Eclipse 开发环境搭建及简单示例
一,下载Zookeeper安装包 从官方网站下载稳定版安装包后,解压. 其中ZK_HOME 为:D:\Program Files\zookeeper-3.4.9 二,启动Zookeeper Serve ...
- using关键字的用法
1.using 关键字可以用来导命名空间,与java中的import类似. 2.using关键字可以用来释放资源,并且被释放的资源代码是非托管代码. 既然可以释放非托管代码,那么什么是非托管代码? 我 ...
- 开发Adobe AIR移动应用程序的考虑事项
http://www.adobe.com/cn/devnet/air/articles/considerations-air-apps-mobile.html Adobe AIR 经过发展演进,已经超 ...
- [No000040]取得一个文本文件的编码方式
using System; using System.IO; using System.Text; /// <summary> /// 用于取得一个文本文件的编码方式(Encoding). ...
- 隐写-CTF中图片隐藏文件分离方法总结
0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是 ...