天堂

  :: :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::

在实际工作中,数据文件被RM -RF掉的情况比较少见,常见的是DROP TABLE ,TRUNCATE TABLE,DELETE FROM TABLE WHERE 1=1;

如果遇到了RM掉数据文件时,千万不要慌张,HOLD住,停止所有的操作,保留现场。下面的方法可以找回丢失的数据文件。

1:创建测试表,写入数据

mysql>  create table tt(a int) engine=myisam;
Query OK, 0 rows affected (0.13 sec)
 
mysql>  insert into tt values(10),(20),(30);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql>  select * from tt;
+------+
| a    |
+------+
|   40 |
|   50 |
|   60 |
+------+
3 rows in set (0.00 sec)

2:删除表数据文件,APP继续往表里写数据,写入是可以成功的(文件句柄依然存在)

[root@brucetest6 fd]# rm -fr /var/lib/mysql/test/tt*

mysql>  insert into tt values(400),(500),(600);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql>  select * from tt;
+------+
| a    |
+------+
|   40 |
|   50 |
|   60 |
|  400 |
|  500 |
|  600 |
+------+
6 rows in set (0.00 sec)

3:找到MYSQL的进程PID

[root@brucetest6 ~]# netstat -ntlp | grep mysqld 
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      31559/mysqld

4:到/proc/PID/fd下找到被删除的文件

[root@brucetest6 ~]# ll /proc/31559/fd|grep a.MY
lrwx------ 1 root root 64 Oct 17 15:46 39 ->  (deleted)/var/lib/mysql/test/tt.MYI
lrwx------ 1 root root 64 Oct 17 15:46 40 ->  (deleted)/var/lib/mysql/test/tt.MYD

5:把文件拷贝回去

[root@brucetest6 fd]# cp 39 /var/lib/mysql/test/tt.MYI
[root@brucetest6 fd]# cp 40 /var/lib/mysql/test/tt.MYD
[root@brucetest6 fd]# ll /var/lib/mysql/test/
total 12
-rw-rw---- 1 mysql mysql   65 Aug  7 17:12 db.opt
-rw-r----- 1 root  root    42 Aug 21 15:14 tt.MYD
-rw-r----- 1 root  root  1024 Aug 21 15:14 tt.MYI

6:此时,还缺少一个tt.frm,这个好办,在另外的库里建一个表结构完全一样的表,把FRM文件拷贝过来就是,修改拷贝过来的文件属主信息。

[root@brucetest6 fd]# ll /var/lib/mysql/test/
total 24
-rw-rw---- 1 mysql mysql   65 Aug  7 17:12 db.opt
-rw-r----- 1 mysql mysql 8554 Aug 21 15:21 tt.frm
-rw-r----- 1 mysql mysql   42 Aug 21 15:14 tt.MYD
-rw-r----- 1 mysql mysql 1024 Aug 21 15:14 tt.MYI

7:数据恢复。

需要注意的是,在RM掉数据文件之后,不要做FLUSH TABLES或者重启数据库操作。

相关博文:

1:http://hcymysql.blog.51cto.com/5223301/1004810

2:http://www.mysqlperformanceblog.com/2012/08/10/recovery-deleted-ibdata1/

posted on 2012-10-17 15:58  zuoxingyu  阅读(599)  评论(2编辑  收藏  举报