데이터베이스를 복원하는 것은 쉬운일이 아니다. 복원하는 방법을 찾기전에, (가능한)복원할 일이 없도록 시스템과 운영정책을 만드는게 우선이다.
애플리케이션 권한을 분리한다. : 애플리케이션에는 최소한의 권한만 부여한다. DROP, CREATE 같은 권한은 아예 실행하지 못하게한다. DELETE도 넣지 말고 그냥 flag 표시만한다. DELETE나 UPDATE를 할 경우 조건절을 명확히 검사한다.
프러덕트 영역의 데이터베이스로의 접근을 엄격히 제한한다. 접근이 필요한 경우 필요한 권한만 준다. 상태를 모니터링하러 접속하는데 DELETE, UPDATE 권한을 모두 줄 필요는 없다. SELECT 권한으로도 충분하다.
PoryxSQL 같은 솔류션을 이용해서 DELETE나 UPDATE 등에서 WHERE 절을 빼먹는 치명적인 실수를 막도록 하자.
위의 조치들을 먼저 수행하고나서 백업&복원 정책을 수립한다.
Aurora 서버리스 RDS 백업
RDS Aurora 서버리스를 기준으로 한다. 클래식 RDS, RDS Aurora 모두 큰 차이는 없다.
자동백업
Aurora는 클러스터 볼륨을 자동으로 백업을 한다. 백업한 데이터는 백업 보유 기간(Backet retion period)동안 보존한다. 보존기간은 1일에서 35일까지 설정할 수 있다. 사용자는 백업데이터로 부터, 신속하게 데이터베이스를 복원할 수 있다. 백업데이터가 기록될때 성능저하나 데이터베이스 중단을 걱정하지 않아도 된다.
보존기간을 넘겨서 백업을 보존하고 싶다면 메뉴얼하게 클러스터 볼륨의 스냅샷을 만드는 방법도 있다.
스냅샷 만들기
데이터베이스 관리자는 원하는 시점에 데이터베이스에 대한 스냅샷을 만들 수 있다.
데이터베이스를 선택한 다음 Action > Take snapshot를 선택한다.
스냅샷 이름을 입력하고 Take Snapshot 버튼을 클릭하면 스냅샷이 만들어진다.
RDS > Snapshots 에서 스냅샷 목록을 확인 할 수 있다. AWS cli 툴로 확인해보자.
# aws rds describe-db-cluster-snapshots
AWS는 개별 데이터베이스가 아닌 전체 DB 클러스터를 백업하여, 스토리지 볼륨 스냅샷을 만든다. 사용자는 이 스냅샷으로 부터 새로운 데이터베이스 클러스터를 만들 수 있다.
데이터베이스 클러스터를 선택 하고 Take Snapshot을 클릭한다.
스냅샷 이름을 입력하고 Take Snapshot버튼을 클릭하면 스냅샷이 만들어진다. 웹 콘솔에서 데이터베이스 클러스터를 선택한 다음 Maintenace & backups을 클릭하면 스냅샷 정보를 확인 할 수 있다.
Automated backups : Enabled 상태다.
Earliest restorable time : 복구 가능한 마지막 시간
Latest restore time : 복구 가능한 가장 최근 시간 (보통 5분 전까지 복구가능하다.)
Snapshots : 스냅샷 파일들을 확인 할 수 있다. Automated backups가 enabled 상태라서 주기적으로 자동 백업된다. 자동으로 생성된 스냅샷은 automated가 붙고, 유저가 만든 스냅샷은 manual이 붙는다.
Point-in-time 복원
AWS Aurora 데이터베이스는 5분마다 5분동안 있었던 모든 트랜젹션을 저장한다. 이 데이터를 이용해서 원하는 시간대의 데이터베이스를 복원 할 수 있다. 이 복원타입을 Point-in-time 복원이라고 한다. 데이터베이스 클러스터 정보를 확인해보자.
LatestRestorableTime이 있는데, 가장 최근 저장한 트랜잭션의 시간이다. 데이터베이스 관리자는 백업 보존 주기(backup retention period)에서 LatestRestorableTime 사이의 어떤 시간대든지 자유롭게 데이터베이스를 관리 할 수 있다. 백업 보존 주기를 15일로 설정했다면, 최대 과거 15일 까지의 데이터베이스 복원이 가능하다.
데이터베이스 자동 백업을 활성화 하면 RDS는 매일 자동으로 데이터베이스에 대한 스냅샷을 만들고, 트랜잭션 로그를 캡처한다. Point-in-time 복구를 시작하면, 사용자가 요청한 특정 시점으로 북구하기 위해서 저장된 일일 백업과 트랜잭션로그를 이용해서 데이터베이스를 복구한다. 데이터베이스 복구기간은 최대 35일이다.
데이터베이스 스냅샷은 사용자가 원할 때 만들어서 복구 할 수 있다. 복구는 create-db-snapshot 명령을 사용한다.
백업보존기간
백업보존기간동안 DB 인스턴스의 자동백업로그가 저장된다. 백업이 진행중일 때는 스토리지 I/O가 몇 초 가량 중지되며, 이에 따른 애플리케이션 지연시간이 증가 할 수 있다. 다중 AZ 배포를 사용하면 예비 복제본에 대해서 백업이 수행되기 때문에 I/O가 중단되지 않는다.
자동 백업과 DB 스냅샷의 저장 위치
S3에 저장된다. 하지만 계정 S3 버킷에서는 확인 할 수 없다. DescribeDBSnapshot API 혹은 describe-db-snapshots 명령으로 DB 스냅샷 목록을 확인 할 수 있다.
DB 인스턴스를 삭제하면 백업과 스냅샷은 어떻게 되는가
DB 인스턴스를 삭제 할 때, 최종 DB 스냅샷을 생성 할 수 있다. 이 DB 스냅샷을 이용해서 나중에 데이터베이스를 복구 할 수 있다. 자동백업은 DB 인스턴스가 삭제될때 함께 삭제된다. 유저가 수동으로 생성한 DB 스냅샷만 인스턴스 삭제후에도 보관된다.
Contents
데이터베이스를 복원하기전에
Aurora 서버리스 RDS 백업
자동백업
스냅샷 만들기
복원
Snapshot로 복원
Point-in-time 복원
FAQ
자동백업과 스냅샷과의 차이점
백업보존기간
자동 백업과 DB 스냅샷의 저장 위치
DB 인스턴스를 삭제하면 백업과 스냅샷은 어떻게 되는가
Recent Posts
Archive Posts
Tags