repair table table명
myisamchk -r table명
MySQL REPAIR TABLE 기능 설명
REPAIR TABLE 은 MyISAM, ARCHIVE, CSV 같은 비-트랜잭션 스토리지 엔진 테이블의 손상(Corruption)을 복구할 때 사용하는 명령입니다.
⚠ 중요:
InnoDB테이블에서는REPAIR TABLE이 효과가 없습니다.
InnoDB는 자체적인 복구 기능(redo/undo log, crash recovery)을 사용하기 때문입니다.
📌 1. REPAIR TABLE 기본 기능
손상된 테이블을 복구
- 서버 비정상 종료, 디스크 문제 등으로
.MYD,.MYI파일이 손상된 MyISAM 테이블 복구 - 인덱스 오류 복구
- 데이터 파일 구조 오류 복구
명령 예시
|
1 2 3 4 |
REPAIR TABLE table_name; |
📌 2. REPAIR TABLE 옵션별 의미
🔧 1) QUICK
|
1 2 3 4 |
REPAIR TABLE table_name QUICK; |
- 인덱스만 다시 생성
- 데이터 파일(.MYD) 읽지 않음
- 빠르지만 깊은 복구는 안 됨
🔧 2) EXTENDED
|
1 2 3 4 |
REPAIR TABLE table_name EXTENDED; |
- 데이터를 다시 정렬하고 인덱스를 완전 재구축
- 매우 느리지만 가장 효과적
- 디스크 공간을 많이 사용
🔧 3) USE_FRM
|
1 2 3 4 |
REPAIR TABLE table_name USE_FRM; |
.frm파일 구조만 사용해 테이블 복구- 헤더 정보가 깨진 경우 사용
- 위험도가 있음 (구조 불일치 발생 가능)
- 최신 MySQL 버전에서는 제거됨
📌 3. 어떤 상황에서 사용?
| 상황 | REPAIR TABLE 필요 여부 |
|---|---|
| MyISAM 테이블에서 “table marked as crashed” 오류 | ✔ 필요 |
| “Incorrect key file” | ✔ 필요 |
| “Can’t open file: *.MYI” | ✔ 필요 |
| InnoDB table corruption | ✘ 사용 불가 → InnoDB 복구 절차 필요 |
| SELECT 시 간헐적 오류 발생(MyISAM) | ✔ 필요 |
📌 4. MyISAM 테이블 손상 확인 (CHECK TABLE)
보통 아래처럼 먼저 검사합니다.
|
1 2 3 4 |
CHECK TABLE table_name; |
결과가 다음처럼 나오면 REPAIR 필요:
marked as crashedcheck errorcorruptKey in wrong position
📌 5. REPAIR TABLE 동작 방식
- 테이블 잠금(Lock)
- 읽기/쓰기 모두 차단됨 (Downtime 발생)
- 백업 파일 생성 (.TMD)
- 데이터 복구 또는 인덱스 재생성
- 기존 파일 교체
📌 6. REPAIR TABLE 중 데이터 손실 가능성?
- 데이터 파일(.MYD)이 손상된 경우 일부 데이터가 삭제될 수 있음
- 인덱스만 손상된 경우는 안전함
💡 실제 운영에서는 REPAIR 전에 반드시 백업을 권장합니다.
📌 7. InnoDB 테이블은 어떻게 해야 하나?
InnoDB는 아래 절차로 복구합니다:
- 자동 Crash Recovery
SET GLOBAL innodb_force_recovery=1~6- 테이블스페이스 재구성
- mysqldump → 재생성
즉 REPAIR TABLE은 InnoDB에서는 무용지물입니다.
📌 8. REPAIR TABLE 실행 예외 여부 확인
|
1 2 3 4 |
REPAIR TABLE table_name; |
출력 예:
| Table | Op | Msg_type | Msg_text |
|---|---|---|---|
| db.table_name | repair | status | OK |
오류가 있으면 Msg_text 컬럼에 출력됩니다.
📌 요약
| 스토리지 엔진 | REPAIR TABLE 효과 |
|---|---|
| MyISAM | ⭐ 적극 사용 가능 (손상 복구/인덱스 재빌드) |
| ARCHIVE/CSV | 부분적으로 가능 |
| InnoDB | ❌ 사용 불가 |
