Web_developing/Mysql 2006/09/08 15:56
myisamchk 이란?
- DB 테이블에대한 오류 검사 및 오류 복구 유틸리티 이다
- 버전 3.22.x : isamchk 유틸리티 사용
3.23.x : myisamchk 유틸리티 사용
[ myisamchk 사용전 주의사항 ]
- mysql 데몬을 stop 시킨후 이 유틸리티를 사용해야함.
- mysql 데몬을 중지시킬수 없는 사항이라면 검사할 테이블에대한 rock을 걸고
검사를 수행하여야만 검사도중에 발생할수있는 오류를 막을수있다.
- 모든작업을 항상 백업을 한후 작성을 수행하는것이 좋을것이다.
[ myisamchk 사용법 및 옵션 ]
- 해당 테이블이있는 디렉토리로 이동 ( 보통 /usr/local/mysql/var 밑에 위치함 )
1.일반적인 검사
# myisamchk [table 명]
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
==> 에러메시지가 없으면 테이블에 오류가 없다는것이다.
2. 옵션
# myisamchk -s,--silent [table 명]
-> 에러만 출력
# myisamchk -v,--verbose [table 명]
-> -s 옵션보다 많은 정보를 출력
# myisamchk -V
-> myisamchk 버젼을 표시
3. 체크 옵션
# myisamchk -c,--check [table 명]
-> 테이블의 에러를 check 함
# myisamchk -e,--extend-check [table 명]
테이블을 좀더 세밀하게 check 함, 일반적인 방법으로 error를 찾을수없을 경우 사용
# myisamchk -F,--fast [table 명]
-> 빠른게 테이블 check 한다.정교한 체크는 하지않느다.
# myisamchk -C,--check-only-changed [table 명]
-> 테이블을 check 하고,테이블을 check 이후의 상태로 변경한다.
# myisamchk -f,--force [table 명]
-> 테이블에 error에 있을경우 강재로 check 한다.
# myisamchk -i,--information [table 명]
-> check한 결과의 정보를 통계화하여 보여준다.
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
Record blocks: 0 Delete blocks: 0
Record data: 0 Deleted data: 0
Lost space: 0 Linkdata: 0
User time 0.01, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 26, Physical pagefaults 186, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
#myisamchk -m,--medium-check [table 명]
-> extend-check 옵션보다 check 속도가빠르며,99.9 % 의 에러을 찾을수있다.
4.Repair 옵션
#myisamchk -o -B,--backup [table 명]
-> MYD파일을 백업한다. 형식은 [filename-time.BAK]의 파일이 생긴다.
# myisamchk -e,--extend-check [table 명]
-> 세부적인 파일까지 복구를해준다.일반적으로 아주 하찮은 에러까지 찾을수
있다.하지만 자포자기의 상태가 아니고서는 이옵션을 사용하지 않는게 좋다.
# myisamchk -f,-force [table 명]
-> 이전것의 temporary file을 덥어쒸운다.
# myisamchk -l,--no-symlinks [table 명]
-> 심복릭 링크를 따르지않겠다는 옵션이다. 일반적으로 myisamchk 는symlink points를 복구한다.
# myisamchk -r,--recover [table 명]
-> unique key를 제외한 대부분를 복구한다.
# myisamchk -n,--sort-recover [table 명]
-> sorting하면서 테이블을 복구한다. 심지어 temporary 파일과 같은 아주 큰
파일역시 sorting하면서 복구한다.
# myisamchk -o,--safe-recover [table 명]
-> -r 옵션보다 느리게 복구한다.그러나 좀더 섬세한 복구를 지원한다.
# myisamchk -q,--quick [table 명]
-> 테이터 파일의 수정없이 복구한다.
5. 기타 옵션
# myisamchk -d,--description [table 명]
-> 테이블에 대한 정보를 출력한다.
# myisamchk -S,--sort-index [table 명]
-> index 블록을 sort한다.
# myisamchk -R[index번호],--sort-records [table 명]
-> index 번호를 기준으로 인덱스를 정렬해준다.
6.검사중 아래의 메시지가출력되면 해당테이블을 사용중이라는 의미이므로 테이블에 LOCK을 걸든가 데몬을 죽이고 나서 검사 및 복구를해야함.
myisamchk: warning: 1 clients is using or hasn''t closed the table
properly
7. LOCK 걸기
myisamchk 는 테이블에대한 read 만 할수있으면 되기때문데 read 를 제외한
모든것에 lock을 걸면된다.
mysql> lock tables [table 명] READ ;
mysql> flush tables ;
flush tables 는 mysql이 테이블의 내용을 메모리에만 보관하고 실제 테이
블파일에 기록을하지 않았을경우 실제 테이블파일에 기록하라는 의미이다
8.LOCK 풀기
mysql> unlock talbe;
9.Myisamchk 로 복구를 위한 LOCK 걸기
서비스를 죽이지않고 복구를 해야할경우는 write lock를 걸어주면된다.
복구는 write 를 해야하기때문에 write lock를 걸어줘야한다.
mysql>lock tables [table명] write;
mysql>flush tables;
10.LOCK 풀기
mysql> unlock table;
- DB 테이블에대한 오류 검사 및 오류 복구 유틸리티 이다
- 버전 3.22.x : isamchk 유틸리티 사용
3.23.x : myisamchk 유틸리티 사용
[ myisamchk 사용전 주의사항 ]
- mysql 데몬을 stop 시킨후 이 유틸리티를 사용해야함.
- mysql 데몬을 중지시킬수 없는 사항이라면 검사할 테이블에대한 rock을 걸고
검사를 수행하여야만 검사도중에 발생할수있는 오류를 막을수있다.
- 모든작업을 항상 백업을 한후 작성을 수행하는것이 좋을것이다.
[ myisamchk 사용법 및 옵션 ]
- 해당 테이블이있는 디렉토리로 이동 ( 보통 /usr/local/mysql/var 밑에 위치함 )
1.일반적인 검사
# myisamchk [table 명]
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
==> 에러메시지가 없으면 테이블에 오류가 없다는것이다.
2. 옵션
# myisamchk -s,--silent [table 명]
-> 에러만 출력
# myisamchk -v,--verbose [table 명]
-> -s 옵션보다 많은 정보를 출력
# myisamchk -V
-> myisamchk 버젼을 표시
3. 체크 옵션
# myisamchk -c,--check [table 명]
-> 테이블의 에러를 check 함
# myisamchk -e,--extend-check [table 명]
테이블을 좀더 세밀하게 check 함, 일반적인 방법으로 error를 찾을수없을 경우 사용
# myisamchk -F,--fast [table 명]
-> 빠른게 테이블 check 한다.정교한 체크는 하지않느다.
# myisamchk -C,--check-only-changed [table 명]
-> 테이블을 check 하고,테이블을 check 이후의 상태로 변경한다.
# myisamchk -f,--force [table 명]
-> 테이블에 error에 있을경우 강재로 check 한다.
# myisamchk -i,--information [table 명]
-> check한 결과의 정보를 통계화하여 보여준다.
예)
Checking MyISAM file: zz_news.MYI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
Record blocks: 0 Delete blocks: 0
Record data: 0 Deleted data: 0
Lost space: 0 Linkdata: 0
User time 0.01, System time 0.00
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 26, Physical pagefaults 186, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
#myisamchk -m,--medium-check [table 명]
-> extend-check 옵션보다 check 속도가빠르며,99.9 % 의 에러을 찾을수있다.
4.Repair 옵션
#myisamchk -o -B,--backup [table 명]
-> MYD파일을 백업한다. 형식은 [filename-time.BAK]의 파일이 생긴다.
# myisamchk -e,--extend-check [table 명]
-> 세부적인 파일까지 복구를해준다.일반적으로 아주 하찮은 에러까지 찾을수
있다.하지만 자포자기의 상태가 아니고서는 이옵션을 사용하지 않는게 좋다.
# myisamchk -f,-force [table 명]
-> 이전것의 temporary file을 덥어쒸운다.
# myisamchk -l,--no-symlinks [table 명]
-> 심복릭 링크를 따르지않겠다는 옵션이다. 일반적으로 myisamchk 는symlink points를 복구한다.
# myisamchk -r,--recover [table 명]
-> unique key를 제외한 대부분를 복구한다.
# myisamchk -n,--sort-recover [table 명]
-> sorting하면서 테이블을 복구한다. 심지어 temporary 파일과 같은 아주 큰
파일역시 sorting하면서 복구한다.
# myisamchk -o,--safe-recover [table 명]
-> -r 옵션보다 느리게 복구한다.그러나 좀더 섬세한 복구를 지원한다.
# myisamchk -q,--quick [table 명]
-> 테이터 파일의 수정없이 복구한다.
5. 기타 옵션
# myisamchk -d,--description [table 명]
-> 테이블에 대한 정보를 출력한다.
# myisamchk -S,--sort-index [table 명]
-> index 블록을 sort한다.
# myisamchk -R[index번호],--sort-records [table 명]
-> index 번호를 기준으로 인덱스를 정렬해준다.
6.검사중 아래의 메시지가출력되면 해당테이블을 사용중이라는 의미이므로 테이블에 LOCK을 걸든가 데몬을 죽이고 나서 검사 및 복구를해야함.
myisamchk: warning: 1 clients is using or hasn''t closed the table
properly
7. LOCK 걸기
myisamchk 는 테이블에대한 read 만 할수있으면 되기때문데 read 를 제외한
모든것에 lock을 걸면된다.
mysql> lock tables [table 명] READ ;
mysql> flush tables ;
flush tables 는 mysql이 테이블의 내용을 메모리에만 보관하고 실제 테이
블파일에 기록을하지 않았을경우 실제 테이블파일에 기록하라는 의미이다
8.LOCK 풀기
mysql> unlock talbe;
9.Myisamchk 로 복구를 위한 LOCK 걸기
서비스를 죽이지않고 복구를 해야할경우는 write lock를 걸어주면된다.
복구는 write 를 해야하기때문에 write lock를 걸어줘야한다.
mysql>lock tables [table명] write;
mysql>flush tables;
10.LOCK 풀기
mysql> unlock table;
이 글에는 트랙백을 보낼 수 없습니다
0