출쳐 : http://www.mysqlkorea.com/
만일 데이터베이스 페이지 깨짐이 존재한다면, 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 makeSELECT * 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_recovery를 3으로 설정함으로써 롤백 없이 데이터 베이스를 업데이트 시킨 상태로 가져올 수가 있으며, 그런 다음에는 장기간 롤백의 원인이 된 테이블을 DROP시킨다.
데이터베이스는 innodb_force_recovery에 대해서 논-제로 (non-zero) 값을 사용해야만 한다.
데이터베이스의 안전성을 확보하기 위해서, InnoDB는 innodb_force_recovery가 0보다 큰 값으로 설정되어 있을 때에는 사용자가 INSERT, UPDATE, 또는 DELETE 연산을 하지 못하도록 한다.
===========================================================
작업중 여러대의 innodb 가 깨져서 고생 했음..
mysql, mariadb, ubuntu 전부다 사용해봤는데 다 잘됨
innodb_force_recovery = 4 해당 라인 추가 후 정상으로 데몬 오라오면
덤프 후 다시 복구.
** 기본 값을 1 부터 순차적으로 진행
0 개의 댓글