MyISAM 테이블은 .MYI(index), .MYD(data), .frm(table structure) 파일로 구성
.MYI 파일이 손상된 경우, myisamchk 명령어를 통해 복구가능합니다.
📌 MyISAM 테이블 복구 방법 (.MYI 파일 기반) 은 MySQL 3.23, 4.x, 5.0, 5.1, 5.5 등 MyISAM 스토리지 엔진을 사용하는 모든 버전에 적용 가능합니다.
MySQL 버전 MyISAM 사용 가능 .MYI 복구 가능 여부
MySQL 버전 | MyISAM 사용 가능 | .MYI 복구 가능 여부 |
3.23 | ✅기본 스토리지 엔진 | ✅ 가능 |
4.x | ✅기본 스토리지 엔진 | ✅ 가능 |
5.0 | ✅기본 제공 | ✅ 가능 |
5.1 | ✅InnoDB와 혼용 가능 | ✅ 가능 |
5.5 | ✅기본은 InnoDB지만 MyISAM 선택 가능 | ✅ 가능 |
⚠️ 단, 주의할 점
myisamchk 버전은 MySQL 버전에 맞춰주는 게 좋습니다.
(예: MySQL 5.0이면 MySQL 5.0에서 제공되는 myisamchk 사용이 가장 안전해요.)
InnoDB에는 절대 해당 안 됩니다.
InnoDB는 .ibd, .frm 또는 .ibdata 파일을 사용하므로 복구 방식이 전혀 다릅니다.
복구 전에는 항상 백업 필수! (특히 .MYD와 .frm)
📋 복구 전 사전 점검 절차
1. MySQL 접속 후 테이블 존재 여부 확인
> USE [DB명]; > SHOW TABLES; |
테이블이 존재하지 않는다면 .frm 파일이 없거나 손상된 것이므로, 기존 구조에 맞게 테이블을 먼저 생성해야 복구가 가능합니다.
2. MySQL 서버 종료
# systemctl stop mysqld 또는 service mysqld stop |
3. 기존 테이블 파일 백업
# cp -a /var/lib/mysql/[DB명]/[테이블명].* /backup/location/ |
4. 기존 .MYI 파일 삭제 후 새 복구용 .MYI 파일 교체
# rm -f /var/lib/mysql/[DB명]/[테이블명].MYI # cp [복구할_MYI_파일] /var/lib/mysql/[DB명]/ |
5. 권한 및 퍼미션 설정
# chown mysql:mysql [테이블명].MYI # chmod 660 [테이블명].MYI |
🔍 복구 작업 진행
먼저 상태 점검 (-c 옵션)
# myisamchk -c /var/lib/mysql/[DB명]/[테이블명].MYI |
오류 예시:
myisamchk: error: Found 26884250 keys of 26884251 myisamchk: error: Keypointers and record positions doesn’t match MyISAM-table ‘테이블명.MYI’ is corrupted Fix it using switch “-r” or “-o” |
2. 복구 실행
일반 복구:
# myisamchk -r /var/lib/mysql/[DB명]/[테이블명].MYI |
보다 안전한 복구 (권장):
# myisamchk -o /var/lib/mysql/[DB명]/[테이블명].MYI |
⚠️ -r 또는 -o 중 하나만 실행해야 합니다.
3. 복구 후 재점검
# myisamchk -c /var/lib/mysql/[DB명]/[테이블명].MYI |
정상적인 출력 예시:
Data records: 26884251 Deleted blocks: 0 – check file-size – check key delete-chain … – check record links |
✅ 복구 확인
1. MySQL 재시작
# systemctl start mysqld |
2. 테이블 확인 및 데이터 검증
> USE [DB명]; |
예시 출력:
+———-+ | COUNT(*) | +———-+ | 10518923 | +———-+ |
👉 데이터 카운트가 정상적으로 나온다면 복구 완료!
💡 주의사항
복구 도중 .MYD 또는 .frm 파일까지 손상되었을 경우에는 복구 불가할 수 있습니다.
작업 전 항상 전체 백업을 권장합니다!
이 방법은 MyISAM 스토리지 엔진에서만 유효하며, InnoDB에는 적용되지 않습니다.