MySQL误删除数据,如何恢复?

rabitsky 2014-02-25 02:54:53
大牛们,刚接触MySQL,对MySQL操作不太熟练。现在遇到数据误删除的问题,查了资料,很遗憾没找到具体的解决方法,都是一两句话带过,也没有个详细的过程。只有在这里向大牛们请教了。

操作系统版本:CentOS release 5.10 (Final) 32位
MySQL版本:5.5.10-log
误删除之前,我已经使用mysqldump备份了t表。
mysqldump -uroot -p123456 wzcp t > t.sql
而且启用了log-bin日志模式
log-bin=/home/mysql/mysql/data/bin-log/mysql-bin
binlog_format=row

具体操作如下:

mysql> select * from t;
+------+---------+
| id | name |
+------+---------+
| 1 | Thomas |
| 2 | Lucy |
| 3 | Jack |
| 4 | Goodman |
| 5 | Alisen |
| 7 | John |
| 8 | Scott |
+------+---------+
8 rows in set (0.00 sec)
mysql> delete from t where id = 8;
Query OK, 1 row affected (0.01 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t;
+------+---------+
| id | name |
+------+---------+
| 1 | Thomas |
| 2 | Lucy |
| 3 | Jack |
| 4 | Goodman |
| 5 | Alisen |
| 7 | John |
+------+---------+
7 rows in set (0.01 sec)

binlog日志内容是这样的:
# at 1332
#140225 14:50:00 server id 1 end_log_pos 1400 Query thread_id=77 exec_time=0 error_code=0
SET TIMESTAMP=1393311000/*!*/;
BEGIN
/*!*/;
# at 1400
#140225 14:50:00 server id 1 end_log_pos 1489 Query thread_id=77 exec_time=0 error_code=0
SET TIMESTAMP=1393311000/*!*/;
delete from t where id = 8
/*!*/;
# at 1489
#140225 14:50:00 server id 1 end_log_pos 1516 Xid = 653
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
http://database.51cto.com/art/201212/374563.htm这个网友给了解决方案,但我按照他这个方式,发现日志内容不对,日志里只有delete from t where id = 8这样的数据,没有具体的列名、数据类型、值等等。

请问大牛,到底这条数据应该如何恢复呢?谢谢
...全文
6024 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabitsky 2014-02-26
存储引擎是InnoDB,我之前的binlog都已经flush logs和reset master了,那只能从mysqldump备份文件中恢复了吗? 如果备份文件有上千万条记录,怎么找出对应insert语句呢?
回复
五茅 2014-02-26
引用 4 楼 rabitsky 的回复:
存储引擎是InnoDB,我之前的binlog都已经flush logs和reset master了,那只能从mysqldump备份文件中恢复了吗? 如果备份文件有上千万条记录, 怎么找出对应insert语句呢?
在mysqldump导出的语句中, 通过表名字以及主键值来查找记录进行恢复数据
回复
wutuobang321 2014-02-26
引用 4 楼 rabitsky 的回复:
存储引擎是InnoDB,我之前的binlog都已经flush logs和reset master了,那只能从mysqldump备份文件中恢复了吗? 如果备份文件有上千万条记录,怎么找出对应insert语句呢?
如果你在误删除之后,表空间的内容没有被覆盖,那可以用工具实现 http://www.percona.com/docs/wiki/innodb-data-recovery-tool:start
回复
ACMAIN_CHM 2014-02-25
找到那个 delete 语句在BINLOG中,然后把之前的语句全部执行一遍即可。
回复
rucypli 2014-02-25
找到之前的insert语句
回复
wutuobang321 2014-02-25
使用的什么存储引擎?
回复
发动态
发帖子
MySQL
创建于2007-09-28

5.4w+

社区成员

MySQL相关内容讨论专区
申请成为版主
社区公告
暂无公告