MySQL/복구 종류 및 방법

테이블 복구 (Tablespace Import)

`O` 2021. 3. 4. 17:21
728x90
반응형

이 페이지에서는 Tablespace Import 방법으로 테이블을 복구하는 방법을 알아보겠다.
(해당 방법은 복구 대상 테이블에 파티션 테이블 및 외래키가 존재시 수행이 불가하다.)

  • 먼저 예시용 테이블을 아래와 같이 만들어서 테이블을 기입 해 본다.

 

  • 그 후 데이터 파일 경로에서 해당 테이블의 frm, ibd 파일을 다른경로에 복사하여 백업을 한 뒤, 삭제를 한다.

 

  • 삭제를 한 뒤에 select 를 하면 캐쉬된 데이터 내용들을 그대로 조회 가능하다.
    하지만 실제 운영중에 데이터 정합성 이상, 혹은 데이터 파일 손상 발생 등으로 차후 해당 테이블을 복구 할 시에는
    백업된 데이터 파일을 그대로 가져 오면서 백업된 데이터 파일에 binlog 를 다시 적용하는 등으로 복구 할 수 있는데 그 예시가 import tablespace 이다.

    이를 적용 하기 위해서는 먼저 해당 테이블에 적용된 ibd 파일 연결 해제 및 삭제를 해야 하는데 해당 명령어로 삭제가 가능하다.
alter table /* 테이블명 */ discard tablespace;

 

  • 위의 명령어를 사용 후 다시 테이블을 조회하면 테이블을 찾을 수 없다는 내용이 나온다.

 

  • 이 상태에서 복사를 해둔 파일을 다시 데이터 경로로 옮긴 후, 아래의 명령어를 수행한다.

alter table /* 테이블명 */ import tablespace;

 

  • 이제 다시 import 를 하면 아래의 warning 이 나오면서 테이블 복구가 성공하는데, 이 경고 내용은 기존에 있던 테이블 형상 정보가 담긴 메타데이터 정합성을 확인하지 않고 파일 내용 그대로 가져온다는 내용이다.
    cfg 파일을 미리 구성해놓으면 형상 정합성을 유지하면서 복구가 가능한데, 테이블 형상변동이 없고, ibd 파일에서 메타데이터를 추출 할 필요가 없다면, 없어도 되는 파일이다.

    해당 복구방법은 crash 등의 장애 발생 시, 이러한 warning 이슈를 skip 하고 복구를 진행하므로 metadata 참조가 필요없이 복구가 가능한 장점을 살릴 수 있다. (단, warning 까지 고려하는 서비스라면 사용을 배제하는것이 좋다.)

반응형