본문 바로가기
DB/MySQL

MYSQL DB복구강좌myisamchk 1편

by 가므자 2012. 3. 27.

MySQL의 깨진 테이블파일 복구를 위한 myisamchk(isamchk) 개론

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

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

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

[참고사항]

혹자들은 /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(isamchk) 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(isamchk)로 테이블을 복구하려면 방금 설명드린 내용을 정확하게 알고 있어야만 하기 때문입니다.

물론 myisamchk(isamchk)를 이용하여 그 사용법만을 익혀서 사용만 하면 되지않나라고 말씀하시는 분들이 계시겠지만 필자의 생각은 조금 다릅니다.

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

, 그럼 이제 myisamchk/isamchk 를 사용하는 방법에 대해서 설명을 드리겠습니다.

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

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

조금 더 쉽게 설명하면 MYSQL 3.23버전 이전에는 MYSQL의 인덱스파일로서 *.ISM파일형식을 사용하였고 MYSQL 3.23버전 이후에는 *.MYI파일형식을 현재까지 사용하고 있습니다. 따라서 사용하시는 MYSQL의 버전이 3.23이전버전이면 isamchk로 복구하시고 3.23이후 버전이면 myisamchk를 사용하여 복구하시면 됩니다.

좀 더 쉽게 결론적으로 말씀을 드린다면, 현재 대부분의 MYSQL버전은 3.23이후 버전이므로 myisamchk를 이용하시면 됩니다. (뭔가 정확하고 쉽게 표현하고 명확하게 이해시키려는 필자의 의도와 배려가 거의 하늘을 찌르고 있습니다.)

명령어위치 : /usr/local/mysql/bin/isamchk

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

명령어위치 : /usr/local/mysql/bin/myisamchk

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

, 한가지 주의하실 것은 myisamchk isamchk든 복구 대상파일은 반드시 MYSQL의 인덱스파일이라는 것입니다. , *.ISM파일(isamchk)이나 *.MYI파일(myisamchk)파일이 그 대상이될 뿐 다른 파일은 그 대상의 되지 못한다는 점 꼭 기억하시기 바랍니다.

그리고 myisamchk isamchk의 사용법에 있어서 사용법과 옵션들은 모두 동일하므로 이제부터는 myisamchk로 설명을 드리도록 하겠습니다.

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

[주의사항] 반드시 MYSQL종료 후에 myisamchk(isamchk) 사용하십시요.

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

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

myisamchk로 테이블파일을 점검하거나 복구할 때에 사용할 수 있는 두가지 모드가 있습니다. 첫번째는 점검(check)모드로서 점검과 에러발견시 보고만 할 뿐 어떠한 수정작업도 하지않는 모드입니다. 두번째는 복구모드로서 테이블파일을 직접 수정하여 에러부분을 수정하는 작업입니다.

이 두가지의 구분은 다음과 같이 하십시요. 복구모드는 myisamchk사용시에 -r또는 -o옵션을 사용할 때에만 적용이 되는 것이기 때문에 -r또는 -o옵션이 사용되지 않는 경우에는 모두 점검(check)모드라고 보시면 됩니다. myisamchk의 설명에서 이부분을 염두에 두고 확인하시기 바랍니다.

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

'DB > MySQL' 카테고리의 다른 글

MYSQL DB복구강좌myisamchk 3편  (0) 2012.03.27
MYSQL DB복구강좌myisamchk 2편  (0) 2012.03.27
MySQL 스토리지 엔진 MyISAM과 InnoDB의 차이점  (0) 2012.03.27
Mysql 유틸리티  (0) 2012.03.27
중복 데이터의 포함 설계 지침  (0) 2012.03.27

댓글