강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

MySQL강좌44편: myisamchk로 테이블파일 복구가 되지 않을 경우 최후의 방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

MySQL강좌44: myisamchk로 테이블파일 복구가 되지 않을 경우 최후의 방법

 

지금까지 myisamchk복구유틸리티를 이용하여 깨지거나 오류난 MYSQL 테이블파일을 복구하는 방법에 대해서 알아보았다. 하지만 실무적인 측면에서 본다면 myisamchk유틸리티로 깨진 테이블을 100%복구하기란 거의 어렵다고 할 수 있다. 이런 경우, myisamchk isamchk로 복구되지 않을 경우에 직접 서버관리자가 복구를 수작업으로 수행해줘야 한다.

 

물론, 데이터베이스의 가장 최근 백업된 파일들로 복구하는 것이 가장 안전하고 가장 현명한 복구방법이겠지만 여기서 염두에 두는 복구방법이란 백업이 되어있지않은 경우를 가정한  것이다.

 

 

테이블파일 중 테이블구조파일(*.FRM파일)로 인해 복구가 불가능할 때에

 

만약 myisamchk로 테이블파일을 복구할 때에 *.frm파일로 인해 복구가 되지않을 경우에는 복사해둔 *.frm파일이 있다면 이를 원래위치에 복사하면 되겠지만, 만약 복사해둔 *.frm파일이 없다면 테이블구조를 다시 만들어주면 된다.  *.frm파일은 테이블의 스키마(테이블구조)를 저장하고있는 파일이므로 최악의 경우 MYSQL에 직접 접속하여 “create table”문으로 테이블구조를 다시 만들어주면 된다.

 

이때 주의 할 것은 “create table”문으로 테이블구조를 재생성하기 전에 반드시 기존의 *.MYI파일과 *.MYD파일의 원본은 백업을 해두셔야한다는 점이다. 혹시 잘못되었을 경우를 대비하여 실제데이터가 저장된 *.MYD와 테이블 인덱스정보가 저장된 *.MYI파일의 원본이라도 그대로 보존되어야하기 때문이다.

 

이와같이 *.FRM파일을 재생성하였다면 다시 myisamchk로 복구시도해보기 바란다. 만약 *.FRM이 원인이 되어 복구되지 않았을 경우에는 이와 같은 방법으로 거의 99%는 복구가 가능하다.

 

 

테이블파일 중 테이블 인덱스파일(*.MYI파일)로 인해 복구가 불가능할 때에

 

만약 myisamchk로 테이블파일을 복구할 때에 *.MYI파일로 인하여 복구가 안될 때에 복사해둔 *.MYI파일이 있다면 이를 원래 위치로 복사하면 된다. 하지만 복사해 둔 파일이 없을 경우에는 다음과 같이하기 바란다.

 

주의할 것은 작업하기 전에 반드시 원본 *.MYD *.FRM파일은 백업해두기 바란다.

 

그 다음  MYSQL에 접속하여 “delete from 테이블명과 같은 SQL명령문으로 해당 테이블의 모든 레코드(데이터)들을 삭제한다. 그런 다음 MYSQL을 빠져 나온다. 그리고 MYSQL을 종료하고 백업해둔 *.MYD *.FRM파일을 다시 원래 위치로 복사한다.  그리고 myisamchk로 다시 복구시도를 한다.

 

이와같이 *.MYI파일의 원인으로 복구되지 않을 경우에 위와 같은 방법을 사용하면 거의 80%정도는 복구가 될 수 있다.

 

하지만 거듭 강조하는 것은 myisamchk를 사용할 때에는 반드시 MYSQL을 종료한 후에 사용하라는 점이다. 만약 MYSQL이 실행되어있는 도중에 myisamchk를 사용하신다면 복구도중 데이터의 추가/삭제/수정이 될 수 있으므로 오히려 더 심각한 에러를 유발하는 원인이 될 수 있기 때문이다.

 

참고로 여기서 설명드린 것은 myisamchk라는 MYSQL유틸리티를 이용한 것이지만 MYSQL에 접속된 상태에서도 myisamchk와 동일한 역할과 기능을 하는 "repair table"이라는 문이 있다. MYSQL에 접속된 상태에서 "mysql>repair table 테이블명"이라고 하면 지금까지 설명드린 myisamchk와 동일한 방법으로 깨진 테이블을 점검하고 복구할 수 있다. 참고로 알아두기 바란다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,787 개
  • 현재 접속자 :  274 명