2008-09-22 27 views
9

실수로 MySQL 5.0에서 DROPped 된 데이터베이스를 복원해야합니다. 백업 파일을 검사하는 것에서부터 나는 데이터베이스 데이터를 저장하는 .FRM 파일 만있는 것처럼 보입니다.MySQL InnoDB 데이터베이스 복원

백업에서 데이터베이스 복원/가져 오기를 수행하는 데 필요한 전부인지 또는 내가 완료해야하는 다른 파일이 있는지 알려줄 수 있습니까?

답변

14

.frm 파일은 데이터 파일이 아니며 단지 "데이터 사전 정보"만 포함합니다 (MySQL manual 참조). InnoDB는 그 데이터를 ib_logfile * 파일에 저장한다. 그게 당신이 백업/복원을 수행하는 데 필요한 것입니다. 자세한 내용은 here을 참조하십시오.

+0

InnoDB에는 * .frm 파일 외에도 ibdata, ib_logfile * 및/또는 * .ibd 파일이 필요합니다. – silfreed

+0

ib_logfile * 및 .frm 파일 (개월 이전 백업 포함) 만 있으면 어떻게됩니까? 그 시나리오에서 복구 할 기회가 있습니까? 또는 ibdata를 복구해야합니까? – eglasius

6

오 마이 ... 당신이 곤경에 처했습니다. 데이터베이스를 종료하십시오. innodb 파일을 백업하십시오. 데이터베이스를 삭제 한 후 아무 것도하지 않았 음을기도하십시오.

Percona (MySQL 성능 블로그 작성자 포함)의 사람들은 Percona emergency support을 도와 드릴 수 있습니다.

벤처 기업이라면 Data Recovery Toolkit for Innodb으로 가져 가십시오.

물류는 무엇입니까? 모든 페이지 (컴퓨터 용어 페이지 ... Innodb의 경우 16K 블록)를 읽어야하고 그런 식으로 데이터를 다시 작성해야합니다. 매우 낮은 수준의 작업입니다 (우리가 16 진수 편집기를 열고 툴킷이 당신을 위해 그것을하지 않는다면 바이트 계산을 시작합니다). 그리고 당신이 강력하게 숙련 된 프로그래머가 아니라면, 당신은 상처를 입을 것입니다 .

7

복원 이노 : (데이터 폴더를 가정는 C : \ 경우 ProgramData \ MySQL은 \ MySQL 서버 5.5 \ 데이터)

  1. 복사 (데이터베이스 이름의 이름을 따서 명명) 데이터베이스의 폴더를 복원 할 C : \ ProgramData \ MySQL \ MySQL 서버 5.5 \ data
  2. 3 개의 ibdata 파일을 데이터 폴더 ex에 복사하십시오. (C : \ 경우 ProgramData \ MySQL은 \ MySQL 서버 5.5 \ 데이터)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. 파일로 MB의 _ib_logfile0 (이 _ib_logfile1와 동일해야합니다)의 크기를 가져옵니다 마우스 오른쪽 클릭 -> 속성 innodb_log_file_size = 343M에 대한

  4. 편집 MySQL의 설정 파일 (MySQL의 \ 빈 \의 my.ini는) 정확히 ibdata 파일의 크기로

  5. 실행

    의 mysqld --defaults-파일 = mysql을 \ 빈 \의 my.ini --standalone --console --innodb_force_recovery = 6

  6. 이제 데이터를 다시 데이터베이스에 있어야합니다.phpmysql 또는 다른 도구

+0

이 나를 위해 작동하지 않습니다 - phpMyAdmin에서 InnoDb 테이블을 볼 수는 있지만 접근 할 수 없습니다 –

+0

3/4 단계로 그들이 무엇을했는지 확신 할 수 없습니다. 실제로 mysql을 다시 시작하기 위해 순서에 따라 파일을 제거해야했다. 5 단계가 무엇인지 알 수 없음 ... 그러나 1,2,5 단계를 시작한 다음 mysql을 다시 시작하면 작동하는 것 같았습니다! – msponagle

+0

@msponagle says와 똑같습니다. 모든 단계를 완료 할 수는 없지만 defenetly 1, 2, 3 단계를 수행 한 다음 서비스를 다시 시작하고 시작하지 않으면 시스템을 다시 시작하십시오. 그것은 나를 위해 일했다. – ingkevin

-2

당신이 여기에서 찾을 수있는 구체적인 솔루션을 사용하여 내보내기 :

http://www.unilogica.com/mysql-innodb-recovery/ (포르투갈어 조)

innodb_force_recovery의 플래그 게다가를, 나는 또 다른 해결책을 발견 : innodb_file_per_table, MyISAM 테이블처럼 각 파일에서 InnoDB 테이블을 분리한다.

크래시 복구에서 단일 파일 ibdata1보다 적은 데이터 손실이 발생할 수 있습니다.