메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

임의의 소스에서 MySQL 또는 MariaDB DB 인스턴스로 데이터 가져오기

로드할 데이터가 1GB보다 많거나 데이터가 MySQL 또는 MariaDB 데이터베이스가 아닌 곳에서 오는 경우 플랫 파일을 만들어 mysqlimport로 로드하는 것이 좋습니다. mysqlimport는 플랫 파일을 MySQL 또는 MariaDB로 로드할 목적으로 MySQL 및 MariaDB 클라이언트 소프트웨어와 함께 번들로 제공되는 또 하나의 명령줄 유틸리티입니다. mysqlimport에 대한 자세한 내용은 MySQL 문서의 mysqlimport - A Data Import Program을 참조하십시오.

또한, 데이터 로드 전후에 대상 Amazon RDS DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. Amazon RDS DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업본입니다. DB 스냅샷을 시작할 때 데이터베이스가 백업되는 동안 데이터베이스 인스턴스에 대한 I/O 작업이 일시 중단됩니다.

필요한 경우 로드 직전에 DB 스냅샷을 만들면 데이터베이스를 로드 이전의 상태로 복원할 수 있습니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 꼭 로드하지 않아도 되도록 해주고, 새 데이터베이스 인스턴스를 시드하는 데 사용될 수도 있습니다.

아래 목록에 수행할 단계가 나와 있습니다. 각 단계에 대해서는 아래에서 자세히 설명합니다.

  1. 로드할 데이터를 포함한 플랫 파일을 만듭니다.

  2. 대상 DB 인스턴스에 액세스 중인 애플리케이션을 모두 중지합니다.

  3. DB 스냅샷을 만듭니다.

  4. Amazon RDS 자동 백업 비활성화를 고려하십시오.

  5. mysqlimport를 사용하여 데이터를 로드합니다.

  6. 자동 백업을 다시 활성화합니다.

1단계: 로드할 데이터를 포함한 플랫 파일 만들기

CSV(쉼표로 구분된 값)와 같은 일반적인 형식을 사용하여 로드할 데이터를 저장합니다. 각 테이블에는 자체 파일이 있어야 하며, 여러 테이블에 대한 데이터를 같은 파일에 결합할 수 없습니다. 각 파일의 이름은 그에 상응하는 테이블과 같은 이름으로 지정합니다. 파일 확장명은 원하는 대로 정할 수 있습니다. 예를 들어 테이블 이름이 "sales"라면, 파일 이름은 "sales.csv" 또는 "sales.txt"로 지정할 수 있지만 "sales_01.csv"로 지정할 수는 없습니다.

가능하면 항상 로드되는 테이블의 기본 키를 기준으로 데이터를 정렬하십시오. 그러면 로드 시간이 대폭 단축되고 데이터 스토리지 요구 사항이 최소화됩니다.

이 절차의 수행 속도와 효율성은 파일의 크기를 작게 유지하느냐에 좌우됩니다. 개별 파일의 압축되지 않은 크기가 1GB보다 큰 경우에는 파일을 여러 개의 파일로 분할하고 각각 하나씩 따로 로드합니다.

Unix와 같은 시스템(Linux 포함)에서는 'split' 명령을 사용합니다. 예를 들어 다음 명령을 실행하면 sales.csv 파일이 1GB 미만의 여러 파일로 분할되며, 줄 바꿈에서만 분할됩니다(-C 1024m). 새 파일의 이름은 sales.part_00, sales.part_01 등으로 지정됩니다.

Copy
split -C 1024m -d sales.csv sales.part_

다른 운영 체제에서는 이와 유사한 유틸리티를 사용할 수 있습니다.

2단계: 대상 DB 인스턴스에 액세스 중인 애플리케이션을 모두 중지

큰 로드 작업을 시작하기 전에 로드할 대상 DB 인스턴스에 액세스 중인 모든 애플리케이션 활동을 중지합니다(특히 다른 세션에서 로드 중인 테이블이나 참조하는 테이블을 수정하려는 경우). 그러면 로드 중에 발생하는 제약 조건 위반의 위험이 줄어들고, 로드 성능이 향상되며, 로드에 관여하지 않는 프로세스에 의한 변경 내용이 손실되지 않고 로드 직전의 시점으로 데이터베이스 인스턴스를 복원할 수 있습니다.

물론, 이것이 가능하지 않거나 유용하지 않을 수도 있습니다. 로드 전에 애플리케이션이 DB 인스턴스에 액세스하지 못하게 막을 수 없다면, 데이터의 가용성과 무결성을 보장하기 위한 일련의 단계를 수행하십시오. 필요한 구체적인 단계는 특정 사용 사례와 사이트 요구 사항에 따라 크게 달라집니다.

3단계: DB 스냅샷 만들기

아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 이 단계를 건너뛰어도 됩니다. 그렇지 않을 경우, 필요하다면 DB 인스턴스의 DB 스냅샷을 만들면 데이터베이스 인스턴스를 로드 직전의 시점으로 복원할 수 있습니다. 앞서 언급한 바와 같이, DB 스냅샷을 시작할 때 데이터베이스가 백업되는 동안 데이터베이스 인스턴스에 대한 I/O 작업이 몇 분간 일시 중단됩니다.

아래 예제에서는 AWS CLI create-db-snapshot 명령을 사용하여 AcmeRDS 인스턴스의 DB 스냅샷을 만들고 DB 스냅샷에 "preload"라는 식별자를 지정합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Windows의 경우:

Copy
aws rds create-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

DB 스냅샷 기능에서 복원하는 기능을 사용하여 테스트 실행을 위한 테스트 데이터베이스 인스턴스를 만들거나 로드 중의 변경 사항을 "실행 취소"할 수도 있습니다.

DB 스냅샷에서 데이터베이스를 복원하면 모든 DB 인스턴스와 마찬가지로 고유 식별자와 엔드포인트가 있는 새 DB 인스턴스가 생성된다는 점을 꼭 명심해야 합니다. 엔드포인트를 변경하지 않고 데이터베이스 인스턴스를 복원해야 한다면, 우선 엔드포인트를 다시 사용할 수 있도록 DB 인스턴스를 삭제해야 합니다.

예를 들어 테스트 실행 또는 다른 테스트를 위한 DB 인스턴스를 만들려면 DB 인스턴스에 고유 식별자를 지정합니다. 이 예제에서는 "AcmeRDS-2"가 식별자이며 AcmeRDS-2와 연결된 엔드포인트를 사용하여 데이터베이스 인스턴스에 연결합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS-2 \ --db-snapshot-identifier preload

Windows의 경우:

Copy
aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS-2 ^ --db-snapshot-identifier preload

기존 엔드포인트를 재사용하려면 우선 데이터베이스 인스턴스를 삭제한 다음, 복원된 데이터베이스에 같은 식별자를 지정해야 합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds delete-db-instance \ --db-instance-identifier AcmeRDS \ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Windows의 경우:

Copy
aws rds delete-db-instance ^ --db-instance-identifier AcmeRDS ^ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

예제에서는 데이터베이스 인스턴스의 최종 DB 스냅샷을 생성한 후에 삭제합니다. 이는 선택 사항이며, 권장 사항은 아닙니다.

4단계: Amazon RDS 자동 백업 비활성화 고려

경고: 특정 시점으로 복구를 수행하는 능력을 유지할 필요가 있는 경우에는 자동 백업을 비활성화하지 마십시오. 자동 백업을 비활성화하면 기존 백업이 전부 지워지므로, 자동 백업이 비활성화된 후에는 특정 시점으로 복구할 수 없게 됩니다. 자동 백업 비활성화는 성능 최적화 수단으로서, 데이터 로드에 필수 사항은 아닙니다. 자동 백업을 비활성화해도 DB 스냅샷에는 영향을 주지 않습니다. 모든 기존 DB 스냅샷을 계속 복원 작업에 사용할 수 있습니다.

자동 백업을 비활성화하면 로드 시간이 약 25% 단축되고 로드 중에 필요한 스토리지 공간의 양이 줄어듭니다. 아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 백업을 비활성화하는 것이 로드 속도를 높이고 백업에 필요한 추가 스토리지의 사용을 피하는 손쉬운 방법입니다. 하지만 이미 데이터가 있는 DB 인스턴스로 로드할 경우에는 특정 시점으로 복구를 수행할 능력을 상실하는 데 따른 영향에 비해 백업 비활성화의 효과가 얼마나 클지 비교 검토해야 합니다.

DB 인스턴스에서는 기본적으로 자동 백업이 활성화되어 있습니다(보존 기간은 하루). 자동 백업을 비활성화하려면 백업 보존 기간을 0으로 설정해야 합니다. 로드 후에는 백업 보존 기간을 0이 아닌 값으로 설정하여 백업을 다시 활성화할 수 있습니다. 백업을 활성화하거나 비활성화하려면 Amazon RDS가 DB 인스턴스를 종료했다가 다시 시작하여 MySQL 또는 MariaDB 로깅을 설정하거나 해제해야 합니다.

AWS CLI modify-db-instance 명령을 사용하여 백업 보존 기간을 0으로 설정하고 변경 사항을 즉시 적용합니다. 보존 기간을 0으로 설정하려면 DB 인스턴스를 다시 시작해야 하므로, 다시 시작 프로세스가 완료될 때까지 기다린 후 계속 진행합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --apply-immediately \ --backup-retention-period 0

Windows의 경우:

Copy
aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --apply-immediately ^ --backup-retention-period 0

AWS CLI describe-db-instances 명령으로 DB 인스턴스의 상태를 확인할 수 있습니다. 예제에는 AcmeRDS 데이터베이스 인스턴스의 상태가 표시되어 있고 열 머리글을 표시하기 위해 --headers 옵션이 포함되어 있습니다.

Linux, OS X, Unix의 경우:

Copy
aws rds describe-db-instances \ --db-instance-identifier AcmeRDS \ --headers

Windows의 경우:

Copy
aws rds describe-db-instances ^ --db-instance-identifier AcmeRDS ^ --headers

[Status] 열에 해당 데이터베이스를 사용할 수 있는 것으로 표시되면 계속 진행할 수 있습니다.

5단계: 데이터 로드

mysqlimport 유틸리티를 사용하여 플랫 파일을 Amazon RDS로 로드합니다. 예제에서는 mysqlimport 유틸리티에 이름이 "sales"이고 확장명이 "part_"로 시작되는 모든 파일을 로드하라고 명령합니다. 이는 "분할" 예제에서 만든 모든 파일을 편리하게 로드할 수 있는 방법입니다. --compress 옵션을 사용하여 네트워크 트래픽을 최소화합니다. --fields-terminated-by=',' 옵션은 CSV 파일에 사용되고, --local 옵션은 수신 데이터가 클라이언트에 있음을 지정합니다. --local 옵션이 없으면 Amazon RDS DB 인스턴스가 데이터베이스 호스트에서 데이터를 찾으므로, --local 옵션을 항상 지정하십시오.

Linux, OS X, Unix의 경우:

Copy
mysqlimport --local \ --compress \ --user=username \ --password \ --host=hostname \ --fields-terminated-by=',' Acme sales.part_*

Windows의 경우:

Copy
mysqlimport --local ^ --compress ^ --user=username ^ --password ^ --host=hostname ^ --fields-terminated-by=',' Acme sales.part_*

매우 큰 데이터 로드의 경우, 파일을 로드하는 사이에 추가 DB 스냅샷을 주기적으로 만들고 로드된 파일을 기록합니다. 문제가 발생할 경우 마지막 DB 스냅샷 시점에서 손쉽게 재개할 수 있으므로, 다시 로드하여 긴 시간을 낭비하는 상황을 피할 수 있습니다.

6단계: Amazon RDS 자동 백업 활성화

로드가 완료된 후에는 백업 보존 기간을 로드 이전의 값으로 다시 설정하여 Amazon RDS 자동 백업을 다시 활성화합니다. 앞서 언급한 것처럼, Amazon RDS가 DB 인스턴스를 다시 시작하게 되므로 잠시 작동이 중단되는 상황에 대비하십시오.

예제에서는 AWS CLI modify-db-instance 명령을 사용하여 AcmeRDS DB 인스턴스에 대한 자동 백업을 활성화하고 보존 기간을 1일로 설정합니다.

Linux, OS X, Unix의 경우:

Copy
aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --backup-retention-period 1 \ --apply-immediately

Windows의 경우:

Copy
aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --backup-retention-period 1 ^ --apply-immediately