Program2.0

Mysql DB 복구 유틸리티 myisamchk

Posted by: spaceufo on: November 19, 2008

테이블이 손상된 경우에는 다음과 같은 에러가 출력될 수 있다.

<테이블명>.frm’ is locked against change

Can’t find file <테이블명>.MYI’ (Errcode: <에러코드>)

Unexpected end of file

Record file is crashed

 

myisamchk 가 존재하는 곳 : /usr/local/mysql/bin 이고,

db가 존재하는 곳 : /usr/local/mysql/var/test(데이터베이스 이름) 이고,

복구 대상 테이블 : 깨진 테이블이 test_tbl(테이블 이름) 이라면,


myisamchk 를 다음과 같이 사용하여 복구한다.

  • putty 접속
  • cd 로 ‘db가 존재하는곳’ 으로 이동
  • /usr/local/mysql/bin/myisamchk –r test_tbl.* 이라고 친다.
  • 그러면 위 테이블의 인덱스 값을 찾고 복구 하기 시작한다.


test_tbl.* 이라고 치는 이유

db가 존재하는 곳 즉 /usr/local/mysql/var/test 에는 test_tbl라는 테이블에 관하여 통상적으로
test_tbl.frm, test_tbl.MYD, test_tbl.MYI라는 파일들이 존재한다.
그러므로 모든 복구하기 위해 .*을 사용한다.

  • *.frm :  테이블의 구조를 정의하는 파일
  • *.MYI   : 인덱스 파일
  • *.MYD : 데이터 파일


myisamchk 유틸리티에서 사용할 수 있는 옵션

  • Global 옵션 : 전반적으로 사용되는 일반적인 옵션
  • 체크 옵션 : 테이블의 상태를 체크하는데 사용하는 옵션
  • 복구 옵션 : 테이블을 복구할 때 사용하는 옵션
  • 그 밖의 옵션

 

Global 옵션은 다음과 같다.

-#, –debug=… Debug 로그를 출력한다.
-?, –help 도움말을 출력한다.
-t, –tmpdir=<경로> 임시 파일의 경로를 설정한다.
-s, –silent 침묵 모드로 작동한다. 검사도중 에러가 발생했을 때만 출력한다.
-v, –verbose 상세 정보를 출력한다.
-V, –version 버전을 출력한다.
-w, –wait 테이블에 Lock 이 걸려있으면 기다린다.

 

체크 옵션은 다음과 같다.

-c, –check 테이블에 오류가 없는지 체크한다.
-e, –extend-check 테이블에 오류가 없는지 좀 더 세밀하게 검사한다.
오류를 수정했음에도 불구하고 계속해서 오류가 발생할때  이 옵션을 부여한다.
대신 체크 속도는 느리다.
-F, –fast 테이블이 제대로 닫혀있는지 체크한다.
-C, –check-only-changed 마지막으로 체크한 이후로 변경된 테이블만 체크한다.
-f, –force 체크중 에러가 발견되면 에러 테이블을 표시해놓고 바로 복구를 시작한다.
-i, –information 체크된 테이블의 정보를 출력한다.
-m, –medium-check –extend-check 체크보다 빠르게 체크한다. 일반적으로 많이 사용한다.
-U, –update-state 에러가 발견된 테이블을 표시해둔다.
-T, –read-only 에러가 발견되어도 테이블에 표시해두지 않는다.

 

복구 옵션은 다음과 같다.

-B, –backup .MYD 파일의 백업 파일을 ‘<파일명>-<생성시간>.BAK’ 라는 이름으로 만든다.
–correct-checksum 테이블의 checksum 정보를 바로 잡는다.
-D, –data-file-length=<크기> 복구후 다시 생성할 데이터 파일의 최대 크기를 지정한다.
-e, –extend-check 로우 단위로 세밀하게 복구한다. 따라서 많을 쓰레기 값들이  생길 수 있다.
파일이 완전히 손상된 경우에만 이 옵션을 사용하도록 한다.
-f, –force 기존의 임시 파일을 덮어쓴다.
-r, –recover 거의 모든 것을 복구한다.
-n, –sort-recover 임시 파일이 매우 크더라도 강제적으로 정렬해서 복구한다.
-o, –safe-recover 예전 버전의 복구 방법을 사용하여 복구한다.
-r 보다는 느리지만 -r 옵션에서 복구할 수 없는 몇가지 것들을 복구할 수 있다.
–character-sets-dir=… 문자셋 디렉토리를 지정한다.
–set-characater-set=<문자셋> 문자셋을 지정한다.
-q, –quick 데이터 파일(.MYD) 를 제외하고 빠르게 복구한다.

 

그 밖의 옵션은 다음과 같다.

-a, –analyze 키의 분포를 분석한다. 몇몇 JOIN 을 빠르게 할 것이다.
-d, –description 테이블의 정보를 출력한다.
-S, –sort-index 인덱스 블록을 정렬한다. 다음 값 읽기(read-next) 의 속도를 향상시킨다.
-R, –sort-records=<인덱스 번호> 인덱에 따라 로우를 정렬한다.
SELECT 와 ORDER BY 속도를 향상 시킬 수 있다.
<인덱스 번호> 는 SHOW INDEX FROM <테이블명> 으로 알 수 있다.

*좀 더 자세한 테이블의 복구 과정 : http://metalbear.egloos.com/3595699

Leave a Reply

Spaceufo’s Twitter

Social code

Site Meter
Join My Community at MyBloglog!Add to Technorati Favoritesfree web stats Blog Ratings
My BlogCatalog BlogRank
마가린 바르기 bookmarkr.net metags WZD.com 네이버에 북마크 다음에 북마크 HanRSS에 북마크하기 이올린에 북마크하기 Pumfit에 글 올리기 del.icio.us에 북마크하기
Bookmark and Share