innodb frm ibd 파일 가지고 복구하기 ( dbsake frm 추출)

뭐 사람이 실수를 할수도 있다고 하지만 운영중인 데이터베이스가 innodb로 운영되고 있다
다행히 innodb_file_per_table 옵션이 활성화 되어 있어서 각 테이블당 ibd 파일이 있다

근데 내가 모르고 ibdata1 파일을 삭제 해 버렸다. 젠장 ㅠㅠ / 즉 ibdata1으로 모든 파일이 저장되고 있었는데 이것을 모르고
내가 삭제한 것이다. 왜? 각 데이터베이스 폴더아래 ibd 파일이 존재하니 당연 없어도 된다고 생각했지..
좀 복잡하게 꼬였는데 원래 처음에 innodb_file_per_table 이 기본 0 으로 운영되고 있었다는 것
근데 이것을 옵션을 innodb_file_per_table=1 로 변경해서 사용했던 것이다. 그래서 테이블당 ibd 파일이 생성되었고
innodb_file_per_table=1 로 운영하면 ibdata1에서 데이터를 가져오는게 아니고 ibd에서 가져와야 하는데 초기 ibdata1에서 가져와서
옵션을 변경해도 처음 ibdata1 파일을 참고하나 보다.

ibdata1 : 일반적으로 system tablespace
frm : 각 테이블의 테이블 구조를 보관
ibd : 각 테이블당 데이터가 저장되는 파일

옵션에 따라 데이터가 저장되는 방식이 다름

innodb_file_per_table=0   :  ibdata1 파일 하나로 데이터 저장

innodb_file_per_table=1 : 데이터베이스 내 테이블당 ibd 파일로 데이터 저장
조회

 

데이터베이스 들어가서 쿼리를 실행하면 에러가 발생한다

이렇게 테이블 에러가 발생한다.  왜 ? ibdata1 파일에 정보가 담겨져 있었는데 삭제가 되었으니. 그럼 난 이제 끝난건가?
아니다 나에게는 ibd 파일이 존재한다.  이 파일에 데이터가 저장되어 있기 때문에 복구가 가능하다 그럼 복구해볼까나.

그럼 먼저 ibd frm 파일이 있는 데이터베이스 파일을 백업하자 경로는 우선 임시로 otp 폴더로

frm 파일이 테이블 구조를 가진 정보인데 이게 테이블 구조를 그냥은 확인이 안되기 때문에 dbsake라는 프로그램을 이용해서 테이블 구조를 확인해보자
dbsake 아닌 mysqlfrm 명령어를 이용해서 가능한데 dbsake가 훨씬 편함

간단하게 1개의 테이블만 테이블 구조 확인

ㅎㅎ 테이블 구조를 확인이 가능하네

근데 이런식으로 여러개 있는 테이블을 만드려면 힘들기 때문에 * 찍어서 sql 파일로 만들자

그리고 기존 데이터베이스를 삭제하는데 drop database ksms 먹히지 않기 때문에 폴더를 삭제해준다

그리고 다시 데이터베이스를 mysql에서 생성

이제 dbsake 를 이용해사 만든 전체 테이블 구조를 mysql에서 import 진행한다

데이터베이스 들어가서 확인해 보자

테이블 구조만 만들어졌고 자료는 없기 때문에 데이터가 0으로 출력  그럼 이제 ibd 백업 파일로 복원 해보자
우선 현재 ibd 파일이 새롭게 생성되어 있다

기존에 연동된 데이터를 해제한다 샘플로 1개 테이블

백업해둔 ibd 파일을 복사 및 권한 변경

백업해둔  ibd 파일은 현재 데이터베이스로  연동(매칭작업)

그럼 데이터가 있는지 확인해볼까나.

ㅎㅎ 자료가 있다.  그럼 실제 데이터베이스의 자료 데이터가 어떻게 되어있나 자료가 들어갔기 때문에 128k에서 300M 변경이 되었다

그럼 이제 테이블 1개 복원했네. 근데 내가 복원 할 테이블은 20~30여개.. 이거 언제 노가다 작업 하니
이럴때 쓰는게 스크립트지

스크립트 실행

이제 파일들을 확인해보자 / 정상적으로 ibd 파일의 용량이 늘어난것을 확인 할 수있다.

다른 테이블도 확인 해 볼까

ibdata1 파일의 용량도 체크

이제 1개의 데이터베이스 작업완료 했다. 여러개의 데이터베이스면 노가다 하던다 아니면 스크립트로 짜셔
작업하면 된다

결론 : 절대 파일은 함부로 삭제하거나 지우지 말고 백업해 두고 사용하자.

 

코멘트 쓰기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



배송정보
배송조회를 하시려면 송장번호를 클릭하세요
배송조회
상품명
주문번호
택배사
송장번호