가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기 - Amazon Relational Database Service

가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기

라이브 애플리케이션을 지원하는 외부 MariaDB 또는 MySQL 데이터베이스에서 RDS for MariaDB 인스턴스, RDS for MySQL 인스턴스 또는 RDS for MySQL 다중 AZ DB 클러스터로 데이터를 가져와야 할 경우가 있습니다. 다음 절차를 통해 애플리케이션 가용성에 미치는 영향을 최소화하세요. 이 절차는 대규모 데이터베이스로 작업하는 경우에도 유용합니다. 이 절차를 통해 네트워크를 거쳐 AWS로 전달되는 데이터의 양을 줄여 가져오기 비용을 줄일 수 있습니다.

이 절차에서는 데이터베이스 데이터의 복사본을 Amazon EC2 인스턴스로 전송하고 데이터를 새 Amazon RDS 데이터베이스로 가져옵니다. 그런 다음, 애플리케이션을 Amazon RDS 데이터베이스로 리디렉션하기 전에 복제를 사용하여 Amazon RDS 데이터베이스를 라이브 외부 인스턴스에 맞춰 최신 상태로 업데이트합니다. 외부 인스턴스가 MariaDB 10.0.24 이상이고 대상 인스턴스가 RDS for MariaDB일 경우에는 글로벌 트랜잭션 식별자(GTID)를 기반으로 MariaDB 복제를 구성합니다. 그렇지 않으면 이진 로그 좌표를 기반으로 복제를 구성합니다. GTID 기반 복제가 더욱 신뢰성이 높은 방법이므로 외부 데이터베이스에서 지원된다면 GTID 기반 복제를 사용하는 것이 좋습니다. 자세한 내용은 MariaDB 설명서에서 Global Transaction ID 단원을 참조하세요.

참고

RDS for MySQL DB 인스턴스에 데이터를 가져오고자 하며 시나리오가 이 방법을 지원하는 경우 백업 파일 및 Amazon S3를 사용하여 Amazon RDS 내부 및 외부로 데이터를 이동하는 것이 좋습니다. 자세한 내용은 Amazon RDS for MySQL DB 인스턴스로 백업 복원 섹션을 참조하세요.

다음 다이어그램은 외부 MySQL 데이터베이스를 Amazon RDS의 MySQL 데이터베이스로 가져오는 것을 보여 줍니다.

외부 MySQL 데이터베이스를 Amazon RDS의 MySQL 데이터베이스로 가져오는 것을 보여 주는 워크플로

작업 1: 기존 데이터베이스의 복사본 만들기

최소한의 가동 중지 시간으로 대량의 데이터를 RDS for MariaDB 또는 RDS for MySQL 데이터베이스로 마이그레이션하는 프로세스에서 첫 번째 단계는 원본 데이터의 복사본을 만드는 것입니다.

다음 다이어그램은 MySQL 데이터베이스의 백업을 만드는 방법을 보여 줍니다.

MySQL 데이터베이스의 백업 만드는 방법을 보여 주는 워크플로

mysqldump 유틸리티를 사용하여 SQL 또는 구분 기호로 분리된 텍스트 형식으로 데이터베이스 백업본을 만들 수 있습니다. MariaDB 10.5에서는 이 클라이언트를 mariadb-dump라고 합니다. MariaDB 11.0.1부터 mysqldump 대신 mariadb-dump를 사용해야 합니다. 비프로덕션 환경에서 각각의 형식으로 테스트 실행을 통해 어떤 방법을 사용해야 mysqldump 실행 시간이 최소화되는지 확인하는 것을 권장합니다.

또한, 로드를 위해 구분 기호로 분리된 텍스트 형식을 사용할 때의 이점에 대해 mysqldump 성능상의 이점을 비교 검토하는 것을 권장합니다. 구분 기호로 분리된 텍스트 형식을 사용하는 백업에서는 덤프되는 각 테이블에 대해 탭으로 구분된 텍스트 파일이 생성됩니다. 데이터베이스를 가져오는 데 필요한 시간을 줄이기 위해 LOAD DATA LOCAL INFILE 명령을 사용하여 이런 파일을 병렬로 로드할 수 있습니다. 자세한 내용은 Load the data for MariaDB 또는 Load the data for MySQL을 참조하세요.

백업 작업을 시작하기 전에 Amazon RDS로 복사할 MySQL 또는 MariaDB 데이터베이스에서 복제 옵션을 설정해야 합니다. 복제 옵션에는 이진 로깅 활성화와 고유한 서버 ID 설정이 포함됩니다. 이러한 옵션을 설정하면 서버가 데이터베이스 트랜잭션 로깅을 시작하고 이 프로세스의 후반부에 소스 복제 인스턴스가 되도록 서버를 준비시킵니다.

다음 권장 사항과 고려 사항을 잘 파악하고 있어야 합니다.

  • 데이터베이스의 일관된 상태를 덤프하기 때문에 --single-transaction와 함께 mysqldump 옵션을 사용하세요. 덤프 파일이 올바른지 확인하려면 mysqldump가 실행되는 동안 데이터 정의 언어(DDL) 문을 실행하지 마시기 바랍니다. 이러한 작업에 대한 유지 관리 기간을 예약할 수 있습니다.

  • 덤프 파일에서 다음 스키마를 제외합니다.

    • sys

    • performance_schema

    • information_schema

    mysqldumpmariadb-dump 유틸리티는 기본적으로 이러한 스키마를 제외합니다.

  • 사용자 및 권한을 마이그레이션해야 하는 경우 이를 다시 생성하는 데이터 제어 언어(DCL)를 생성하는 도구 사용을 고려합니다. 예를 들어 pt-show-grants 유틸리티가 있습니다.

복제 옵션을 설정하려면

  1. my.cnf 파일을 편집합니다. 이 파일은 보통 /etc 아래에 있습니다.

    sudo vi /etc/my.cnf

    log_binserver_id 옵션을 [mysqld] 섹션에 추가합니다. log_bin 옵션은 이진 로그 파일에 대한 파일 이름 식별자를 제공합니다. server_id 옵션은 소스-복제본 관계에서 서버의 고유 식별자를 제공합니다.

    다음 예제에서는 my.cnf 파일의 업데이트된 [mysqld] 섹션을 보여줍니다.

    [mysqld] log-bin=mysql-bin server-id=1

    자세한 내용은 MySQL 설명서의 Setting the Replication Source Configuration을 참조하세요.

  2. 다중 AZ DB 클러스터를 사용한 복제의 경우 ENFORCE_GTID_CONSISTENCYGTID_MODE 파라미터를 ON으로 설정합니다.

    mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
    mysql> SET @@GLOBAL.GTID_MODE = ON;

    DB 인스턴스를 사용한 복제에는 이러한 설정이 필요하지 않습니다.

  3. mysql 서비스를 다시 시작합니다.

    sudo service mysqld restart

기존 데이터베이스의 백업 복사본 만들기

  1. SQL 또는 구분 기호로 분리된 텍스트 형식을 지정하는 mysqldump 유틸리티 또는 mariadb-dump 유틸리티를 사용하여 데이터 백업을 만듭니다.

    MySQL 8.0.25 이하 버전에서는 서버 간 복제를 시작할 때 사용할 수 있는 백업 파일을 만들려면 --master-data=2를 지정합니다. MySQL 8.0.26 이상 버전에서는 서버 간 복제를 시작할 때 사용할 수 있는 백업 파일을 만들려면 --source-data=2를 지정합니다. 자세한 내용은 MySQL 설명서의 mysqldump — A Database Backup Program을 참조하세요.

    성능을 개선하고 데이터 무결성을 보장하려면 mysqldump--order-by-primary--single-transaction 옵션을 사용합니다.

    백업에 MySQL 시스템 데이터베이스가 포함되지 않도록 하려면 mysqldump--all-databases 옵션을 사용하지 마세요. 자세한 내용은 MySQL 설명서의 Creating a Data Snapshot Using mysqldump를 참조하세요.

    필요한 경우 chmod를 사용하여 백업 파일이 만들어질 디렉터리가 쓰기 가능한 디렉터리가 되도록 하세요.

    중요

    Windows에서는 명령 창을 관리자 권한으로 실행하십시오.

    • SQL 출력을 표시하려면 다음 명령을 사용합니다.

      대상 LinuxmacOS, 또는Unix:

      sudo mysqldump \ --databases database_name \ --master-data=2 \ --single-transaction \ --order-by-primary \ -r backup.sql \ -u local_user \ -ppassword
      참고

      보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

      Windows의 경우:

      mysqldump ^ --databases database_name ^ --master-data=2 ^ --single-transaction ^ --order-by-primary ^ -r backup.sql ^ -u local_user ^ -ppassword
      참고

      보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

    • 구분 기호로 분리된 텍스트 출력을 표시하려면 다음 명령을 사용합니다.

      대상 LinuxmacOS, 또는Unix:

      sudo mysqldump \ --tab=target_directory \ --fields-terminated-by ',' \ --fields-enclosed-by '"' \ --lines-terminated-by 0x0d0a \ database_name \ --master-data=2 \ --single-transaction \ --order-by-primary \ -ppassword

      Windows의 경우:

      mysqldump ^ --tab=target_directory ^ --fields-terminated-by "," ^ --fields-enclosed-by """ ^ --lines-terminated-by 0x0d0a ^ database_name ^ --master-data=2 ^ --single-transaction ^ --order-by-primary ^ -ppassword
      참고

      보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

      Amazon RDS 데이터베이스에서 저장 프로시저, 트리거, 함수 또는 이벤트를 수동으로 만들어야 합니다. 복사 중인 데이터베이스에 이런 객체가 하나라도 있는 경우에는 mysqldump를 실행할 때 이런 객체를 제외합니다. 이렇게 하려면 mysqldump 명령에 다음 인수를 포함하세요.

      • --routines=0

      • --triggers=0

      • --events=0

      MySQL 8.0.22 이하 버전 및 MariaDB 버전의 경우 mysqldump를 실행하고 구분된 텍스트 형식을 지정하면 CHANGE MASTER TO 설명이 반환됩니다. 이 설명에는 마스터 로그 파일 이름과 위치가 포함됩니다. MySQL 8.0.23 이상 버전의 경우 구분된 텍스트 형식을 사용하여 mysqldump를 실행하면 CHANGE REPLICATION SOURCE TO 설명이 반환됩니다. 이 설명에는 소스 로그 파일 이름과 위치가 포함됩니다. 외부 인스턴스가 MariaDB 10.0.24 이상 버전 또는 MySQL 8.0.23 이상 버전이 아닌 경우 MASTER_LOG_FILEMASTER_LOG_POS의 값을 확인합니다. 복제를 설정할 때 이러한 값이 필요합니다.

      MariaDB 버전과 MySQL 8.0.22 이하 버전에 대해 다음 출력이 반환됩니다.

      -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;

      MySQL 8.0.23 이상 버전에 대해 다음 출력이 반환됩니다.

      -- Position to start replication or point-in-time recovery from -- -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;

      MySQL 8.0.22 이하 버전에서 SQL 형식을 사용하는 경우 백업 파일의 CHANGE MASTER TO 설명에서 마스터 로그 파일 이름 및 위치를 가져올 수 있습니다. MySQL 8.0.23 이상 버전에서 SQL 형식을 사용하는 경우 백업 파일의 CHANGE REPLICATION SOURCE TO 설명에서 소스 로그 파일 이름 및 위치를 가져올 수 있습니다. 외부 인스턴스가 MariaDB 버전 10.0.24 이상일 경우에는 GTID를 다음 단계에서 가져올 수 있습니다.

  2. 사용하는 외부 인스턴스가 MariaDB 버전 10.0.24 이상일 경우 GTID 기반 복제를 사용합니다. 외부 MariaDB 인스턴스에서 SHOW MASTER STATUS를 실행하여 이진 로그 파일 이름 및 위치를 가져온 다음, 외부 MariaDB 인스턴스에서 BINLOG_GTID_POS를 실행하여 GTID로 변환합니다.

    SELECT BINLOG_GTID_POS('binary_log_file_name', binary_log_file_position);

    반환된 GTID를 기록해 둡니다. 복제를 구성하는 데 GTID가 필요합니다.

  3. 복사된 데이터를 압축하여 데이터를 Amazon RDS 데이터베이스로 복사하는 데 필요한 네트워크 리소스의 양을 줄입니다. 백업 파일의 크기를 기록해 둡니다. Amazon EC2 인스턴스를 얼마나 크게 만들지 결정할 때 이 정보가 필요합니다. 모두 완료되었으면, GZIP 또는 선호하는 압축 유틸리티를 사용하여 백업 파일을 압축합니다.

    • SQL 출력을 압축하려면 다음 명령을 사용합니다.

      gzip backup.sql
    • 구분 기호로 분리된 텍스트 출력을 압축하려면 다음 명령을 사용합니다.

      tar -zcvf backup.tar.gz target_directory

작업 2: Amazon EC2 인스턴스 만들기 및 압축된 데이터베이스 복사

압축된 데이터베이스 백업 파일을 Amazon EC2 인스턴스로 복사할 때는 데이터베이스 인스턴스 사이에서 압축되지 않은 데이터를 직접 복사할 때보다 네트워크 리소스를 덜 사용합니다. 데이터가 Amazon EC2에 있으면 MySQL 또는 MariaDB 데이터베이스로 바로 데이터를 복사할 수 있습니다. 네트워크 리소스의 비용을 절약하려면 Amazon EC2 인스턴스가 Amazon RDS DB 인스턴스와 같은 AWS 리전에 있어야 합니다. Amazon EC2 인스턴스를 Amazon RDS 데이터베이스와 같은 AWS 리전에 두면 가져오기 도중의 네트워크 대기 시간도 줄어듭니다.

다음 다이어그램은 데이터베이스 백업을 Amazon EC2 인스턴스로 복사하는 것을 보여줍니다.

Amazon EC2 인스턴스에 데이터베이스 백업을 복사하는 것을 보여 주는 워크플로

Amazon EC2 인스턴스를 만들고 데이터를 복사하려면

  1. Amazon RDS 데이터베이스를 만들려는 AWS 리전에서 가상 프라이빗 클라우드(VPC), VPC 보안 그룹 및 VPC 서브넷을 만듭니다. VPC 보안 그룹의 인바운드 규칙에서 애플리케이션에 필요한 IP 주소가 AWS에 연결하도록 허용하는지 확인합니다. IP 주소의 범위(예: 203.0.113.0/24) 또는 다른 VPC 보안 그룹을 지정할 수 있습니다. Amazon VPC 콘솔을 사용하여 VPC, 서브넷 및 보안 그룹을 만들고 관리할 수 있습니다. 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서Getting started with Amazon VPC를 참조하세요.

  2. Amazon EC2 콘솔을 열고 Amazon EC2 인스턴스와 Amazon RDS 데이터베이스를 모두 포함하는 AWS 리전을 선택합니다. 1단계에서 만든 VPC, 서브넷 및 보안 그룹을 사용하여 Amazon EC2 인스턴스를 시작합니다. 데이터베이스 백업 파일이 압축되어 있지 않을 때는 이 파일을 위한 충분한 스토리지 공간을 가진 인스턴스 유형을 선택해야 합니다. Amazon EC2 인스턴스에 관한 세부 정보는 Amazon Elastic Compute Cloud 사용 설명서Getting started with Amazon EC2를 참조하세요.

  3. Amazon EC2 인스턴스에서 Amazon RDS 데이터베이스로 연결하려면 VPC 보안 그룹을 편집하세요. EC2 인스턴스의 프라이빗 IP 주소를 지정하는 인바운드 규칙을 추가합니다. EC2 콘솔 창에 있는 인스턴스 창의 세부 정보 탭에서 프라이빗 IP 주소를 찾을 수 있습니다. VPC 보안 그룹을 편집하고 인바운드 규칙을 추가하려면 EC2 콘솔 탐색 창에서 보안 그룹(Security Groups)를 선택하고 보안 그룹을 선택한 다음 EC2 인스턴스의 프라이빗 IP 주소를 지정하는 MySQL 또는 Aurora에 대한 인바운드 규칙을 추가합니다. 인바운드 규칙을 VPC 보안 그룹에 추가하는 방법을 알아보려면 Amazon Virtual Private Cloud 사용 설명서Security group rules를 참조하세요.

  4. 로컬 시스템에서 Amazon EC2 인스턴스로 압축된 데이터베이스 백업 파일을 복사합니다. 필요한 경우 chmod를 사용하여 Amazon EC2 인스턴스의 대상 디렉터리에 대해 쓰기 권한이 있는지 확인하세요. scp 또는 Secure Shell(SSH) 클라이언트를 사용하여 파일을 복사할 수 있습니다. 다음은 예제 scp 명령입니다.

    scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
    중요

    민감한 데이터는 반드시 보안 네트워크 전송 프로토콜을 사용하여 복사해야 합니다.

  5. Amazon EC2 인스턴스에 연결하고 다음 명령을 사용하여 최신 업데이트와 MySQL 클라이언트 도구를 설치합니다.

    sudo yum update -y sudo yum install mysql -y

    자세한 내용은 Amazon Elastic Compute Cloud 사용 설명서Connect to your instance를 참조하세요.

    중요

    이 예제에서는 Amazon Linux AMI 배포의 Amazon Machine Image(AMI)에 MySQL 클라이언트를 설치합니다. 이 예제에서는 Ubuntu 또는 Red Hat Enterprise Linux 등 다른 배포에 MySQL 클라이언트를 설치하지 않습니다. MySQL 설치에 대한 자세한 내용은 MySQL 설명서의 Installing MySQL을 참조하세요.

  6. Amazon EC2 인스턴스에 연결되어 있는 상태에서 데이터베이스 백업 파일의 압축을 풉니다. 다음 명령은 예시입니다.

    • SQL 출력을 압축 해제하려면 다음 명령을 사용합니다.

      gzip backup.sql.gz -d
    • 구분 기호로 분리된 텍스트 출력을 압축 해제하려면 다음 명령을 사용합니다.

      tar xzvf backup.tar.gz

작업 3: MySQL 또는 MariaDB 데이터베이스 만들기 및 Amazon EC2 인스턴스에서 데이터 가져오기

Amazon EC2 인스턴스와 같은 AWS 리전에 RDS for MariaDB DB 인스턴스, RDS for MySQL DB 인스턴스 또는 RDS for MySQL 다중 AZ DB 클러스터를 만들면 인터넷에서 가져오는 것보다 빠른 속도로 Amazon EC2에서 데이터베이스 백업 파일을 가져올 수 있습니다.

다음 다이어그램은 Amazon EC2 인스턴스에서 MySQL 데이터베이스로 백업을 가져오는 것을 보여줍니다.

EC2 인스턴스에서 MySQL 데이터베이스로 백업을 가져오는 것을 보여 주는 워크플로

MariaDB 또는 MySQL 데이터베이스를 만들고 데이터 가져오기

  1. 이 Amazon RDS 데이터베이스에 대해 예상되는 워크로드를 지원하기 위해 필요한 DB 인스턴스 클래스와 스토리지 공간의 양을 결정합니다. 이 프로세스의 일환으로 데이터 로드 절차를 위해 충분한 공간과 처리 용량이 어느 정도인지 결정합니다. 또한 프로덕션 워크로드를 처리하는 데 필요한 사항을 결정합니다. 원본 MySQL 또는 MariaDB 데이터베이스의 크기와 리소스를 바탕으로 평가할 수 있습니다. 자세한 내용은 DB 인스턴스 클래스 섹션을 참조하세요.

  2. Amazon EC2 인스턴스가 포함된 AWS 리전에서 DB 인스턴스 또는 다중 AZ DB 클러스터를 만듭니다.

    RDS for MySQL 다중 AZ DB 클러스터를 만들려면 Amazon RDS용 다중 AZ DB 클러스터 생성 섹션의 지침을 따르세요.

    RDS for MariaDB 또는 RDS for MySQL DB 인스턴스를 생성하려면 Amazon RDS DB 인스턴스 생성의 지침과 다음 지침을 따르세요.

    • 소스 DB 인스턴스와 호환되는 DB 엔진 버전을 지정합니다.

      • 소스 인스턴스가 MySQL 5.5.x인 경우 Amazon RDS DB 인스턴스는 MySQL이어야 합니다.

      • 소스 인스턴스가 MySQL 5.6.x 또는 5.7.x인 경우 Amazon RDS DB 인스턴스는 MySQL 또는 MariaDB여야 합니다.

      • 원본 인스턴스가 MySQL 8.0.x인 경우 Amazon RDS DB 인스턴스는 MySQL 8.0.x여야 합니다.

      • 원본 인스턴스가 MySQL 8.4.x인 경우 Amazon RDS DB 인스턴스는 MySQL 8.4.x여야 합니다.

      • 소스 인스턴스가 MariaDB 5.5 이상인 경우 Amazon RDS DB 인스턴스는 MariaDB여야 합니다.

    • Amazon EC2 인스턴스에서와 동일한 Virtual Private Cloud(VPC) 및 VPC 보안 그룹을 지정합니다. 이 접근 방식에서는 Amazon EC2 인스턴스와 Amazon RDS 인스턴스가 네트워크를 통해 서로를 볼 수 있습니다. DB 인스턴스가 공개적으로 액세스 가능한지 확인합니다. 다음 섹션에 설명한 대로 소스 데이터베이스를 사용하여 복제를 설정하려면 DB 인스턴스에 공개적으로 액세스할 수 있어야 합니다.

    • 데이터베이스 백업을 가져온 후에만 여러 가용 영역, 백업 보존 또는 읽기 전용 복제본을 구성해야 합니다 가져오기가 완료되면 프로덕션 인스턴스에 대해 다중 AZ 및 백업 보존을 설정할 수 있습니다.

  3. Amazon RDS 데이터베이스에 대한 기본 구성 옵션을 검토합니다. 데이터베이스에 대한 기본 파라미터 그룹에 원하는 구성 옵션이 없는 경우, 원하는 구성 옵션이 있는 다른 파라미터 그룹을 찾거나 새 파라미터 그룹을 생성합니다. 파라미터 그룹을 생성하는 것에 대한 자세한 내용은 Amazon RDS의 파라미터 그룹 섹션을 참조하세요.

  4. 마스터 사용자로 Amazon RDS 데이터베이스에 연결합니다. DB 인스턴스에 액세스해야 하는 서비스, 애플리케이션 및 관리자를 지원하는 데 필요한 사용자를 만듭니다. Amazon RDS 데이터베이스의 호스트 이름은 포트 번호를 포함하지 않은 DB 인스턴스의 엔드포인트 값입니다(예: mysampledb.123456789012.us-west-2.rds.amazonaws.com). Amazon RDS 콘솔의 데이터베이스 세부 정보에서 엔드포인트 값을 찾을 수 있습니다.

  5. Amazon EC2 인스턴스에 연결합니다. 자세한 내용은 Amazon Elastic Compute Cloud 사용 설명서Connect to your instance를 참조하세요.

  6. mysql 명령을 사용하여 Amazon EC2 인스턴스에서 원격 호스트로 Amazon RDS 데이터베이스에 연결합니다. 다음 명령은 예제입니다.

    mysql -h host_name -P 3306 -u db_master_user -p

    host_name은 Amazon RDS 데이터베이스 엔드포인트입니다.

  7. mysql 프롬프트에서 source 명령을 실행하고 데이터베이스 덤프 파일의 이름을 전달합니다. 이 명령은 데이터를 Amazon RDS DB 인스턴스로 로드합니다.

    • SQL 형식인 경우 다음 명령을 사용합니다.

      mysql> source backup.sql;
    • 구분 기호로 분리된 텍스트 형식의 경우 Amazon RDS 데이터베이스를 설정할 때 만든 기본 데이터베이스가 아니라면 먼저 데이터베이스를 만듭니다.

      mysql> create database database_name; mysql> use database_name;

      그런 다음, 테이블을 생성합니다.

      mysql> source table1.sql mysql> source table2.sql etc...

      그런 다음, 데이터를 가져옵니다.

      mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a'; mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a'; etc...

      성능을 개선하려면 여러 연결에서 이들 작업을 병렬로 수행하여 모든 테이블이 만들어진 다음에 동시에 로드되도록 할 수 있습니다.

      참고

      처음에 테이블을 덤프할 때 mysqldump와 함께 데이터 서식 옵션을 사용했다면, LOAD DATA LOCAL INFILE과 같은 옵션을 사용하여 데이터 파일 내용을 올바로 해석해야 합니다.

  8. 가져온 데이터베이스에 있는 테이블 중 1개 또는 2개에 대해 간단한 SELECT 쿼리를 실행하여 가져오기에 성공했는지 확인합니다.

이 절차에 사용되는 Amazon EC2 인스턴스가 더 이상 필요하지 않은 경우 EC2 인스턴스를 종료하여 AWS 리소스 사용량을 줄여야 합니다. EC2 인스턴스를 종료하려면 Amazon Elastic Compute Cloud 사용 설명서Terminate an instance를 참조하세요.

작업 4: 외부 데이터베이스에서 새 Amazon RDS 데이터베이스로 데이터 복제

MariaDB 또는 MySQL 데이터베이스로 데이터를 복사하고 전송하는 데 걸린 시간 중에 원본 데이터베이스가 업데이트되었을 것입니다. 따라서 복제를 사용하여 복사된 데이터베이스를 원본 데이터베이스에 맞춰 최신 상태로 업데이트합니다.

외부 MySQL 데이터베이스에서 Amazon RDS의 데이터베이스로 데이터를 복제하는 것을 보여주는 워크플로

Amazon RDS 데이터베이스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 따라서 메이저 엔진 버전에 적합한 다음의 Amazon RDS 저장 프로시저를 사용합니다.

복제를 시작하려면

작업 1에서 복제 옵션을 설정할 때 이진 로깅을 활성화하고 소스 데이터베이스의 고유한 서버 ID를 설정합니다. 이제 라이브 데이터베이스를 소스 복제 인스턴스로 포함하고 있는 복제본으로서 Amazon RDS 데이터베이스를 설정할 수 있습니다.

  1. Amazon RDS 콘솔에서 Amazon RDS 데이터베이스에 대한 VPC 보안 그룹에 원본 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 구성에 관한 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서Configure security group rules를 참조하세요.

    원본 인스턴스와 통신할 수 있도록, Amazon RDS 데이터베이스 IP 주소에서의 연결을 허용하도록 로컬 네트워크를 구성해야 할 수도 있습니다. Amazon RDS 데이터베이스의 IP 주소를 확인하려면 host 명령을 사용합니다.

    host host_name

    host_name은 Amazon RDS 데이터베이스 엔드포인트의 DNS 이름입니다(예: myinstance.123456789012.us-east-1.rds.amazonaws.com). Amazon RDS 콘솔의 인스턴스 세부 정보에서 엔드포인트 값을 찾을 수 있습니다.

  2. 선택한 클라이언트를 사용하여 원본 인스턴스에 연결하고 복제에 사용될 사용자를 만듭니다. 이 계정은 오직 복제용으로만 사용되며 보안 향상을 위해 사용자의 도메인으로 제한되어야 합니다. 다음 명령은 예제입니다.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 보안 인증 정보를 지정하는 것이 좋습니다.

  3. 원본 인스턴스의 경우 복제 사용자에게 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여합니다. 예를 들어 도메인의 'repl_user' 사용자를 위해 모든 데이터베이스에서 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여하려면 다음 명령을 실행합니다.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  4. SQL 형식을 사용하여 백업 파일을 만들었고 외부 인스턴스가 MariaDB 10.0.24 이상이 아닌 경우 다음 명령을 실행하여 해당 파일의 내용을 살펴봅니다.

    cat backup.sql

    이 파일에는 마스터 로그 파일 이름과 위치를 포함한 CHANGE MASTER TO 설명이 포함됩니다. 이 설명은 --master-data와 함께 mysqldump 옵션을 사용할 때 백업 파일에 포함됩니다. MASTER_LOG_FILEMASTER_LOG_POS에 대한 값을 확인합니다.

    -- -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;

    구분 기호로 분리된 텍스트 형식을 사용하여 백업 파일을 만들었고 외부 인스턴스가 MariaDB 10.0.24 이상이 아닌 경우, 작업 1의 ‘존재하는 데이터베이스의 백업 복사본 만들기’ 절차 1단계에서 확보한 바이너리 로그 좌표가 이미 있을 것입니다.

    외부 인스턴스가 MariaDB 10.0.24 이상인 경우 복제를 시작할 수 있는 GTID를 작업 1의 ‘존재하는 데이터베이스의 백업 복사본 만들기’ 절차 2단계에서 이미 확보했을 것입니다.

  5. Amazon RDS 데이터베이스를 복제본으로 만듭니다. 외부 인스턴스가 MariaDB 10.0.24 이상이 아닌 경우 마스터 사용자로 Amazon RDS 데이터베이스에 연결하고 적절한 Amazon RDS 저장 프로시저를 사용하여 소스 데이터베이스를 소스 복제 인스턴스로 식별합니다.

    SQL 형식 백업 파일이 있는 경우 4단계에서 확인한 마스터 로그 파일 이름과 마스터 로그 위치를 사용합니다. 구분 기호로 분리된 텍스트 형식을 사용한 경우 백업 파일을 만들 때 확인한 이름과 위치를 사용합니다. 다음 명령은 예시입니다.

    MySQL 8.4 이상 버전

    CALL mysql.rds_set_external_source ('myserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);

    MariaDB 및 MySQL 8.0 이하 버전

    CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 보안 인증 정보를 지정하는 것이 좋습니다.

    외부 인스턴스가 MariaDB 10.0.24 이상인 경우 마스터 사용자로 Amazon RDS 데이터베이스에 연결하고 mysql.rds_set_external_master_gtid 명령을 사용하여 소스 데이터베이스를 소스 복제 인스턴스로 식별합니다. 작업 1의 ‘기존 데이터베이스의 백업 복사본 만들기’ 절차 2단계에서 확인된 GTID를 사용합니다. 다음 명령은 예제입니다.

    CALL mysql.rds_set_external_master_gtid ('source_server_ip_address', 3306, 'ReplicationUser', 'password', 'GTID', 1);

    source_server_ip_address는 소스 복제 인스턴스의 IP 주소입니다. EC2 프라이빗 DNS 주소는 현재 지원되지 않습니다.

    참고

    보안 모범 사례로 여기에 표시된 프롬프트 이외의 보안 인증 정보를 지정하는 것이 좋습니다.

  6. Amazon RDS 데이터베이스에서 다음 mysql.rds_start_replication 명령을 실행하여 복제를 시작합니다.

    CALL mysql.rds_start_replication;
  7. Amazon RDS 데이터베이스에서 SHOW REPLICA STATUS 명령을 실행하여 복제본이 소스 복제 인스턴스에 맞게 최신 상태가 되는 시점을 파악합니다. SHOW REPLICA STATUS 명령의 결과에는 Seconds_Behind_Master 필드가 포함됩니다. Seconds_Behind_Master 필드가 0을 반환하면 복제본이 소스 복제 인스턴스에 맞게 최신 상태인 것입니다.

    참고

    이전 버전의 MySQL에는 SHOW SLAVE STATUS 대신 SHOW REPLICA STATUS가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 SHOW SLAVE STATUS를 사용합니다.

    MariaDB 10.5, 10.6 또는 10.11 DB 인스턴스의 경우 MySQL 명령 대신 mysql.rds_replica_status 저장 프로시저를 실행합니다.

  8. Amazon RDS 데이터베이스가 최신 상태로 업데이트된 후, 필요할 경우 그 데이터베이스를 복원할 수 있도록 자동 백업을 켭니다. Amazon RDS 콘솔을 사용하여 Amazon RDS 데이터베이스에 대한 자동 백업을 켜거나 수정할 수 있습니다. 자세한 내용은 백업 소개 섹션을 참조하세요.

작업 5: 라이브 애플리케이션을 Amazon RDS 인스턴스로 리디렉션

MariaDB 또는 MySQL 데이터베이스가 소스 복제 인스턴스에 맞게 최신 상태로 업데이트되면 라이브 애플리케이션을 업데이트하여 Amazon RDS 인스턴스를 사용할 수 있습니다.

복제를 중지하고 라이브 애플리케이션을 Amazon RDS 데이터베이스로 리디렉션하는 것을 보여주는 워크플로

라이브 애플리케이션을 MariaDB 또는 MySQL 데이터베이스로 리디렉션하고 복제 중지

  1. Amazon RDS 데이터베이스에 대한 VPC 보안 그룹을 추가하려면 애플리케이션을 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서Configure security group rules를 참조하세요.

  2. SHOW REPLICA STATUS 명령 결과에서 Seconds_Behind_Master 필드가 0인지 확인합니다. 이는 복제본이 소스 복제 인스턴스에 맞게 최신 상태라는 의미입니다.

    SHOW REPLICA STATUS;
    참고

    이전 버전의 MySQL에는 SHOW SLAVE STATUS 대신 SHOW REPLICA STATUS가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 SHOW SLAVE STATUS를 사용합니다.

    MariaDB 10.5, 10.6, 10.11 DB 인스턴스의 경우 MySQL 대신 mysql.rds_replica_status 프로시저를 실행합니다.

  3. 트랜잭션이 완료되면 소스에 대한 모든 연결을 닫습니다.

  4. Amazon RDS 데이터베이스를 사용할 수 있도록 애플리케이션을 업데이트합니다. 이 업데이트에는 일반적으로 Amazon RDS 데이터베이스의 호스트 이름과 포트, 연결할 사용자 계정과 암호, 사용할 데이터베이스를 식별하기 위해 연결 설정을 변경하는 과정이 포함됩니다.

  5. DB 인스턴스에 연결합니다.

    다중 AZ DB 클러스터의 경우에는 라이터 DB 인스턴스에 연결합니다.

  6. 다음 mysql.rds_stop_replication 명령을 사용하여 Amazon RDS 인스턴스에 대한 복제를 중지합니다.

    CALL mysql.rds_stop_replication;
  7. 이 인스턴스가 더 이상 복제본으로 식별되지 않도록 Amazon RDS 데이터베이스에서 적절한 Amazon RDS 저장 프로시저를 실행하여 복제 구성을 재설정합니다.

    MySQL 8.4 이상 버전

    CALL mysql.rds_reset_external_source;

    MariaDB 및 MySQL 8.0 이하 버전

    CALL mysql.rds_reset_external_master;
  8. 다중 AZ 지원 및 읽기 전용 복제본과 같은 Amazon RDS 기능을 추가로 활성화합니다. 자세한 내용은 Amazon RDS에 대한 다중 AZ 배포 구성 및 관리DB 인스턴스 읽기 전용 복제본 작업 단원을 참조하세요.