DB Failure & Recovery
DB Failure & Recovery
DB Failure
DB 시스템이 제대로 동작하지 않는 상태. 다음과 같이 세 가지 유형 존재.
- 트랜잭션 장애: 트랜잭션 수행 중 오류가 발생한 경우.
- 시스템 장애: 하드웨어의 결함으로 인해 메인 메모리 정보가 손실돼 수행할 수 없는 경우.
- 미디어 장애: 디스크의 결함으로 인해 데이터베이스가 손상된 경우.
DB Recovery
DB에 장애가 발생한 경우 장애가 발생하기 전의 일관된 상태로 복구시키는 것. 미리 복사된 데이터 사본을 이용해 복구. 다음과 같은 연산들 존재.
- Dump: DB 전체를 다른 저장 장치에 주기적으로 복사.
- Log: DB에서 변경 연산이 실행될 때마다 데이터를 변경하기 이전 값과 이후 값을 별도 파일에 기록.
- Redo: 가장 최근의 DB 복사본과 로그를 이용해 복사본 이후 모든 연산을 수행함으로써 원래대로 복구.
- Undo: 로그를 이용해 실행된 연산을 취소함으로써 DB를 원래대로 복구.
DB Recovery Methods
DB 회복을 수행하는 기법들로, 다음과 같이 존재.
- 로그 회복 기법
- 검사 시점 회복 기법
- 미디어 회복 기법
로그 회복 기법
Redo, undo 연산을 이용해 회복하는 기법. 변경한 데이터를 DB에 언제 저장하는지에 따라 회복 방법이 다름.
- 즉시 갱신 회복 기법
- 자연 갱신 회복 기법
즉시 갱신 회복 기법
- 트랜잭션 수행 중 변경한 연산의 결과가 바로 DB에 반영된 경우.
- 로그에 트랜잭션이 시작된 기록만 있다면 undo 연산만 실행해서 복구.
- 로그에 트랜잭션의 시작과 끝이 다 있다면 redo 연산을 실행해서 복구.
자연 갱신 회복 기법
- 트랜잭션이 수행 중 변경한 연산의 결과가 로그 파일에 기록되고, 커밋된 이후에 DB에 한 번에 반영되는 기법.
- 트랜잭션이 수행 중 오류가 발생한다면 로그에 기록된 내용만 버리면 됨.
- Undo 연산은 필요 없음, redo만 필요하고 로그에 변경 전 값을 기록할 필요 없음.
검사 시점 회복 기법
- 로그 회복 기법과 같은 방법으로 로그 기록을 이용하되, 일정 시간 간격으로 체크포인트를 둠.
- 체크포인트 이전에만 회복을 수행함으로 인해 시간 단축 가능.
미디어 회복 기법
- 디스크에 장애가 발생했을 때 사용할 수 있는 유일한 방법.
- 전체 DB를 일정 주기로 다른 안전한 저장 장치에 저장하는 dump를 이용.
- Redo 연산으로 복구시킴.
- Dump 자체에 오랜 시간이 소요됨.
mysqldump
MySQL에서 DB를 dump하기 위해 제공하는 도구. 다음과 같이 사용.
- DB 전체 덤프
mysqldump -u ${USERNAME} -p ${DBNAME} > output.sql
- 덤프로부터 DB 복구
mysql -u ${USERNAME} -p ${DBNAME} < output.sql
- DB 테이블 생성 정보 없이 내용만 덤프
mysqldump -u ${USERNAME} -p ${DBNAME} --no-create-info > output.sql
- DB 테이블 생성 정보는 없지만 컬럼명 추가해서 덤프
mysqldump -u ${USERNAME} -p ${DBNAME} --no-create-info --complete-insert > output.sql
- DB 특정 테이블만 덤프
mysqldump -u ${USERNAME} -p ${DBNAME} ${TABLENAME} > output.sql
References
- https://sangwoo0727.github.io/database/Database-10_failure_recovery/
- https://datamoney.tistory.com/m/265
- https://devpouch.tistory.com/m/114