출쳐 : 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 부터 순차적으로 진행
만일 데이터베이스 페이지 깨짐이 존재한다면, 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 부터 순차적으로 진행