[MySQL] MyISAM 방식의 테이블 복원하기

MySQL을 운영하다 보면 겪는 테이블 손상 혹은 크래시 문제를 결국에는 겪게 되는것 같습니다. 이것을 피하기 위해 잦은 백업도 필요할 것이고 문제 발생시에 복구 절차에 대해서도 항상 고민해 두어야 할것 같습니다. DB 복구는 DB운영시와 DB비운영시 두가지를 생각해 볼 수 있습니다.

1. MySQL 구동시

MySQL을 구동중이라면 MySQL에 접속하여 직접적으로 쿼리를 날리면 됩니다.
[code]CHECK TABLE {TABLE NAME}[/code]
위와같은 쿼리를 사용하면 테이블의 상태가 나옵니다. 보통 Status OK가 나오게 되며 큰 문제가 아닐 경우 Warning이 뜹니다. 하지만 문제가 심각할 경우 Error가 발생하게 됩니다. 이 Error가 발생한다면 꼭 문제를 해결하셔야 합니다.
[code]REPAIR TABLE {TABLE NAME}[/code]
위의 쿼리문으로 대부분의 문제는 해결될 수 있습니다. 복구하는김에 다음의 두가지 명령을 추가로 사용하여 테이블 상태를 정리해 주도록 합시다.
[code]OPTIMIZE TABLE {TABLE NAME}
ANALYZE TABLE {TABLE NAME}[/code]
이렇게 MySQL구동시에 작업을 해야 한다면 해당 테이블의 접근이 철저하게 봉쇄된 상태에서 해야 합니다. 될수 있으면 운영중인 서비스는 내리시길 권합니다.

2. MySQL 비구동시

MySQL이 비구동중이라면, 다른말로 MySQL이 구동중이 아니어야만 할 수 있는 복구 방법입니다. myisamchk라는 툴을 사용을 합니다. 이 툴은 MySQL설치시에 같이 설치 됩니다. 이 방법은 될 수 있으면 MySQL을 종료한 상태에서 수행하길 권합니다. (구동중에 수행해서 큰 문제는 없어보이긴 하지만 모두들 종료하길 권하더군요)
테이블명.*를 입력하려면 DB가 저장된 디렉토리 안에 들어가 데이터베이스명의 디렉토리 안으로 들어가셔서 수행을 하셔야 합니다.
[code]myisamchk -r {TABLE NAME}.*[/code]
위의 명령이 가장 기본적인 복구 명령입니다. 상황에 따라 다음과 같은 복구 옵션을 사용할 수 있습니다.
[code]myisamchk -o {TABLE NAME}.*[/code]
위의 o옵션은 안전모드에서 수행하라는 뜻이며 r옵션보다는 느리지만 좀 더 안정적으로 복구를 할 수 있다고 합니다. 또한 r에서 고치지 못하는 것을 추가적으로 고치기도 합니다.

3. 강제로 복구하기

위의 다양한 방법으로 복구되지 않을 경우 도전해 볼만한 강제적인 방법이 있습니다.
[code] myisamchk -r -f {TABLE NAME}.*[/code]
위의 방법을 시도하기 전에 꼭 백업을 해두시길 바랍니다.