MYSQL – ibdata와 frm 파일로 복구

By | 2011/07/27

  오늘 C드라이브에 용량이 없다는 메시지를 보았습니다. 별로 설치한 것도 없는데 그런 메시지가 나오니 황당하더군요. 그래서 살펴보니 MYSQL 작업을 함에 있어 로그 파일을 기록하도록 한 설정 때문이었습니다. 그 덕분에 엄청난 용량의 로그 파일이 만들어졌고 그것이 용량을 차지한 것입니다.

  그래서 해당 로그 파일들을 지우고 설정 파일들을 용량이 큰 하드 디스크로 옮긴 후 설정을 수정하려고 하였습니다. 옮길 때 혹시 문제가 발생할까 자르기 후 붙여넣기가 아닌 복사 후 붙여넣기를 시전(?)하였습니다.

  그러고 나서 제대로 복사가 되었다고 가정하고 기존 폴더를 삭제하였습니다. 그리고 MYSQL을 돌리려고 하니.. 해당 파일들이 사라졌습니다.

  그 파일들은 MYSQL 및 테이블 정보가 있는 곳으로 그것이 없어지니 테이블에 접근할 수가 없는 것입니다. 오직 다른 하드 디스크에 넣은 ibdata 파일만이 남은 상태였습니다.

 

  너무 황당해서 어떻게 해야할지 몰랐으나 일단 삭제된 파일을 복구하기로 하였습니다. 복구 프로그램으로 여러 가지가 있지만,  Recuva를 사용하기로 하였습니다. 딱히 이유는 없지만, SSD에서도 제대로 동작한다는 얘기를 들었기 때문입니다.

  또한 복구를 위해서는 ibdata 파일과 동시에 ib_logfile0와 ib_logfile1 파일이 필요하다고 하였습니다.

  하지만 삭제된 파일을 찾아내니 ib_logfile0와 ib_logfile1 파일은 다른 파일이 이미 그 자리에 덮어 씌워서 복구를 할 수 없다고 하였습니다. 그래서 좌절하였는데 새로운 링크를 하나 찾아냈습니다.

http://forums.mysql.com/read.php?22,47078,51428#msg-51428

  해당 글에서는 ibdata 파일과 함께 테이블 정보가 있는 frm 파일이 있으면 된다고 하더군요. 방법은 다음과 같습니다.

  1. MYSQL을 새로 설치한 후에 복구를 원하는 database을 만듭니다.
  2. 이전 폴더에 database 이름으로 되어 있는 폴더를 그대로 새로운 폴더에 집어 넣습니다.
    해당 폴더에는 해당 database의 테이블 정보가 들어 있는 frm 파일들이 있습니다.
  3. 그리고 다시 실행하면 잘 됩니다.

  너무 심플하더군요.

  그래서 일단 파일 복구 프로그램으로 frm이 들어 있는 폴더를 살린 후에 database를 만들고 덮어 씌웠습니다. 그러자 잘 동작하는 것입니다!

 

  그리고 현재 백업을 진행하고 있습니다. 백업이 잘 진행되고 안에 데이터를 잘 볼 수 있으니 다행입니다. 다만, 정말 잘 되는지는 백업 진행 상황을 보아야겠죠.

  여하튼 오늘 여러 중요한 경험을 하였습니다. 조심하는 습관을 들여놓았으나 아차하는 순간에 날아갈 수 있다는 것입니다. ‘삭제’라는 명령은 정말 조심해야 한다는 것을 다시금 깨닫습니다.

3 thoughts on “MYSQL – ibdata와 frm 파일로 복구

  1. 감자

    좋은글 보고 갑니다.
    퍼갈께요.

    문제되면 연락주세요 삭제하겠습니다.

    Reply
    1. NoSyu

      반갑습니다.
      제 블로그 라이선스는 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스입니다.
      그래서 출처 표시해주신다면 상관이 없습니다.^^
      살펴보니 주소가 트랙백 주소로 되어 있네요.OTL
      http://nosyu.pe.kr/wordpress/2622 로 고쳐주신다면 감사 드리겠습니다.
      댓글 고맙습니다.^^

      Reply

Leave a Reply