데이터 로드 전후에 대상 Amazon RDS DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. Amazon RDS DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업입니다. DB 스냅샷을 시작하면 데이터베이스가 백업되는 동안 DB 인스턴스에 대한 I/O 작업이 일시 중단됩니다.
필요한 경우 로드 직전에 DB 스냅샷을 만들면 데이터베이스를 로드 이전의 상태로 복원할 수 있습니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 꼭 로드하지 않아도 되도록 해주고, 새 데이터베이스 인스턴스를 시드하는 데 사용될 수도 있습니다.
아래 목록에 수행할 단계가 나와 있습니다. 각 단계에 대해서는 다음에 이어지는 섹션에서 자세히 설명합니다.
로드할 데이터를 포함한 플랫 파일을 만듭니다.
대상 DB 인스턴스에 액세스 중인 애플리케이션을 모두 중지합니다.
DB 스냅샷을 만듭니다.
Amazon RDS 자동 백업 비활성화를 고려하세요.
데이터를 로드합니다.
자동 백업을 다시 활성화합니다.
1단계: 로드할 데이터를 포함한 플랫 파일 만들기
쉼표로 구분된 값(CSV)과 같은 일반적인 형식을 사용하여 로드할 데이터를 저장합니다. 각 테이블에는 자체 파일이 있어야 하며, 여러 테이블에 대한 데이터를 같은 파일에 결합할 수 없습니다. 각 파일의 이름은 그에 상응하는 테이블과 같은 이름으로 지정합니다. 파일 확장명은 원하는 대로 정할 수 있습니다. 예를 들어, 테이블 이름이 sales
인 경우 파일 이름은 sales.csv
또는 sales.txt
일 수 있지만 sales_01.csv
일 수는 없습니다.
가능하면 항상 로드되는 테이블의 기본 키를 기준으로 데이터를 정렬하십시오. 그러면 로드 시간이 대폭 단축되고 데이터 스토리지 요구 사항이 최소화됩니다.
이 절차의 수행 속도와 효율성은 파일의 크기를 작게 유지하느냐에 좌우됩니다. 개별 파일의 압축되지 않은 크기가 1GiB보다 큰 경우에는 파일을 여러 개의 파일로 분할하고 각각 하나씩 따로 로드합니다.
Unix와 같은 시스템(Linux 포함)에서는 split
명령을 사용합니다. 예를 들어 다음 명령을 실행하면 sales.csv
파일이 1GiB 미만의 여러 파일로 분할되며, 줄 바꿈에서만 분할됩니다(-C 1024m). 새 파일 이름은 sales.part_00
, sales.part_01
등으로 지정됩니다.
split -C 1024m -d sales.csv sales.part_
다른 운영 체제에서는 이와 유사한 유틸리티를 사용할 수 있습니다.
2단계: 대상 DB 인스턴스에 액세스 중인 애플리케이션을 모두 중지
대량 로드를 시작하기 전에 로드하려는 대상 DB 인스턴스에 액세스하는 모든 애플리케이션의 활동을 중단합니다. 로드 중인 테이블 혹은 참조 테이블을 다른 세션이 수정하는 경우에는 더욱 더 중단해야 합니다. 그러면 로드 중에 발생하는 제약 조건 위반의 위험이 줄어들고 로드 성능이 향상됩니다. 또한 로드에 관여하지 않는 프로세스에 의한 변경 내용이 손실되지 않고 로드 직전의 시점으로 DB 인스턴스를 복원할 수 있습니다.
물론, 이것이 가능하지 않거나 유용하지 않을 수도 있습니다. 로드 전에 애플리케이션이 DB 인스턴스에 액세스하지 못하게 막을 수 없다면, 데이터의 가용성과 무결성을 보장하기 위한 일련의 단계를 수행하세요. 필요한 구체적인 단계는 특정 사용 사례와 사이트 요구 사항에 따라 크게 달라집니다.
3단계: DB 스냅샷 만들기
아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 이 단계를 건너뛰어도 됩니다. 그렇지 않을 경우, 필요하다면 DB 인스턴스의 DB 스냅샷을 만들면 DB 인스턴스를 로드 직전의 시점으로 복원할 수 있습니다. 앞서 언급한 바와 같이, DB 스냅샷을 시작하면 데이터베이스가 백업되는 동안 DB 인스턴스에 대한 I/O 작업이 몇 분간 일시 중단됩니다.
아래 예시에서는 AWS CLI create-db-snapshot
명령을 실행하여 AcmeRDS
인스턴스의 DB 스냅샷을 만들고 DB 스냅샷에 "preload"
식별자를 지정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds create-db-snapshot \ --db-instance-identifier
AcmeRDS
\ --db-snapshot-identifierpreload
Windows의 경우:
aws rds create-db-snapshot ^ --db-instance-identifier
AcmeRDS
^ --db-snapshot-identifierpreload
DB 스냅샷 기능에서 복원하는 기능을 사용하여 테스트 실행을 위한 테스트 DB 인스턴스를 만들거나 로드 중의 변경 사항을 실행 취소할 수도 있습니다.
DB 스냅샷에서 데이터베이스를 복원하면 모든 DB 인스턴스와 마찬가지로 고유 식별자와 엔드포인트가 있는 새 DB 인스턴스가 생성된다는 점을 꼭 명심해야 합니다. 엔드포인트를 변경하지 않고 DB 인스턴스를 복원해야 한다면, 우선 엔드포인트를 다시 사용할 수 있도록 DB 인스턴스를 삭제해야 합니다.
예를 들어 테스트 실행 또는 다른 테스트를 위한 DB 인스턴스를 만들려면 DB 인스턴스에 고유 식별자를 지정합니다. 예제에서 AcmeRDS-2
"는 식별자입니다. 이 예제는 AcmeRDS-2
와 연결된 엔드포인트를 사용하여 DB 인스턴스에 연결합니다.
대상 LinuxmacOS, 또는Unix:
aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier
AcmeRDS-2
\ --db-snapshot-identifierpreload
Windows의 경우:
aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier
AcmeRDS-2
^ --db-snapshot-identifierpreload
기존 엔드포인트를 재사용하려면 우선 DB 인스턴스를 삭제한 다음, 복원된 데이터베이스에 같은 식별자를 지정해야 합니다.
대상 LinuxmacOS, 또는Unix:
aws rds delete-db-instance \ --db-instance-identifier
AcmeRDS
\ --final-db-snapshot-identifierAcmeRDS-Final
aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifierAcmeRDS
\ --db-snapshot-identifierpreload
Windows의 경우:
aws rds delete-db-instance ^ --db-instance-identifier
AcmeRDS
^ --final-db-snapshot-identifierAcmeRDS-Final
aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifierAcmeRDS
^ --db-snapshot-identifierpreload
앞의 예제에서는 DB 인스턴스의 최종 DB 스냅샷을 생성한 후에 삭제합니다. 이 단계는 선택 사항이지만 권장됩니다.
4단계: Amazon RDS 자동 백업 비활성화를 고려하세요.
주의
특정 시점으로 복구를 수행을 유지할 필요가 있는 경우에는 자동 백업을 비활성화하지 마세요.
자동 백업을 비활성화하면 기존 백업이 전부 지워지므로, 자동 백업이 비활성화된 후에는 특정 시점으로 복구할 수 없습니다. 자동 백업 비활성화는 성능 최적화 수단으로서, 데이터 로드에 필수 사항은 아닙니다. 자동 백업을 비활성화해도 수동 DB 스냅샷에는 영향을 주지 않습니다. 기존의 모든 수동 DB 스냅샷을 계속 복원 작업에 사용할 수 있습니다.
자동 백업을 비활성화하면 로드 시간이 약 25% 단축되고 로드 중에 필요한 스토리지 공간의 양이 줄어듭니다. 아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 백업을 비활성화하는 것이 로드 속도를 높이고 백업에 필요한 추가 스토리지의 사용을 피하는 손쉬운 방법입니다. 하지만 이미 데이터가 있는 DB 인스턴스로 로드할 경우도 있습니다. 그렇다면 특정 시점으로 복구를 수행할 능력을 상실하는 데 따른 영향에 비해 백업을 해제할 때의 이점을 비교합니다.
DB 인스턴스에서는 기본적으로 자동 백업이 활성화되어 있습니다(보존 기간은 하루). 자동 백업을 비활성화하기 위해 백업 보존 기간을 0으로 설정합니다. 로드 후에는 백업 보존 기간을 0이 아닌 값으로 설정하여 백업을 다시 활성화할 수 있습니다. 백업을 설정하거나 해제하려면 Amazon RDS가 DB 인스턴스를 종료했다가 다시 시작하여 MariaDB 또는 MySQL 로깅을 설정하거나 해제합니다.
AWS CLI modify-db-instance
명령을 실행하여 백업 보존 기간을 0으로 설정하고 변경 사항을 즉시 적용합니다. 보존 기간을 0으로 설정하려면 DB 인스턴스를 다시 시작해야 하므로, 다시 시작 프로세스가 완료될 때까지 기다린 후 계속 진행합니다.
대상 LinuxmacOS, 또는Unix:
aws rds modify-db-instance \ --db-instance-identifier
AcmeRDS
\ --apply-immediately \ --backup-retention-period0
Windows의 경우:
aws rds modify-db-instance ^ --db-instance-identifier
AcmeRDS
^ --apply-immediately ^ --backup-retention-period0
AWS CLI describe-db-instances
명령으로 DB 인스턴스의 상태를 확인할 수 있습니다. 다음 예제에서는 AcmeRDS
DB 인스턴스의 DB 인스턴스 상태를 표시합니다.
aws rds describe-db-instances --db-instance-identifier
AcmeRDS
--query "*[].{DBInstanceStatus:DBInstanceStatus}"
DB 인스턴스 상태가 available
이면 계속할 준비가 된 것입니다.
5단계: 데이터 로드
MySQL LOAD DATA LOCAL INFILE
문을 사용하여 플랫 파일의 행을 데이터베이스 테이블로 읽어들입니다.
다음 예시는 이름이 sales.txt
인 파일에서 데이터베이스의 Sales
테이블로 데이터를 로드하는 방법을 보여줍니다.
mysql> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\'; Query OK, 1 row affected (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
LOAD DATA
문에 대한 자세한 내용은 MySQL 설명서
6단계: Amazon RDS 자동 백업 재활성화
로드가 완료된 후에는 백업 보존 기간을 로드 이전의 값으로 다시 설정하여 Amazon RDS 자동 백업을 다시 활성화합니다. 앞서 언급한 것처럼, Amazon RDS가 DB 인스턴스를 다시 시작하므로 잠시 작동이 중단되는 상황에 대비하십시오.
다음 예시에서는 AWS CLI modify-db-instance
명령을 실행하여 AcmeRDS
DB 인스턴스에서 자동 백업을 설정하고 보존 기간을 1일로 설정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds modify-db-instance \ --db-instance-identifier
AcmeRDS
\ --backup-retention-period1
\ --apply-immediately
Windows의 경우:
aws rds modify-db-instance ^ --db-instance-identifier
AcmeRDS
^ --backup-retention-period1
^ --apply-immediately