MyISAM 파일 복원
- MyISAM의 구성
/mysql/data/DB명/테이블명.frm | 테이블의 구조를 정의하는 파일 |
/mysql/data/DB명/테이블명.MYD | 데이터 파일(actual data of MyISAM table) |
/mysql/data/DB명/테이블명.MYI | 인덱스 파일 |
- 위 .frm, .myd, .myi 파일이 있다면 데이터베이스 폴더 (/var/lib/mysql)에 간단히 복사+붙여넣기 하는 것 만으로 복원 끝!
문제는, innoDB 엔진의 경우이다.
InnoDB 파일 복원
-InnoDB는 MyISAM처럼 단순하고 간단하게 파일을 이용한 복구를 하기 어려운데, 이는 InnoDB의 구조 때문이다.

-굉장히 복잡한데, 결론적으로는 .frm, .ibd 파일만으로 복구하기 위해서는
.ibd 파일의 Tablespace ID가 ibdata1의 메타데이터에 있는 Tablespace ID과 100% 일치함을 보장할 수 있을 때만이다.
이 외의 경우 파일 단위 백업 복원 시 오류가 발생할 수 밖에 없는 구조를 가지고 있다.
-하지만 InnoDB 파일 복구를 검색해서 찾아다니는 사람의 대부분은 .frm, .ibd 파일로 복구 하다가 오류가 나는 경우일 것이다.
InnoDB 파일 단위 복구 중 오류 났을 때 해결법
(출처: https://sysdocu.tistory.com/1246 )
ERROR 1932 (42S02): Table [테이블명] doesn't exist in engine
- 서비스 종료
- ibd, frm 파일들을 data 경로에서 다른 경로로 이동 (복사 아님)
- 서비스 다시 시작 후 이동한 테이블 삭제된 상태 확인
- 제거된 테이블 다시 생성 (생성 query)
- 테이블 스페이스 제거: Alter table [테이블명] discard tablespace;
- 이동된 테이블 파일(ibd, frm)을 다시 data 경로로 복사
- 테이블 스페이스 복원: alter table [테이블명] import tablespace;
하지만, 위 방법으로는 테이블 크기가 조금이라도 크면 Lost connection to MySQL server during query 에러 발생과 함께 서비스가 종료되는데,
그럴 땐 아래와 같이 한다.
- 백업된 DB와 동일한 이름의 DB(gradius) 생성
- 서비스 종료
- 백업된 gradius 데이터 파일(frm, idb)과 ibdata1(data 밑에 있음)을 함께 이관
- 서비스 시작
서비스 시작 시 DB 자동 복구가 실행된다.
'DATABASE' 카테고리의 다른 글
MariaDB 손상 복구 관련 정리 자료(2) - MYISAM 자동 복구 옵션 (2) | 2022.10.04 |
---|---|
MariaDB 손상 복구 관련 정리 자료(2) -MYISAM (0) | 2022.09.27 |
MariaDB 손상 복구 관련 정리 자료(1) -InnoDB (0) | 2022.09.27 |
[MySQL] trigger로 jsp페이지 호출하기 (0) | 2022.05.26 |
[Database] where 1=2, where 1=1을 사용하여 테이블 복사하기 (0) | 2022.05.23 |
댓글