[转]不小心删除数据--MySQL数据恢复

出自:http://blog.chinaunix.net/uid-26602509-id-4102099.html

打开mysql的bin log功能:
对于mysql也是支持增量备份,但要打开mysql的bin log功能。
我们修改mysql的配置文件。linux是/etc/my.cnf,windows是mysql的安装目录/my.ini
我们在[mysqld]下面加上log-bin一行代码,如下面。

  1. [mysqld]
  2. log-bin=mysql-bin

复制代码

加完后重起mysql即可。

某客户更新数据的时候,误删了数据库的内容,因为数据库做了主从,但是没有做备份(备份很重要啊!)幸好开启了bin-log,之后只好把整个日志的记录拿回来本地进行恢复。

之后自己也做了一个简单的测试,对数据进行恢复,具体如下:

1、新建一个表
CREATE TABLE  `lynn`.`sn_test` ( `name` VARCHAR( 10 ) CHARACTER SET utf8
COLLATE utf8_bin NOT NULL , `age` INT( 3 ) NOT NULL ) ENGINE = MYISAM;

2、插入多条数据
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES (‘lynn1‘, ‘1‘);
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES (‘lynn2‘, ‘2‘); 
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES (‘lynn3‘, ‘3‘); 
INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES (‘lynn4‘, ‘4‘);

3、查看数据并删除
mysql> select * from sn_test;
+-------+-----+
| name  | age |
+---------+---+
| lynn1 |   1 |
| lynn2 |   2 |
| lynn3 |   3 |
| lynn4 |   4 |
+---------+-----+
4 rows in set (0.00 sec)

mysql> delete from sn_test;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from sn_test;
Empty set (0.00 sec)

4、mysqlbinlog恢复数据
mysqlbinlog mysql-bin.000006 > 1.sql
查看1.txt里面数据插入的纪录,把删除之前的数据进行恢复
mysqlbinlog mysql-bin.000006 --start-position=2471 --stop-position=2876 | mysql -uroot -p123

重新登录,查看数据,OK,已经成功恢复了

对于数据库操作,应该注意如下问题:
1、要常备份(全备,增量备份),出了问题可以最快恢复数据;
2、操作数据库前,要把需要操作的数据库或者表dump出来;
3、需要把bin-log打开,就算没有做上面的两步,也可以通过日志恢复数据

时间: 2024-08-27 21:52:18

[转]不小心删除数据--MySQL数据恢复的相关文章

MySQL——添加、更新与删除数据

添加数据 通常情况下,向数据表中添加的新记录应该包含表所有字段,即为该表中的所有字段添加数据,为表中所有字段添加数据的INSERT语句有两种. 1.INSERT语句中指定所有字段名向表中添加新记录时,可以在INSERT语句中列出表的所有字段名,其语法格式如下所示: INSERT INTO 表名(字段名1,字段名2,……)  VALUES(值1,值2,……); 2.INSERT语句中不指定字段名在MySQL中,可以通过不指定字段名的方式添加记录,其基本的语法格式如下所示: INSERT INTO

MySQL必知应会-第20章-更新和删除数据

第20章-更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据. 20.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE; 更新表中特定行; 更新表中所有行.下面分别对它们进行介绍.不要省略WHERE子句 在使用UPDATE时一定要注意细心.因为稍不注意,就会更新表中所有行.在使用这条语句前,请完整地阅读本节.UPDATE与安全 可以限制和控制UPDATE语句的使用,更多内容请参见第28章. UPDATE语句非常容易使用,

MySQL 删除数据表语法以及案例剖析

MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_name ; 在命令提示窗口中删除数据表 在mysql>命令提示窗口中删除数据表SQL语句为 DROP TABLE : 实例 以下实例删除了数据表runoob_tbl: [email protected]# mysql -u root -p Enter password:****

mysql优化, 删除数据后物理空间未释放(转载)

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化.这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 .OPTIMIZE TABLE

关于mysql 删除数据后物理空间未释放

OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR . BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化.这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 .OPTIMIZE TABLE

MySQL中删除数据的两种方法

转自:http://blog.csdn.net/apache6/article/details/2778878 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句. DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其

Mysql 如何删除数据表中的重复数据!

1.使用distinct查询所有不重复的记录 2.创建数据表相同结构的临时表,将第一步的数据复制进去 create temporary table if not exists student_temp as (select distinct(name), sex from student); 3.truncate table student; 4.insert into student(id,name,sex) select null,name,sex from student_temp; My

mySQL教程 第5章 插入 更新与删除数据

第5章 插入 更新与删除数据 使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不用指定列 其中的into可以省去 insert into TStudent values ('00008','白安','男','132302197604044565','19760404', '[email protected]','JAVA','20120803')

MySQL 定时删除数据

存储过程: 1. MySQL 5.0 以后开始支持存储过程. 2. 我们常用的SQL语句在执行的时候需要先编译,然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中(因而执行速度比较快),用户通过制定存错过程的名字并给定参数来调用执行它. Event事件: 1. MySQL 5.1以后开始引入event概念: 2. event 即"时间触发器",通过在特定时间触发SQL语句或者存储过程执行. MySQL 定时删除数据实现方法:mysql存储过程 + even