티스토리 뷰

https://hoststud.com/resources/steps-to-restoring-table-structure-from-frm-and-ibd-files.465/

 

frm 및 ibd 파일에서 테이블 구조 복원

InnoDB는 ib_log 파일을 사용하여 데이터를 복구합니다. 또한 데이터 사전이 포함 된 ibdata1 파일과 테이블에 보류중인 일부 데이터가 필요합니다. 데이터 사전은 테이블 구조를 기록하고 테이블 ID를 실제 .ibd 파일과 일치시키는 데 사용되는 중복 시스템입니다. ibd 파일은 항상 InnoDB 데이터 사전과 함께 이동합니다. .frm 파일을 사용하여 테이블을 복구 할 수 있으며 InnoDB 테이블로 만들 수 없습니다.

서버가 손상되어 .frm 및 .ibd 파일에서 데이터가 복구 될 수 있습니다. 일반적으로 모든 테이블 구조.frm 파일에 저장됩니다. 이 문제에 대한 해결책은 테이블 구조를 복구하여 데이터 손실을 찾거나 테이블을 다시 작성하는 것입니다. 손상된 테이블은 두 가지 방법으로 복구 할 수 있습니다.

새 MYSQL 인스턴스를 생성하고 복구 구조를 실행 하십시오 . –server 또는 –basedir 스위치는 –port와 함께 사용됩니다. 스폰은 복구 완료 후 인스턴스를 종료합니다.

SQL 인스턴스 필요없이 테이블 복구 : –diagnostic.frm 파일을 읽고 SQL 인스턴스없이 데이터를 복구하는 데 사용됩니다. 이 방법은 .frm 파일을 바이트 단위로 읽어 모든 데이터를 복구하는 데 사용됩니다.

새 MYSQL 인스턴스 생성 및 복구 구조 실행 :

 

1 단계 – frm 파일

"mysqlfrm"도구를 사용하여 테이블 구조 재 작성은 MYSQL 유틸리티와 함께 ​​테이블 구조 재 작성에 사용됩니다.이 도구를 사용하여 "테이블 작성"스크립트가 작성되고 구조가 추출됩니다.

mysqlfrm –server=root:mypassword@localhost –port=3311 "<source/path>/mytable.frm" > "<destination/path>/recovered_mytable.sql"

위의 포트 명령어는 MYSQL 서버의 포트가 아니며 모든 포트가 될 수 있습니다. 스크립트의 끝은 파일 출력을 리디렉션합니다.

 

2 단계 -새 데이터베이스

에서 테이블 다시 작성 1 단계에서 작성된 스크립트 를 사용하여 새 데이터베이스 에 새 테이블이 작성됩니다. mytable.frmmytable.ibd라는 두 개의 파일이 데이터베이스 데이터 폴더에 작성됩니다.

3 단계 -새 ibd 파일 제거 새 ibd 파일

을 제거하기 위해 다음 SQL 명령이 실행됩니다.

ALTER TABLE mytable DISCARD TABLESPACE;

4 단계 -이전 ibd 파일 복사

삭제ibd 파일 대신 복구ibd 파일을 복사해야합니다.

5 단계 – 테이블 재 활성화

다음 명령으로 끊어진 링크가 복원됩니다.

ALTER TABLE mytable IMPORT TABLESPACE;

오류 메시지가 나타날 수 있습니다. 걱정하지 마십시오. 복원 프로세스에 영향을 미치지 않습니다.

 

SQL 인스턴스가 필요없는 테이블 복구 :

mysqlfrm –diagnostic "<source/path>/mytable.frm" > "<destination/path/recovered_mytable.sql>"

위 명령을 실행 한 후 복구 된 모든 데이터는 "recovered_mytable.sql"파일에 있습니다. 그런 다음 2, 3, 4 및 5 단계를 사용하여 ibd 파일을 다시 만듭니다. MYSQL 테이블은 .ibd 파일에서만 복원 할 수 있습니다.

ibd 파일이있는 경우 테이블을 다시 작성하려면 SQL 스크립트가 필요합니다. 이제 "테이블 작성"명령을 사용하여 SQL 스크립트로 새 테이블을 작성해야합니다. mytable.frmmytable.ibd 파일은 데이터베이스 폴더에 작성됩니다.

 

댓글