http://www.mysqlkorea.co.kr
한글매뉴얼 5.0 , 한글매뉴얼 5.1 , MySQL 5.1 HA , 사용자매뉴얼
한글매뉴얼 5.0  
한글매뉴얼 5.1  
MYSQL 5.1 HA  
사용자매뉴얼  
영문매뉴얼  
최신글
mysql my파일과 …
mysql server 설…
Can't open and l…
듀얼마스터 구성 …
PREPARE 사용시 …
 
한글매뉴얼 5.0 > 매뉴얼존 > 한글매뉴얼 5.0
 

14.2.8.1. 강제로 InnoDB 복구하기

 

만일 데이터베이스 페이지 깨짐이 존재한다면, SELECT INTO OUTFILE를 사용해서 데이터베이스에서 테이블을 덤프하기를 원할 수도 있을 것이다. 일반적으로 이러한 방식으로 얻게 되는 대부분의 데이터는 완전한 형태의 데이터다. 데이터 깨짐으로 인해 SELECT * FROM tbl_name 명령문 또는 InnoDB 백그라운드 연산이 깨지게 되거나, 또는 InnoDB의 롤-포워드 복구 (roll-forward)가 발생할 수도 있다. 하지만, 테이블 덤프를 하기 위해, 백그라운드 연산이 구동되지 못하도록 하는 동안에 InnoDB 스토리지 엔진이 강제로 시작될 수 있게끔 할 수가 있다. 예를 들면, 서버를 재 구동시키기 전에 옵션 파일의 [mysqld] 섹션에 아래의 라인을 추가할 수가 있다:

 

[mysqld]

innodb_force_recovery = 4

 

innodb_force_recovery를 위해서 사용 가능한 논-제로 (non-zero) 값이 아래에 나와 있다. 큰 숫자일수록 작은 숫자의 모든 사항을 포함하게 된다. 만일 이 옵션 값을 4로 해서 테이블을 덤프 한다면, 개별적으로 깨진 페이지에서 잃어 버린 데이터에 대해서 상대적으로 안전하게 된다. 6이라는 값은 보다 역동적인데, 그 이유는 데이터베이스 페이지가 애매 모호한 상태로 남아 있게 되기 때문이며, 이 상태가 되면 B-트리와 다른 데이터베이스 구조에 대해서 보다 많은 깨짐이 발생한다.

  • 1 (SRV_FORCE_IGNORE_CORRUPT)

서버가 깨진 페이지를 발견한다고 하더라도 계속 구동하도록 만든다. Try to make SELECT * FROM tbl_name로 하여금 깨진 인덱스 레코드와 페이지를 건너 띄도록 만들며, 이렇게 하면 테이블을 덤핑하는데 도움이 된다.

  • 2 (SRV_FORCE_NO_BACKGROUND)

메인 쓰레드가 구동되지 못하도록 한다. 만일 퍼지 연산 (purge operation)이 진행되는 동안 크래시가 발생한다면, 이 복구 값은 퍼지 연산이 실행되는 것을 막게 된다.

  • 3 (SRV_FORCE_NO_TRX_UNDO)

복구 다음에 트랜젝션 롤백을 실행하지 않는다.

  • 4 (SRV_FORCE_NO_IBUF_MERGE)

삽입 버퍼 병합 연산 (insert buffer merge operations)까지 금지한다. 만일 이 연산이 크래시의 원인이 된다면, 그것을 실행하지 않도록 한다. 테이블 통계값을 계산하지 않도록 한다.

  • 5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

데이터베이스를 시작할 때 운도 로그 (undo log)를 검사하지 않는다: InnoDB는 완벽하지 않은 트랜젝션도 실행된 것으로 다루게 된다.

  • 6 (SRV_FORCE_NO_LOG_REDO)

복구 연결에서 로그 롤-포워드 (roll-forward)를 실행하지 않는다.

 

강제 복구를 사용한다고 하더라도, 테이블을 덤프하기 위해 SELECT를 실행하거나, 또는 DROP 또는 CREATE 테이블을 사용할 수가 있다. 만일 주어진 테이블에 롤백이 되는 동안의 크래시의 원인이 된다는 것을 알게 되면, 그 테이블을 드롭 시킨다. 또한, 대형 임포트 (mass import) 또는 ALTER TABLE의 실패로 인해 발생한 장기간의 롤백 (runaway rollback)을 중지 시키기 위해서도 이것을 사용할 수가 있다. mysqld 프로세스를 죽이고 innodb_force_recovery3으로 설정함으로써 롤백 없이 데이터 베이스를 업데이트 시킨 상태로 가져올 수가 있으며, 그런 다음에는 장기간 롤백의 원인이 된 테이블을 DROP시킨다.

 

데이터베이스는 innodb_force_recovery에 대해서 논-제로 (non-zero) 값을 사용해야만 한다.

 

데이터베이스의 안전성을 확보하기 위해서, InnoDBinnodb_force_recovery 0보다 큰 값으로 설정되어 있을 때에는 사용자가 INSERT, UPDATE, 또는 DELETE 연산을 하지 못하도록 한다.

 

 

상위
14.2.8. InnoDB 데이터베이…
14.2.8.1. 강제로 InnoDB 복구…
14.2.8.2. 체크포인트
MySQL Korea 사이트의 컨텐츠 소유권은 (주)상상이비즈에 있으므로 무단전재를 금합니다.
ⓒ 2010-2011 ssebiz All Rights Reserved.