repair table

repair table table명

myisamchk -r table명

MySQL REPAIR TABLE 기능 설명

REPAIR TABLEMyISAM, ARCHIVE, CSV 같은 비-트랜잭션 스토리지 엔진 테이블의 손상(Corruption)을 복구할 때 사용하는 명령입니다.

중요: InnoDB 테이블에서는 REPAIR TABLE 이 효과가 없습니다.
InnoDB는 자체적인 복구 기능(redo/undo log, crash recovery)을 사용하기 때문입니다.


📌 1. REPAIR TABLE 기본 기능

손상된 테이블을 복구

  • 서버 비정상 종료, 디스크 문제 등으로
    .MYD, .MYI 파일이 손상된 MyISAM 테이블 복구
  • 인덱스 오류 복구
  • 데이터 파일 구조 오류 복구

명령 예시


📌 2. REPAIR TABLE 옵션별 의미

🔧 1) QUICK

  • 인덱스만 다시 생성
  • 데이터 파일(.MYD) 읽지 않음
  • 빠르지만 깊은 복구는 안 됨

🔧 2) EXTENDED

  • 데이터를 다시 정렬하고 인덱스를 완전 재구축
  • 매우 느리지만 가장 효과적
  • 디스크 공간을 많이 사용

🔧 3) 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)

보통 아래처럼 먼저 검사합니다.

결과가 다음처럼 나오면 REPAIR 필요:

  • marked as crashed
  • check error
  • corrupt
  • Key in wrong position

📌 5. REPAIR TABLE 동작 방식

  1. 테이블 잠금(Lock)
    • 읽기/쓰기 모두 차단됨 (Downtime 발생)
  2. 백업 파일 생성 (.TMD)
  3. 데이터 복구 또는 인덱스 재생성
  4. 기존 파일 교체

📌 6. REPAIR TABLE 중 데이터 손실 가능성?

  • 데이터 파일(.MYD)이 손상된 경우 일부 데이터가 삭제될 수 있음
  • 인덱스만 손상된 경우는 안전함

💡 실제 운영에서는 REPAIR 전에 반드시 백업을 권장합니다.


📌 7. InnoDB 테이블은 어떻게 해야 하나?

InnoDB는 아래 절차로 복구합니다:

  • 자동 Crash Recovery
  • SET GLOBAL innodb_force_recovery=1~6
  • 테이블스페이스 재구성
  • mysqldump → 재생성

REPAIR TABLE은 InnoDB에서는 무용지물입니다.


📌 8. REPAIR TABLE 실행 예외 여부 확인

출력 예:

TableOpMsg_typeMsg_text
db.table_namerepairstatusOK

오류가 있으면 Msg_text 컬럼에 출력됩니다.


📌 요약

스토리지 엔진REPAIR TABLE 효과
MyISAM⭐ 적극 사용 가능 (손상 복구/인덱스 재빌드)
ARCHIVE/CSV부분적으로 가능
InnoDB❌ 사용 불가