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

MySQL강좌36편:데이터베이스 테이블파일 복구를 위한 myisamchk 개론

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

MySQL강좌36:데이터베이스 테이블파일 복구를 위한 myisamchk 개론

 

앞서 말씀했듯이 리눅스에서 대표적으로 사용되는 데이터베이스는 누가 뭐라해도 MYSQL이다. MYSQL이 사용되고있는 리눅스 서버를 관리하는 서버관리자들에게 MYSQL데이터의 무결성을 검사하고 유지보장하는 것은 무엇보다 중요하다고 할 수 있다.  MYSQL에 존재하는 실제 테이블의 데이터가 잘못되었을 경우에 이를 온전하게 복구하는 것 또한 매우 중요하다고 할 수 있다.  따라서 이번 장에서는 MYSQL의 깨지거나 잘못된 테이블파일을 복구하는 myisamchk유틸리티의 사용법과 실제 복구예를 알아보도록 하겠다.

 

먼저 테이블복구유틸리티인 myisamchk의 사용법을 정확하게 이해하려면 MYSQL의 실제데이터가 저장되는 데이터파일에 대해서 알아야한다.

 

앞서 말한바와같이 MYSQL을 소스컴파일하여 설치할 경우에 대부분의 경우 설치위치는 /usr/local/mysql/이다. 그리고 MYSQL의 실제데이터가 저장되는 위치는 /usr/local/mysql/data/이다.

 

[참고] MYSQL 데이터저장 디렉토리명에 대하여

 

혹자들은 /usr/local/mysql/var/로 사용하는 경우가 있기는 하지만 이는 MYSQL의 설치시 ./configure를 할 때에 “--localstatedir=”옵션에서 지정한 경로에 생성되는 것이다. 이점만 알고있다면 data로 사용하든 var로 사용하든 무관할 것이다.  또한 MYSQL의 설치메뉴얼에서는 var로 사용하는 것을 기본으로 하고 있지만 필자는 오래전부터 data라는 이름으로 사용하고있다.

 

/usr/local/mysql/data/디렉토리를 잘 살펴보면 MYSQL에 설치되어있는 데이터베이스명들과 동일한 이름의 디렉토리가 각각 존재한다. 예를들어 papa라는 데이터베이스가 존재한다면 /usr/local/mysql/data/papa라는 디렉토리가 존재하고 이 디렉토리에는 papa데이터베이스가 사용하는 모든 데이터들이 저장되어있다.

 

그리고 이 디렉토리내에는 다음과 같은 형식의 파일들이 존재하고있다. 즉 테이블 하나에 아래의 파일형식을 가진 파일이 3개씩 생성되어 그 테이블의 데이터를 실제로 저장하는 용도로 사용된다.

 

*.MYD : 해당테이블의 데이터가 저장되는 테이블 데이터파일이다. 

*.MYI : 해당테이블의 인덱스정보가 저장되는 테이블 인덱스파일이다.

*.frm : 해당테이블의 테이블구조가 저장되는 테이블스키마파일이다.

 

결론적으로 myisamchk MYSQL복구를 하기 위해서는 위 3개의 파일형식과 용도를 이해해야 한다. MYSQL 데이터베이스에서 사용되는 테이블 하나에 위와 같은 3개의 파일에 실제데이터가 저장되며 이 3개의 파일의 용도를 정확하게 알아두는 것이 매우 중요하다는 것이다.

 

예를들어 papa라는 데이터베이스의 Demo_Domain이라는 테이블이 있다면 /usr/local/mysql/data/papa/디렉토리에는 다음과 같은 3개의 파일이 존재할 것이다.

 

-rw-rw----    1 mysql    mysql        2652  2 12 23:20 Demo_Domain.MYD

-rw-rw----    1 mysql    mysql        2048  2 12 23:23 Demo_Domain.MYI

-rw-rw----    1 mysql    mysql        8940  1  6 11:27 Demo_Domain.frm

 

즉 이들 3개 파일의 정확한 용도를 설명하면 다음과 같다.

 

Demo_Domain.MYD : Demo_Domain테이블의 실제데이터를 저장하는 데이터파일.

Demo_Domain.MYI : Demo_Domain테이블의 인덱스 정보를 저장하는 인텍스파일.

Demo_Domain.frm : Demo_Domain테이블의 테이블 구조가 저장된 테이블 스키마파일.

 

필자가 위의 설명을 한 이유는 myisamchk로 테이블을 복구하려면 방금 설명드린 내용을 정확하게 알고있어야만 하기 때문이다.

 

물론 myisamchk를 이용하여 그 사용법만을 익혀서 사용만 하면 되지않나라고 말하는 분들이 있겠지만 필자의 생각은 조금 다르다.

 

어떤 명령어나 유틸리티라도 사용을 할 때에는 그 명령어가 어떤 과정을 거쳐서 어떤 작업을 하는가에 대한 내용을 정확하게 이해해야만 그 명령어의 실무활용과 확장사용, 그리고 정확한 사용과 융통성있는 사용이 가능하기 때문이다. 어떤 공부를 하든 마찬가지겠지만 특히 실무에서 서버를 관리하는 분들이 정확하게 알지 못한 상태에서 그 사용법만을 익혀서 사용한다면 자칫 잘못되었을 경우에 데이터를 날려버리거나 복구 불가능등과 같은 상황을 초래할 수도 있기 때문이다.  필자의 잔소리가 또 시작되었다라고 생각하지 말고  아까운 지면을 할애하여 필자가 왜 이런 말씀을 드리는가를 생각해주면 좋겠다.

 

, 그럼 이제 myisamchk를 사용하는 방법에 대해서 설명하겠다.

 

우선, myisamchk isamchk는 같은 유틸리티라고 생각하면 된다. 그 사용하는 형식과 방법은 모두 동일하며 단지 isamchk ISAM테이블파일을 대상으로 수정 및 복구하는 용도로 사용되고, myisamchk MYISAM테이블파일을 대상으로 수정 및 복구하는 용도로 사용된다. 결국 데이터베이스론적으로 표현해본다면 myisamchk isamchk의 사용은 “INDEXED SEQUENCIAL ACCESS MOTHOD(ISAM)”파일, 인덱스화된 순차파일로서 사용되는 파일의 형식이 어떤 것인가에 따라서 달라진다는 의미이다.

 

좀 어렵게 느껴졌는지 모르겠다. 좀 쉽게 표현해본다면 복구대상 인덱스 테이블파일 (ISAM,  Indexed Sequencial Access Mothod) *.ISM파일형식이면 isamchk를 사용하여 복구하고,  복구대상 인덱스 테이블파일이 *.MYI파일형식이면 myisamchk를 사용하여 복구하면 된다.

 

 

사용형식 : isamchk [옵션] 점검복구대상테이블인덱스파일(*.ISM)

 

사용형식 : myisamchk [옵션] 점검복구대상테이블인덱스파일(*.MYI)

 

, 앞서 말하였듯이 한가지 주의할 것은 myisamchk는 복구 대상파일은 반드시 MYSQL의 인덱스파일이라는 것이다. *.ISM파일(isamchk)이나 *.MYI파일(myisamchk)이 그 대상이될 뿐 다른 파일은 그 대상의 되지 못한다는 점 꼭 기억하기 바란다.

 

이쯤되면 MYSQL의 테이블인덱스파일 복구유틸리티인 myisamchk에 대해 필자가 전달하려고하는 알짜내용들이 모두 여러분들에게 잘 전달 되었으리라 믿겠다.

 

[주의사항]  반드시 MYSQL종료 후에 myisamchk 사용

 

myisamchk를 사용하실 때에는 반드시 MYSQL을 종료한 후에 사용하기 바란다.  만약 MYSQL이 실행되어있는 도중에 myisamchk를 사용한다면 복구도중 데이터의 추가/삭제/수정이 될 수 있으므로 오히려 더 심각한 상황을 유발하는 원인이 될 수도 있기 때문이다. 복구유틸리티인 myisamchk의 설명보다 필자는 MYSQL 종료 후에 사용하실 것을 더욱 강조하고 있다.

 

 

[주의사항]  myisamchk의 점검모드와 복구모드

myisamchk로 테이블파일을 점검하거나 복구할 때에 사용할 수 있는 두가지 모드가 있다. 첫번째는 점검(check)모드로서 점검과 에러발견시 보고만 할 뿐 어떠한 수정작업도 하지않는 모드이다. 두번째는 복구모드로서 테이블파일을 직접 수정하여 에러부분을 수정하는 작업이다. 이 두가지의 구분은 다음과 같이 하자.  복구모드는 myisamchk사용시에 -r또는 -o옵션을 사용할 때에만 적용이 되는 것이기 때문에 -r또는 -o옵션이 사용되지 않는 경우에는 모두 점검(check)모드라고 보면된다. myisamchk의 설명에서  이부분을 염두에 두고 확인하기 바란다.

 

 

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,017 명
  • 현재 강좌수 :  35,689 개
  • 현재 접속자 :  230 명