MySQL에서 손상된(Crashed) 테이블 확인하는 방법
테이블이 손상되었다는 것은 해당 테이블의 스토리지 엔진(ENGINE) 값이 NULL이거나 비어 있다는 의미입니다. MySQL에서는 SHOW TABLE STATUS 명령어 하나만으로 데이터베이스 내 모든 테이블의 상태를 한 번에 점검할 수 있습니다.
기본 문법
손상된 테이블을 확인하려면 아래와 같이 입력합니다.
SHOW TABLE STATUS FROM yourDatabaseName;
실제 적용 예시
여러 개의 테이블을 가진 'test3' 데이터베이스에 위 구문을 적용해 보겠습니다.
mysql> show table status from test3;
실행 결과는 다음과 같습니다. 실제 출력에는 Name, Engine, Version, Row_format, Rows, Avg_row_length, Data_length, Create_time, Collation 등 매우 많은 컬럼이 포함되지만, 여기서는 핵심인 테이블 이름(Name), 엔진(Engine), 행 수(Rows)만 정리했습니다.
| Name | Engine | Rows |
|---|---|---|
| bestdateformatdemo | InnoDB | 4 |
| countdemo | InnoDB | 4 |
| deletedemo | InnoDB | 6 |
| differentdatetime | InnoDB | 4 |
| expandedoutputdemo | InnoDB | 4 |
| fieldlessthan5chars | InnoDB | 8 |
| lastrecordbeforelastone | InnoDB | 8 |
| mostrecentdatedemo | InnoDB | 6 |
| nullcasedemo | InnoDB | 6 |
| order | InnoDB | 8 |
| orderbydatethentimedemo | InnoDB | 4 |
| posts | InnoDB | 0 |
| productdemo | InnoDB | 4 |
| radiansdemo | InnoDB | 2 |
| selecttextafterlastslashdemo | InnoDB | 4 |
| siglequotesdemo | InnoDB | 0 |
| storeddemo | InnoDB | 6 |
| studentinformation | InnoDB | 0 |
| updatestringdemo | InnoDB | 2 |
총 19개의 테이블이 조회되었으며, 모든 테이블의 Engine 컬럼이 InnoDB로 표시되고 있습니다. 이는 현재 데이터베이스에 손상된 테이블이 없다는 뜻입니다. 만약 어떤 테이블의 Engine 값이 NULL이거나 비어 있다면, 그 테이블은 손상(crash)된 상태로 판단하면 됩니다.
추가 팁: 테이블 검사 및 복구
특정 테이블만 자세히 점검하고 싶다면 CHECK TABLE 명령어를 사용할 수 있습니다.
CHECK TABLE yourTableName;
MyISAM 엔진의 테이블이 손상된 경우에는 REPAIR TABLE 명령어로 복구를 시도할 수 있습니다.
REPAIR TABLE yourTableName;
참고로 InnoDB 테이블은 서버 재시작 시 자동 크래시 리커버리(crash recovery) 기능이 동작하므로, 대부분의 손상은 MySQL이 자체적으로 복구해 줍니다.