Amazon S3로 DB 스냅샷 데이터 내보내기

RDS 스냅샷을 S3에 저장하는 옵션은 분석용으로 활용 가능합니다. 이를 확인하기위해 테스트를 진행하였습니다.

Amazon S3로 DB 스냅샷 데이터 내보내기
Photo by Tobias Fischer / Unsplash

개요

데이터베이스 스냅샷을 S3로 내보낸 후 원복되지 않는 일이 발생하였습니다.

과정 중 오류를 테스트해보고 왜 문제가 발생했는지를 점검하였습니다. 결론적으로는 RDS Snapshot to S3는 백업용이 아닌 데이터 분석용으로 S3에 저장하는 것이며 이후 Athena 혹은 Redshift로 검색 가능하게 Parquet 형식으로 저장된다는 것을 확인하였습니다.

아래 내용은 해당 테스트 결과입니다.

Process

RDS 더미 데이터가 필요합니다.

user_data_script = f"""#!/bin/bash
# RDS 인스턴스 정보
RDS_ENDPOINT="{rds_endpoint}"
RDS_PORT="3306"
RDS_USER="admin"
RDS_PASSWORD="PASSWORD"

# 작업 디렉토리 생성 및 이동
WORK_DIR="test_db_loader"
mkdir -p $WORK_DIR
cd $WORK_DIR

# 필요한 패키지 설치
yum update -y
yum install -y git mariadb105

# test_db 리포지토리 클론
git clone https://github.com/datacharmer/test_db.git
cd test_db

# RDS 인스턴스에 연결 및 데이터 로드
mysql -h $RDS_ENDPOINT -P $RDS_PORT -u $RDS_USER -p$RDS_PASSWORD << EOF
SOURCE employees.sql;
SHOW DATABASES;
USE employees;
SHOW TABLES;
SELECT COUNT(*) FROM employees;
EOF

# 정리
cd ../..
rm -rf $WORK_DIR

echo "Data loading completed!" > /home/ec2-user/data_load_result.txt

# RDS 접속 명령어 저장
echo "mysql -h $RDS_ENDPOINT -P $RDS_PORT -u $RDS_USER -p$RDS_PASSWORD" > /home/ec2-user/connect_to_rds.sh
chmod +x /home/ec2-user/connect_to_rds.sh

echo "To connect to RDS, use the following command:" >> /home/ec2-user/data_load_result.txt
echo "sh /home/ec2-user/connect_to_rds.sh" >> /home/ec2-user/data_load_result.txt
"""
S3에서 내보낸 스냅샷 데이터를 새 DB 인스턴스로 복원하거나 S3의 스냅샷 데이터를 기존 DB 인스턴스로 가져올 수 없습니다.
Notion Image

DB 스냅샷 데이터를 Amazon S3 버킷으로 내보낼 수 있습니다. 내보내기 프로세스는 백그라운드에서 실행되며 활성 데이터베이스의 성능에는 영향을 주지 않습니다. DB 스냅샷을 내보낼 때 Amazon RDS는 스냅샷에서 데이터를 추출하여 Amazon S3 버킷에 저장합니다. 데이터는 압축되고 일관된 Apache Parquet 형식으로 저장됩니다.

수동 스냅샷, 자동화된 시스템 스냅샷, AWS Backup 서비스에서 생성된 수동 스냅샷을 포함하여 모든 유형의 DB 스냅샷을 내보낼 수 있습니다. 기본적으로 스냅샷의 모든 데이터가 내보내집니다. 그러나 특정한 데이터베이스, 스키마 또는 테이블 집합을 내보내도록 선택할 수 있습니다.

데이터를 내보낸 후에는 Amazon Athena 또는 Amazon Redshift Spectrum 같은 도구를 통해 직접 내보낸 데이터를 분석할 수 있습니다. Parquet 데이터를 읽는 데 Athena를 사용하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서의 Parquet SerDe를 참조하세요. Parquet 데이터를 읽는 데 Redshift Spectrum을 사용하는 방법에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서에서 열 기반 데이터 형식의 COPY를 참조하세요.


Amazon S3로 DB 스냅샷 데이터를 내보내면 직접 RDS로 복구하는 것은 불가능합니다. 하지만 이 데이터를 활용하여 RDS 데이터베이스를 재생성하는 방법이 있습니다.

프로세스는 다음과 같습니다:

  1. S3에 내보낸 데이터는 일반적으로 Parquet 형식입니다.
  2. 이 데이터를 RDS로 직접 가져올 수 없습니다.
  3. 하지만 다음과 같은 방법으로 데이터를 RDS에 로드할 수 있습니다:
    • Amazon Athena를 사용하여 S3의 데이터를 쿼리
    • 쿼리 결과를 CSV 등의 형식으로 추출
    • 추출한 데이터를 새로운 RDS 인스턴스로 가져오기

이 과정은 원본 RDS의 완전한 복구가 아니라 데이터 마이그레이션에 가깝습니다. 스키마, 인덱스, 저장 프로시저 등은 별도로 재생성해야 할 수 있습니다. 완전한 RDS 복구가 필요하다면, RDS 스냅샷을 직접 사용하는 것이 더 효과적입니다. S3로의 내보내기는 주로 데이터 분석이나 백업 목적으로 사용됩니다.

Notion Image

bookmark