본문 바로가기
Database/MARIADB

InnoDB 복구 모드

by 반화넬 2020. 6. 26.
반응형

InnoDB 복구 모드

XtraDB / InnoDB 복구 모드는 응급 상황에서 복구하는 데 사용되는 모드입니다. 데이터베이스를 복원해야 할 경우를 대비하여 변경하기 전에 데이터베이스 백업이 있는지 확인해야합니다. innodb_force_recovery의 서버 시스템 변수 복구 모드를 설정한다. 모드 0은 일반적으로 사용되는 반면 모드가 높을수록 제한이 더 엄격합니다. 높은 모드는 낮은 모드의 모든 한계를 통합합니다.

응급 상황을 제외하고 복구 모드를 0 이외의 값으로 설정해서는 안됩니다.

일반적으로 복구 모드는 1로 시작하고 필요한 경우 단일 증분으로 늘리는 것이 가장 좋습니다. 복구 모드 <4를 사용하면 손상된 페이지 만 손실됩니다. 4를 사용하면 보조 인덱스가 손상 될 수 있습니다. 5를 사용하면 결과가 일치하지 않고 2 차 색인이 손상 될 수 있습니다 (4가 아닌 경우에도). 값이 6이면 페이지가 더 이상 사용되지 않아 더 많은 손상이 발생할 수 있습니다.

MariaDB 10.2.7 까지는 모드 0가 데이터 변경을 허용하는 유일한 모드 였습니다. MariaDB 10.2.7 부터 모드 3이하의 쓰기 트랜잭션이 허용됩니다 .

테이블을 복구하기 위해 SELECT 실행 하여 데이터를 덤프하고 DROP TABLE (쓰기 트랜잭션이 허용 된 경우)을 통해 손상된 테이블을 제거 할 수 있습니다.

사용 가능한 모드는 다음과 같습니다.

 

 

복구 모드

양식기술

0 XtraDB / InnoDB가 정상적으로 실행되는 동안 기본 모드입니다. MariaDB 10.2.7 까지는 데이터 변경을 허용하는 유일한 모드였습니다. MariaDB 10.2.7 부터 innodb_force_recovery <= 3으로 쓰기 트랜잭션이 허용됩니다.
1 (SRV_FORCE_IGNORE_CORRUPT)는 손상된 페이지가 감지 된 경우에도 서버가 계속 실행되도록합니다. 리두 로그 기반 복구는 누락 된 데이터 파일 또는 손상된 데이터 페이지와 같은 특정 오류를 무시하도록합니다. 영향을받는 파일 또는 페이지에 대한 재실행 로그는 건너 뜁니다. 손상된 인덱스 및 페이지를 건너 뛰도록 SELECT * FROM table_name 문을 가져 와서 테이블 덤프를 용이하게 할 수 있습니다.
2 (SRV_FORCE_NO_BACKGROUND)는 마스터 스레드 실행을 중지하여 제거 중에 발생하는 충돌을 방지합니다. 제거가 수행되지 않으므로 실행 취소 로그가 계속 커집니다.
3 응급 복구 후 (SRV_FORCE_NO_TRX_UNDO)는 트랜잭션을 롤백하지 않습니다. 현재 활성화 된 트랜잭션의 롤백에는 영향을 미치지 않습니다. MariaDB 10.2.7로 시작 하면 실행 취소 된 일부 백그라운드 작업이 실행되지 않습니다. 롤백을 방지하는 불완전한 트랜잭션이 복구되어 이러한 작업이 잠금 대기에 도달 할 수 있습니다.
4 (SRV_FORCE_NO_IBUF_MERGE)는 테이블 통계를 계산하지 않으며 삽입 버퍼 병합을 방지합니다.
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)은 불완전한 트랜잭션을 커밋 된 것으로 취급하며 시작시 실행 취소 로그를 보지 않습니다 .
6 (SRV_FORCE_NO_LOG_REDO)는 복구의 일부로 리두 로그 롤 포워드를 수행하지 않습니다. 인덱스가 필요한 쿼리를 실행하면이 모드가 활성화되어 실패 할 수 있습니다. 그러나 테이블 덤프에서 여전히 충돌이 발생하는 경우 a를 사용 SELECT * FROM tab ORDER BY primary_key DESC하여 손상된 부분 다음에 모든 데이터 부분을 덤프 할 수 있습니다 .

또한 XtraDB (<= MariaDB 10.2.6 )는 기본적으로 단일 테이블 테이블 스페이스에서 손상된 데이터를 감지하면 서버와 충돌합니다. 이 동작은 변경 될 수 있습니다 . innodb_corrupt_table_action 시스템 변수를 참조하십시오 .

반응형