(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. oracle一次删除多张表

    通过拼接sql语句来完成 例如有如下个表 想一次性删除,执行如下语句: select 'drop table '||table_name ||';' as dropsql from USER_TABL ...

  2. Hibernate 系列教程8-复合主键

    复合主键 复合主键的意思就是2个字段同时为主键 不使用无业务含义的自增id作为主键 Airline package com.jege.hibernate.compositeid; import jav ...

  3. iOS 判断奇偶数

    if (_bigUrlArray.count%2==0) {//如果是偶数 a = i*(_bigUrlArray.count/count);//每个线程图片初始数 b = (i+1)*(_bigUr ...

  4. iOS开发frame, contentSize, contentOffset, contentInset 区别联系浅析

    1. 概述 iOS开发中,必然会涉及到布局相关问题,frame,bounds,contenSize,contentOffset,contentInset这几个布局相关概念让许多初学者感到困惑.虽然初步 ...

  5. VideoView的视频的全屏播放

    import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.I ...

  6. android 去掉listview之间的黑线

    方法1:listView.setDividerHeight(0);方法2:this.getListView().setDivider(null);方法3:android:divider="@ ...

  7. 困扰你的private static final long serialVersionUID

    很多时候一个新手在写代码的时候,往往你的IDE就会告诉你一个警告 然后你点击处理这个警告之后,它就会默认给你的类生成一个 private static final long serialVersion ...

  8. awk 数组排序-- asort 与 asorti

    两者排序区别: asort 是对数组的值进行排序,并且会丢掉原先键值: asorti是对数组的下标进行排序. 数据文件: 12 34 78 90 23 45 1. awk是关联数组.for-in循环输 ...

  9. [转] Spring Security(01)——初体验

    [转自:http://haohaoxuexi.iteye.com/blog/2154299] 首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Sprin ...

  10. HDU 1203 I NEED A OFFER! 01背包 概率运算预处理。

    题目大意:中问题就不说了 ^—^~ 题目思路:从题目来看是很明显的01背包问题,被录取的概率记为v[],申请费用记为w[].但是我们可以预先做个处理,使问题解决起来更方便:v[]数组保留不被录取的概率 ...