Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Aurora RDS 백업과 복구
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2022-04-25
2019-04-01
32559
## 데이터베이스를 복원하기전에 데이터베이스를 복원하는 것은 쉬운일이 아니다. 복원하는 방법을 찾기전에, (가능한)복원할 일이 없도록 시스템과 운영정책을 만드는게 우선이다. - 애플리케이션 권한을 분리한다. : 애플리케이션에는 최소한의 권한만 부여한다. 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 툴로 확인해보자. ```shell $ aws rds describe-db-cluster-snapshots ``` ```json { "DBClusterSnapshots": [ { "Engine": "aurora", "SnapshotCreateTime": "2019-04-02T15:45:18.806Z", "VpcId": "vpc-0700d43bd5ba9b0a4", "DBClusterIdentifier": "joinc-test2", "DBClusterSnapshotArn": "arn:aws:rds:ap-northeast-2:522373083963:cluster-snapshot:joinc-snampshot-01", "MasterUsername": "yundream", "LicenseModel": "aurora", "Status": "available", "PercentProgress": 100, "DBClusterSnapshotIdentifier": "joinc-snampshot-01", "KmsKeyId": "arn:aws:kms:ap-northeast-2:522373083963:key/37f608e7-81e3-4a92-8759-b619b303a9bb", "ClusterCreateTime": "2019-04-02T15:38:17.623Z", "StorageEncrypted": true, "AllocatedStorage": 0, "EngineVersion": "5.6.serverless_10a", "SnapshotType": "manual", "AvailabilityZones": [ "ap-northeast-2a", "ap-northeast-2c" ], "IAMDatabaseAuthenticationEnabled": false, "Port": 0 } ] } ``` ## 복원 #### Snapshot로 복원 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 복원이라고 한다. 데이터베이스 클러스터 정보를 확인해보자. ```shell $ aws rds describe-db-clusters ``` ```json { "DBClusters": [ { "Capacity": 2, "MasterUsername": "yundream", "HttpEndpointEnabled": false, "ReadReplicaIdentifiers": [], "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-0f42012a784275f33" }, { "Status": "active", "VpcSecurityGroupId": "sg-0337a80bb0854e483" } ], "CopyTagsToSnapshot": false, "HostedZoneId": "ZLA2NUCOLGUUR", "EngineMode": "serverless", "Status": "available", "MultiAZ": false, "LatestRestorableTime": "2019-04-03T13:10:01.394Z", "PreferredBackupWindow": "15:03-15:33", "DBSubnetGroup": "awsstudy-subnet", "AllocatedStorage": 1, "BackupRetentionPeriod": 5, "PreferredMaintenanceWindow": "mon:19:33-mon:20:03", "Engine": "aurora", "Endpoint": "joinc-test2.cluster-c985nvk9gmsh.ap-northeast-2.rds.amazonaws.com", "EarliestRestorableTime": "2019-04-02T15:39:05.451Z", "IAMDatabaseAuthenticationEnabled": false, "ClusterCreateTime": "2019-04-02T15:38:17.623Z", "EngineVersion": "5.6.10a", "DeletionProtection": true, "ScalingConfigurationInfo": { "MinCapacity": 2, "AutoPause": true, "MaxCapacity": 4, "SecondsUntilAutoPause": 72300 }, "DBClusterIdentifier": "joinc-test2", "DbClusterResourceId": "cluster-YB77Y7FMCUGRZNROBPRAWEPQK4", "DBClusterMembers": [], "DBClusterArn": "arn:aws:rds:ap-northeast-2:522373083963:cluster:joinc-test2", "KmsKeyId": "arn:aws:kms:ap-northeast-2:522373083963:key/37f608e7-81e3-4a92-8759-b619b303a9bb", "StorageEncrypted": true, "AssociatedRoles": [], "DBClusterParameterGroup": "default.aurora5.6", "AvailabilityZones": [ "ap-northeast-2a", "ap-northeast-2c" ], "Port": 3306 } ] } ``` LatestRestorableTime이 있는데, 가장 최근 저장한 트랜잭션의 시간이다. 데이터베이스 관리자는 백업 보존 주기(backup retention period)에서 LatestRestorableTime 사이의 어떤 시간대든지 자유롭게 데이터베이스를 관리 할 수 있다. 백업 보존 주기를 15일로 설정했다면, 최대 과거 15일 까지의 데이터베이스 복원이 가능하다. - EarliestRestorableTime : 복원 가능한 가장 멀리 있는 시간 - LatestRestorableTime : 가장 최근 복원 시점. 즉 복원 가능한 시간은 RT는  이 된다. ```shell $ aws rds restore-db-cluster-to-point-in-time --source-db-cluster-identifier joinc-test2 --db-cluster-identifier mynewdb --restore-to-time 2019-04-03T10:43:53.615Z ``` * restore-db-cluster-to-point-in-time : point-in-time 방식으로 데이터베이스 클러스터를 복원한다. - --source-db-cluster-identifier : 복원하려는 데이터베이스 클러스터 이름 - --db-cluster-identifier : 새로만들 클러스터 이름 - --restore-to-time : 복원할 시간 성공적으로 복원하면 아래와 같이 새로운 데이터베이스 클러스터 정보를 확인 할 수 있다. mynewdb라는 이름의 데이터베이스가 실행된 걸 확인 할 수 있다. ```json { "DBCluster": { "MasterUsername": "yundream", "ReaderEndpoint": "mynewdb.cluster-ro-c985nvk9gmsh.ap-northeast-2.rds.amazonaws.com", "HttpEndpointEnabled": false, "ReadReplicaIdentifiers": [], "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-4cdf6421" } ], "CopyTagsToSnapshot": false, "HostedZoneId": "ZLA2NUCOLGUUR", "EngineMode": "serverless", "Status": "creating", "MultiAZ": false, "PreferredBackupWindow": "15:03-15:33", "DBSubnetGroup": "default", "AllocatedStorage": 1, "BackupRetentionPeriod": 5, "PreferredMaintenanceWindow": "mon:19:33-mon:20:03", "Engine": "aurora", "Endpoint": "mynewdb.cluster-c985nvk9gmsh.ap-northeast-2.rds.amazonaws.com", "IAMDatabaseAuthenticationEnabled": false, "ClusterCreateTime": "2019-04-03T12:47:48.833Z", "EngineVersion": "5.6.10a", "DeletionProtection": false, "DBClusterIdentifier": "mynewdb", "DbClusterResourceId": "cluster-T64JPIANDTADAVA44EQOALXIGQ", "DBClusterMembers": [], "DBClusterArn": "arn:aws:rds:ap-northeast-2:522373083963:cluster:mynewdb", "KmsKeyId": "arn:aws:kms:ap-northeast-2:522373083963:key/37f608e7-81e3-4a92-8759-b619b303a9bb", "StorageEncrypted": true, "AssociatedRoles": [], "DBClusterParameterGroup": "default.aurora5.6", "AvailabilityZones": [ "ap-northeast-2a", "ap-northeast-2c" ], "Port": 3306 } } ``` ## FAQ #### 자동백업과 스냅샷과의 차이점 RDS의 DB 인스턴스와 백업에는 두 가지 방법이 있다. 1. 자동 백업 2. 데이터베이스 스냅샷 데이터베이스 자동 백업을 활성화 하면 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 스냅샷만 인스턴스 삭제후에도 보관된다.
Recent Posts
vLLM을 이용해서 오픈소스 LLM 서비스 구축하기
Vertex Gemini 기반 AI 에이전트 개발 06. LLM Native Application 개발
최신 경량 LLM Gemma 3 테스트
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Archive Posts
Tags
Aurora
aws
backup
database
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags