티스토리 뷰
[MYSQL] Error: Table 'xxx.MYI' is marked as crashed and should be repaired.
SUPERMANGS 2014. 4. 10. 15:34[TIMESTAMP: 2014-04-10]
조금 지난 일이지만 국립공원 내 Mysql(4.x 버전) database의 table이 깨진 적이 있었다. 그때 복구 작업을 하면서 정리를 했어야 했는데.. 문득 생각 난김에 적는다.
당시 ASP 웹 화면에서 출력된 오류메세지는 [Table 'xxx.MYI' is marked as crashed and should be repaired.] 형태였으며, 테이블 파일 확장자명 까지 출력이 됐던걸로 기억한다.
..같은 환경을 구성해서 하고싶지만 귀차니즘으로 인해 현재 설치된 5.0.0-alpha 버전을 바탕으로 작성한다.
일단 복구는 쉘(Shell)에서 복구하는 방법과 mysql\bin 폴더 내의 myisamchk.exe 파일을 사용하여 복구하는 방법이 있다.
1. 쉘(Shell)을 사용한 복구 방법
1.1 먼저 mysql 쉘로 진입한다.
1.2 데이터베이스 확인 및 깨진 테이블이 있는 데이터베이스 접근
1.3 전체 테이블 확인
1.4 깨진 테이블 분석/체크
1.5 깨진 테이블 복구
# 현재 테이블을 고의적으로 crash 하기 힘들기 때문에 정상적인 테이블을 가지고 명령을 사용하는 순서만 포스팅함...ㅠ
문제가 발생했을 때 바로 스샷을 찍어놨어야했는데...복구하는데 정신팔려서 못했다...
2. myisamchk.exe 를 사용하는 방법
2.1 일단 myisamchk.exe의 옵션을 확인하자
2.2 명령창에서 mysql\bin 폴더로 이동해서 myisamchk를 입력하면 요딴 옵션들이 나온다.
복구관련 옵션을 보면
# -r -o로 복구가 안되면다 -f 옵션을 이용한다.
-f, --force Overwrite old temporary files.
#복구
-r, --recover Can fix almost anything except unique keys that aren't unique.
#안전하게 복구
-o, --safe-recover Uses old recovery method; Slower than '-r' but can
handle a couple of cases where '-r' reports that it
can't fix the data file.
#데이터 정렬 및 속도 증가 -R1 저도 주면 될듯 싶네요
-R, --sort-records=#
Sort records according to an index. This makes your
data much more localized and may speed up things
일반적으로 -r 을 기본으로 사용하며 대상 화일은 * 확장자를 잡으면 된다.
2.3그럼 복구를 해보자.
... 뭐 대충 요딴 메세지를 떨궈준다...일단 정상적인 테이블을 상대로 명령을 내렸기 때문에...복구가 되었다는 내용은 안보인다.
네이버나 구글 검색해보니.. 복구작업이 정상적으로 진행되면....
myisamchk error 'systeminfo.MYD' is not a MyISAM-table
---------
- recovering (with sort) MyISAM-table 'systeminfo.MYI'
Data records 6
- Fixing index 1
Data records 4
---------
위와 같은 로그를 출력해준다고 한다.. 얼핏 기억이 나는듯 하면서 안난다.
그리고 구버전인 경우 isamchk 명령어를 이용 복구 가능하며, 위 복구 작업을 할시엔 서비스를 중지하고 하는편이 좋겠지??
뭐 대충 요딴식으로 복구 작업을 진행하면 된다. 안되면 말고.....