My Story... : 위치로그 : 태그 : 방명록 : 관리자 : 새글쓰기
My Story... 블로그에 오신것을 환영해요^^
그냥..
33
113
270530
'frm 파일복구'에 해당되는 글 1건
아주 가끔씩, 망할놈의 하드디스크가 망가지거나 잠시 미쳐서 rm * 요따구 명령어를 날려서 InnoDB 데이터 파일을 몽땅 날려먹는 경우가 있다.
삭제된 데이터 파일을 즉시 복구한다면 다행이지만, 무슨 일이 일어났는지 모르거나 무슨 짓을 했는지 모르고 멍때리고 있다가 하드디스크 신나게 긁어놓은 다음에 후회하면 이미 늦은 일.
백업이라도 충실히 해뒀다면 그나마 손실이 적겠지만 이도 저도 없다면 난감해진다.
날아간 데이터는 어쩔수 없다 하더라도 테이블 구조라도 살려야 다시 데이터를 삽질해서 부어넣든 말든 하지.
특히나 InnoDB인 경우는 기존의 MyISAM과 데이터 저장 구조가 틀리기 때문에 로그파일이랑 데이터 파일을 날려버리면 복구는 거의 불가능이다.
뭐 MyISAM도 MYD파일이랑 MYI 파일 날려먹음 마찬가지긴 하지만 이놈의 InnoDB는 모든 테이블들이 몽땅 같이 들어있기 때문에 문제가 더 심각하다.
하지만 frm 파일이 남아있다면 여기에 테이블 구조가 저장되어 있으니 구조만이라도 살릴수 있지 않을까 하는 생각이 들었다.
어째어째 궁리끝에 방법을 찾아냈다.
분명히 적어두지만, 날아간 데이터는 어쩔수 없고 데이터 구조만이라도 복구하기 위한 방법이다.

우선 MySQL의 데이터 디렉토리를 몽땅 다른곳으로 카피해 둔다... 고 해봤자 이미 남은건 껍데기 frm 파일들뿐.
어쨋든 다른곳으로 다 이동시켜둔다.
그리고 새로운 마음으로 MySQL을 새롭게 설치를 한다.
이왕이면 신버전으로...
MySQL 돌아가는데 이상 없다면 새로 설치하지 않아도 상관 없다.
이전 MySQL에서 로그인이나 SQL 날리는데 문제가 없었다면 복사해둔 데이터 폴더에서 MySQL 전용 폴더들을 복사해 온다.
그리고 InnoDB로 저장하지 않은 다른 데이터베이스 폴더도 모두 복사해 온다.
그러면 MySQL 유저 정보나 권한등은 그대로 유지된다.
난 FreeBSD 를 굴리고 있으니까 데이터 경로는 /var/db/mysql 이다.
이제 MySQL 로 접속을 해보자.


mysql> use test;
mysql> CREATE TABLE `test_table` (`idx` INT( 3 ) NOT NULL) ENGINE = MYISAM ;

Query OK, 0 rows affected (0.06 sec)

이렇게 아무렇게나 필드 1개짜리 테이블을 만든다.
여기서 테이블 이름은 복구하고자 하는 frm 파일과 동일한 이름을 써야 한다.
그리고 반드시 MyISAM 타입으로 만들어줘야 한다.
InnoDB로 만들었다면 테이블 삭제후 다시 만들것.
이제 복사해둔 test_table.frm 파일을 방금 생성한곳에 덮어쓴다.

그리고 다음 명령어를 입력.


mysql> repair table `test_table` use_frm;

+-------------+--------+----------+------------------------------------------------------------+
| Table         | Op     | Msg_type | Msg_text                                                   |
+-------------+--------+----------+------------------------------------------------------------+
| test.test_table| repair | note     | The storage engine for the table doesn't support repair    |
+-------------+--------+----------+------------------------------------------------------------+
1 rows in set (0.01 sec)



이제
mysql> show create table test_table;

요거 한번 날려보시라.
이전 테이블 구조가 전부 살아있을것이다.


그럼 이제부터 데이터 집어넣으러 삽질을...
이건 실수한 각자의 몫이다. T.T
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
12 29, 2010 13:57 12 29, 2010 13:57