메뉴 닫기

mysql을 실행 하면 죽었다 살았다 반복

mysql 실행 후 netstat -ntlp로 확인 시 데몬이 죽었다 살았다를 반복.

ps -ef를 했을때는 데몬이 올라와 있는 것으로 확인

해서..mysql/data/에 있는 localhsot.err를 확인 해본 결과

InnoDB: is in the future! Current system log sequence number 86038560.

InnoDB: Your database may be corrupt or you may have copied the InnoDB

InnoDB: tablespace but not the InnoDB log files. See

InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html

메세지가 엄청나가 생긴 것을 확인 하였다.

[해결]

vi /etc/my.cnf

innodb_force_recovery = 4 >> 추가

mysql 재시작 후 확인 하니 데몬이 죽지 않고 정상적으로 잘 실행이 되어 있는 것을 확인 하였다.

참고로 위와 같은 증상 발생시 서버에 부화률이 상승이 시스템 다운 까지 되는 상황…….

[참고]

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보다 큰 값으로 설정되어 있을 때에는 사용자가 INSERTUPDATE, 또는 DELETE 연산을 하지 못하도록 한다.

 

[polldaddy rating=”7739789″]

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x