%20-%20.frm%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EB%88%84%EB%9D%BD%EB%90%98%EC%97%88%EC%A7%80%EB%A7%8C%20ibdata%EB%8A%94%20%EA%B7%B8%EB%8C%80%EB%A1%9C%20%EC%9C%A0%EC%A7%80%EB%90%A8.png)
최근 서버 실패로 인해 겉모습은 온전한 ibdata 파일만 남았지만 .frm이 포함된 디렉터리 중 절반만 남았습니다. 나는 이 모든 것을 새로운 mysql 설치에 복사했고, 여전히 .frm 파일을 가지고 있던 데이터베이스를 성공적으로 복구했습니다. 내 질문은 - ibdata 파일에서 .frm 파일을 어떻게든 재생성할 수 있습니까? 아니면 복구에 사용할 수 있도록 동일한 데이터베이스의 개발 버전에서 .frm 파일을 어떻게든 수정하시겠습니까?
안타깝게도 백업에서 복원하는 것은 실행 가능한 옵션이 아닙니다.
명확히 하기 위해 편집됨: 동일한 스키마가 포함된 로컬로 생성된 .frm 파일을 사용하여 데이터베이스를 복구하려고 시도했습니다. innodb_force_recovery = 1에서도 주사위는 없습니다.
답변1
저는 실제로 이 작업을 해본 적이 없지만 귀하의 질문은 제가 사용하는 도구와 관련되어 있어서 궁금했습니다! 이것이 실제로 가능한 것처럼 보입니다. 예는 다음과 같습니다.
http://www.chriscalender.com/?p=28
가지고 있는 것이 .ibd 파일뿐인데 테이블을 복구해야 하는 경우도 있습니다. 이 경우 새 인스턴스에 로드하려고 하면 테이블 ID가 일치하지 않는다는 오류가 발생할 가능성이 높습니다. 그리고 실제로 이 문제를 해결할 수 있는 방법은 없습니다.
그러나 이에 대한 두 가지 해결 방법을 찾았습니다.
참고: 이러한 방법을 사용하여 복구하려는 각 테이블에 대해 .ibd 파일과 CREATE TABLE 문이 필요합니다.
- 내부 InnoDB 테이블 카운터를 시뮬레이션합니다. 즉, 테이블 ID의 내부 포인터가 (1 – id_of_ibd_table_you_need_to_restore)와 같아질 때까지 작업 테이블을 생성합니다(innodb_file_per_table 활성화). (방법 #1 참조)
- .ibd 파일을 수동으로 16진수 편집하여 테이블 ID를 변경합니다. (방법 #2 참조)
단계 자체는 여러 페이지 길이이므로 여기에 붙여넣지 않았습니다.
또 다른 관련 게시물:http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/
효과가 있는지 궁금합니다. 여러 사람이 성공적으로 사용한 것 같습니다.