(1) 如果备份了,就好解决了。略。

(2)如果日志打开,使用mysqlbinlog来恢复。

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)

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

转自: http://bbs.csdn.net/topics/310068149

(3)系统级恢复

使用磁盘恢复软件,类似easy recovery 这种

MYSQL管理----数据库删除恢复的更多相关文章

  1. Linxu用户名验证登录MySQL管理数据库

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 前情介绍: 我们都知道登录MySQL数据库时,连接层接入数据库需要经过mysql.user表中,用户名密码的验证才能登录数 ...

  2. mysql导出数据库和恢复数据库代码

    mysql导出数据库和备份数据库 用mysqldump 命令行 命令格式 mysqldump -u 用户名 -p  数据库名 > 数据库名.sql 范例: mysqldump -uroot -p ...

  3. MySql通过数据库文件恢复数据库

    以表”Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中. 如 ...

  4. Linux centosVMware mysql用户管理、常用sql语句、mysql数据库备份恢复

    一.mysql用户管理 grant all on *.* to 'user1'@‘127.0.0.1’ identified by 'mimA123'; 创建user1用户 使用user1登录 /us ...

  5. MySQL用户管理、常用sql语句、MySQL数据库备份恢复

    1.MySQL用户管理 给远程登陆用户授权:grant all on *.* to 'user1'@'127.0.0.1' identified by '123456' (这里的127.0.0.1是指 ...

  6. 如何通过Mysql的二进制日志恢复数据库数据

    经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...

  7. MySQL/MariaDB数据库的各种日志管理

    MySQL/MariaDB数据库的各种日志管理 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.事务日志 (transaction log) 1>.Innodb事务日志相 ...

  8. Database基础(四):密码恢复及设置、 用户授权及撤销、数据备份与恢复、MySQL管理工具

    一.密码恢复及设置 目标: 本案例要求熟悉MySQL管理密码的控制,完成以下任务操作: 练习重置MySQL管理密码的操作 通过正常途径设置MySQL数据库的管理密码 步骤: 步骤一:重置MySQL管理 ...

  9. CentOS下开启mysql远程连接,远程管理数据库

    当服务器没有运行php.没装phpmyadmin的时候,远程管理mysql就显得有必要了.因为在CentOS下设置的,所以标题加上了CentOS,以下的命令在debian等系统下应该也OK. mysq ...

随机推荐

  1. 8.1 sikuli报错: 提示没有对应的javaw

    对于sikuli,需要安装32位的jdk且不能高于1.7的版本. 对于64位系统的C盘,Program Files文件夹是64位的,Program File(x86)文件夹是32位的 需要安装一个32 ...

  2. spring 分散配置

    Spring简化了加载资源文件的配置,可以通过<context:property-placeholder去加载,这个元素的写法如下: <context:property-placehold ...

  3. 使用jquery的js的页面实现例子

    var validate;var nodeId="";var modifyappId=""; addExportTaskURL = ctx + "/x ...

  4. 最小点集覆盖/HDU2119

    题目连接 先试一下题/?/ 最小点集覆盖=最大匹配 /*根据i.j建图,跑一边最大匹配 */ #include<cstdio> #include<cstring> using ...

  5. 设置SVN,Git忽略MAC的.DS_Store文件的方法

    设置SVN,Git忽略MAC的.DS_Store文件的方法 I. 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bo ...

  6. 通过js来修改div的style(background,border,。。。。。。。)

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  7. QT修改默认的滚动条样式

    这几天写一个类似于悬浮窗的小程序,可是qt自带的滚动条实在难看,经过多番查找终于找到一个类似于qq聊天窗口的滚动条,废话不说上代码.希望能帮到大家 1.写入到文件中,新建个xx.qss,然后复制一下内 ...

  8. 每个程序员都应该学习使用Python或Ruby

    每个程序员都应该学习使用Python或Ruby 如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaSc ...

  9. Day05_JAVAEE系列:Junit

    Junit 单元测试开发工具:myeclipse10 内部集成的junit的库 1)什么是junit?     junit是一个专业的编写测试代码的工具 2)建立junit测试类的步骤:     2. ...

  10. Android Studio的使用(八)--// TODO代码

    我们都知道Eclipse存在// TODO代码,该段代码在方法中用于标识该方法仍未完成,也可以用于作为该方法的一个快捷键.例如我们可以用于标识onClick()方法,当我们需要查找onClick()方 ...