MySQL 깨진 테이블 복구 - is marked as crashed and should be repaired
메일 서버 운영중 갑자기 발생하는 "is marked as crashed ..." 형태의 DB 에러에 대한 대응 가이드입니다.
웹메일 로그인이나 기타 화면에서 아래와 같은 에러가 나올 경우, 디비 테이블이 깨져 복구가 필요한 상황입니다.
[nativecode=145 ** Table './nmail2/nmail_mail_file_1_0000' is marked as crashed and should be repaired]
[nativecode=144 ** Table './nmail2/nmail_mail_file_1_0001' is marked as crashed and last (automatic?) repair failed]
테이블이 깨지는 원인은 일반적으로 다음중 하나입니다.
- 하드디스크 용량 부족
- 서버의 예기치 못한 다운
- 하드디스크 오류
- 기타 MySQL 자체의 일시적인 오류 등
테이블 복구시 '임시 테이블'을 생성하므로, 서버 디스크 여유 공간이 충분한지 확인이 필요합니다.
디스크 용량이 부족할 경우, 복구중 에러와 함께 멈출 수 있습니다.
경로 주의)
메뉴얼에 안내된 엔메일 설치 경로와 MySQL 경로는 일반적인 경우입니다.
서버에 따라 경로가 다를 수 있으니 유의하셔야 합니다.
1-1. 자동복구방법
복구전에 디비 데이타가 저장된 파티션의 하드용량이 부족하지 않은지 반드시 확인해보셔야 합니다.
그리고 엔메일 자체의 복구툴을 에러가 나지 않을 때까지 몇차례 반복 실행해보시면 됩니다.
Linux) php /home/nmail2/tools/mysql_repair.php
Windows) C:\NmailPHP\tools\mysql_repair.bat
1-2. 수동복구방법 (자동복구로 해결되지 않을때, Linux/Unix 기준)
MySQL 을 종료 후 myisamchk 로 직접 수동으로 복구하는 방법이 있습니다.
이 경우 해당 테이블뿐만 아니라 엔메일내의 전체 테이블을 점검해 주시는게 좋습니다.
주의) 서버에 따라 MySQL 경로가 다르니 미리 확인 후 실행하시면 됩니다.
복구 프로그램 경로 확인)
myisamchk
/usr/local/mysql/bin/myisamchk
디비 저장 디렉토리 경로 확인)
/var/lib/mysql/nmail2
/usr/local/mysql/data/nmail2/
nmail2 디비내의 모든 테이블 복구 예제)
# 정확한 복구를 위해 mysql 을 잠시 중단 시켜야 합니다.
# 실행, 종료 스크립트인 /etc/init.d/mysql 은 서버에 따라 다를 수 있습니다.
/etc/init.d/mysql stop
myisamchk -r /var/lib/mysql/nmail2/*.MYI
/etc/init.d/mysql start
2. 누락된 메일들의 디비동기화
디비가 깨진 경우 웹메일에서는 보여지지 않았더라도 실제 메일서버에는 그대로 저장되어 있습니다.
따라서 디비 복구가 완료된 상태에서 아래처럼 디비동기화를 실행해주시면,
디비가 깨진 동안 웹메일에서 보여지지 않던 메일들이 정상적으로 보여지게 됩니다.
Linux) php /home/nmail2/tools/mail_box_dbsync.php ALL
Windows) C:\NmailPHP\tools\mail_box_dbsync_all.bat
이제 모든 작업이 완료되었습니다.
웹메일에 접속하셔서 에러유무를 확인해보시면 됩니다.
이전 글 | 아웃룩 연결 오류 - 0x800CCC0D , 0x800CCC79 | PASSKOREA | 2009.07.16 |
---|---|---|---|
다음 글 | Windows 서버에서의 메일서버 시작불가 문제 (PC 최적화 프로그램 연관) | PASSKOREA | 2009.03.02 |