잘못된 Innodb mysql 삭제 후 복구

4017 단어 MySQL
사용하는 도구는percona-data recovery-tool-for-innodb-0.5입니다.tar.gz, 테스트의 조작은 delete froma입니다.
그리고 시계의 데이터를 복구합니다.다 회복되지는 않았지만 대부분 있어요.나는 전부 회복할 능력이 없다.
1. 오류가 발생하면 삭제한 후 mysiql을 빨리 멈추고 삭제표의 ibd 파일을 복사합니다.그런 다음 다시 시작합니다.
innodb가 설정되어 있지 않으면file_per_이 서류는 가져가서 복원했다.
After the “accidental” deletion of rows you should stop MySQL, take a copy of the salaries.ibd and start it again.
2. 조회표 정보.
오류가 삭제된 테이블은 조회표 정보를 통해row를 확인할 수 있습니다format 및 index 정보.페이지 사용을 확인하는 게 목적이에요.명령을 내릴 때 매개 변수를 확정한다.
질문format 정보:
mysql에 로그인하여 오류 삭제표 정보 조회
하면, 만약, 만약...이 창고에 innodb가 있어요.Sys 관련 테이블, 직접 테이블의 row 조회 가능format 및 indexid name
#database_name 就是数据库名,table_name是库里的表名,就是你误删除的那个库和那个表。
select i.index_id,i.name,t.row_format  from information_schema.innodb_sys_indexes as i inner join information_schema.innodb_sys_tables as t USING(TABLE_ID) where t.name='"${database_name}/""${table_name}"'"
예를 들면 다음과 같습니다.

만약 이 테이블이 없다면tables표를 조회하여 정보를 얻을 수 있고 나머지는 상황에 따라 판단하는 것이다.
3. 위 정보를 획득한 후 페이지를 통해parser에서 페이지 정보 내보내기
가령, 복사된 표를 a라고 하는데, 파일은 a.ibd이다.
./page_parser -5 -f a.ibd

#这里的5表示row_format是Compact格式。
The row format can be -4 (REDUNDANT) or -5 (COMPACT). From 5.0.3 the default format is COMPACT.
이 실행이 끝나면 현재 디렉터리에 페이지s-xxxxx 디렉터리를 생성합니다.이 디렉터리에는 내보낸 페이지 정보가 포함되어 있습니다.
예를 들면 다음과 같습니다.
pages-1489137771/FIL_PAGE_INDEX/
이 목록 아래에 다른 목록이 있을 것입니다. 위의 그림을 누르면 0-2302, 0-2303, 0-2304입니다.왜냐하면 저희가 index를 미리 봤거든요.0-2302가 PRIMARY, 즉 시작 파일이라는 것을 알기 때문이다.우리는 이따가 이 문장으로 회복할 것이다.
4.perrl 스크립트를 통해 테이블 정보를 얻고 데이터 복구 프로그램이 사용하는 테이블 구조를 만듭니다.
./create_defs.pl --host 127.0.0.1 --port 3306 --user root --password  xxxxx --db testaaa --table a >include/table_defs.h
include 디렉터리는 해공 도구 꾸러미에 있는 것입니다.명령대로 탭으로 직접 출력 -defs.됐습니다.
5. 이 단계는 재번역이 필요하다
make
이 절차를 마치면 파일constraints를 다시 생성합니다이 파일은 이번 복구의 이 테이블에만 적용됩니다.
6. 데이터 복구
./constraints_parser -5 -D -f pages-1489137771/FIL_PAGE_INDEX/0-2302/ >a.recovery
설명:
이 명령의 매개 변수 5에서 말했듯이 mysql의row입니다format 형식. -D는 복구 프로그램이 삭제된 것으로 인정하고 -f는 읽을 디렉터리를 표시한다.마지막으로 복구할 수 있는 것을 파일, CSV 형식으로 내보냅니다.
위의 이 명령은 다른 곳에서 본 것이다.제가 실제 실험을 할 때 사용한 명령은 아래의 명령입니다.
./constraints_parser -5 -f pages-1489137771/FIL_PAGE_INDEX/0-2302/ >a.recovery
모든 기록을 모두 내보내는 거야.
7. 테이블로 가져옵니다.
mysql에 로그인하면 다음 명령을 사용하여 테이블에 가져옵니다.
load data infile 'a.recovery' replace into table `a` FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY 'a\t' (id,username,testfield1,test3);
a.recovery 파일을 읽고 표 a에 가져오면 csv 형식은 'a' 로 시작하고, 다음 괄호 안에는 필드 이름입니다.
구체적인 것은 필요에 따라 수정한다.복구된 다음 파일을 보는 것이 좋습니다.

좋은 웹페이지 즐겨찾기