가동 중지 시간을 단축하여 Amazon RDS MariaDB 또는 MySQL 데이터베이스로 데이터 가져오기 - Amazon Relational Database Service

가동 중지 시간을 단축하여 Amazon RDS MariaDB 또는 MySQL 데이터베이스로 데이터 가져오기

라이브 애플리케이션을 지원하는 외부 MariaDB 또는 MySQL 데이터베이스에서 MariaDB DB 인스턴스, MySQL DB 인스턴스 또는 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 단원을 참조하세요.

참고

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


                    외부 MySQL 데이터베이스를 RDS의 MySQL 데이터베이스로 가져오기
참고

복제 문제가 발생할 수 있으므로 버전 5.5 이하의 MySQL 버전에서 가져온 원본 MySQL 데이터베이스에는 이 절차를 적용하지 않는 것이 좋습니다. 자세한 내용은 MySQL 설명서의 MySQL 버전 간 복제 호환성을 참조하십시오.

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

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


                        MySQL 데이터베이스의 백업 생성

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

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

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

참고

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

덤프 파일에서 다음 스키마를 제외합니다. sys, performance_schemainformation_schema. mysqldump 유틸리티는 기본적으로 이러한 스키마를 제외합니다.

사용자 및 권한을 마이그레이션해야 하는 경우 이를 다시 생성하는 데이터 제어 언어(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 설명서를 참조하세요.

  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 유틸리티를 사용하여 데이터 백업을 만듭니다.

    서버 간 복제를 시작할 때 사용할 수 있는 백업 파일을 만들려면 --master-data=2를 지정합니다. 자세한 내용은 mysqldump 설명서를 참조하세요.

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

    백업에 MySQL 시스템 데이터베이스가 포함되지 않도록 하려면 mysqldump와 함께 --all-databases 옵션을 사용하지 마세요. 자세한 내용은 MySQL 설명서의 mysqldump를 사용하여 데이터 스냅샷 생성을 참조하세요.

    필요한 경우 chmod를 사용하여 백업 파일이 생성될 디렉터리가 쓰기 가능한 디렉터리가 되도록 하십시오.

    중요

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

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

      Linux, macOS 또는 Unix 대상:

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

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

      Windows의 경우:

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

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

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

      Linux, macOS 또는 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 \ -p password

      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 ^ -p password
      참고

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

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

      구분 기호로 분리된 텍스트 형식을 사용할 때 mysqldump를 실행하면 CHANGE MASTER TO 설명이 반환됩니다. 이 설명에는 마스터 로그 파일 이름과 위치가 포함됩니다. 외부 인스턴스가 MariaDB 버전 10.0.24 이상이 아닌 경우 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;

      SQL 형식을 사용하는 경우 백업 파일의 CHANGE MASTER 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를 메모하십시오. 복제를 구성하는 데 필요합니다.

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

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

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

      tar -zcvf backup.tar.gz target_directory

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

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


                        EC2 인스턴스에 데이터베이스 백업 복사

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

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

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

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

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

    $ 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

    자세한 내용은 Linux용 Amazon Elastic Compute Cloud 사용 설명서인스턴스에 연결을 참조하세요.

    중요

    이 예제에서는 Amazon Linux AMI 배포의 Amazon Machine Image(AMI)에 MySQL 클라이언트를 설치합니다. Ubuntu 또는 Red Hat Enterprise Linux 등 다른 배포에 MySQL 클라이언트를 설치하려는 경우에는 이 예제가 작동하지 않습니다. MySQL 설치에 대한 자세한 내용은 MySQL 설명서의 MySQL 설치 및 업그레이드를 참조하세요.

  6. Amazon EC2 인스턴스에 연결되어 있는 상태에서 데이터베이스 백업 파일의 압축을 풉니다. 예를 들면 다음과 같습니다.

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

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

      tar xzvf backup.tar.gz

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

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


                        EC2 인스턴스에서 MySQL 데이터베이스로 백업 가져오기

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

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

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

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

    MariaDB 또는 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여야 합니다.

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

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

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

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

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

  5. Amazon EC2 인스턴스에 연결합니다. 자세한 내용은 Linux용 Amazon Elastic Compute Cloud 사용 설명서인스턴스에 연결을 참조하십시오.

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

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

    호스트 이름은 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와 함께 데이터 서식 옵션을 사용했다면, mysqlimport 또는 LOAD DATA LOCAL INFILE과 함께 같은 옵션을 사용하여 데이터 파일 내용을 올바로 해석해야 합니다.

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

이 절차에 사용되는 Amazon EC2 인스턴스가 더 이상 필요하지 않은 경우 EC2 인스턴스를 종료하여 AWS 리소스 사용량을 줄여야 합니다. EC2 인스턴스 종료에 대한 자세한 내용은 Amazon EC2 사용 설명서인스턴스 종료를 참조하세요.

외부 데이터베이스와 새 Amazon RDS 데이터베이스 간의 복제

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


                        외부 MySQL 데이터베이스에서 RDS의 데이터베이스로 데이터 복제

Amazon RDS 데이터베이스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 따라서 Amazon RDS mysql.rds_set_external_master 명령 또는 mysql.rds_set_external_master_gtid 명령을 사용하여 복제를 구성한 다음, mysql.rds_start_replication 명령을 사용하여 라이브 데이터베이스와 Amazon RDS 데이터베이스 간에 복제를 시작해야 합니다.

복제를 시작하려면

앞에서 이진 로깅을 활성화하고 원본 데이터베이스에 대한 고유한 서버 ID를 설정했습니다. 이제 라이브 데이터베이스를 소스 복제 인스턴스로 포함하고 있는 복제본으로서 Amazon RDS 데이터베이스를 설정할 수 있습니다.

  1. Amazon RDS Management Console에서 Amazon RDS 데이터베이스에 대한 VPC 보안 그룹에 원본 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서VPC용 보안 그룹을 참조하십시오.

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

    host rds_db_endpoint

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

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

    MySQL 5.5, 5.6 및 5.7

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

    MySQL 8.0

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

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

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

    MySQL 5.5, 5.6 및 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
    참고

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

  4. SQL 형식을 사용하여 백업 파일을 만들었고 외부 인스턴스가 MariaDB 10.0.24 이상이 아닌 경우 그 파일의 내용을 살펴봅니다.

    cat backup.sql

    이 파일에는 마스터 로그 파일 이름과 위치를 포함한 CHANGE MASTER TO 설명이 포함됩니다. 이 설명은 mysqldump와 함께 --master-data 옵션을 사용할 때 백업 파일에 포함됩니다. 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단계에서 바이너리 로그 좌표가 이미 있어야 합니다.

    외부 인스턴스가 MariaDB 10.0.24 이상인 경우 이 주제의 "존재하는 데이터베이스의 백업 복사본 생성" 프로시저 2단계에서 복제를 시작할 수 있는 GTID가 이미 있어야 합니다.

  5. Amazon RDS 데이터베이스를 복제본으로 만듭니다. 외부 인스턴스가 MariaDB 10.0.24 이상이 아닌 경우 마스터 사용자로 Amazon RDS 데이터베이스에 연결하고 mysql.rds_set_external_master 명령을 사용하여 소스 데이터베이스를 소스 복제 인스턴스로 식별합니다. SQL 형식 백업 파일이 있는 경우 이전 단계에서 확인한 마스터 로그 파일 이름과 마스터 로그 위치를 사용합니다. 또는 구분 기호로 분리된 텍스트 형식을 사용한 경우 백업 파일을 만들 때 확인한 이름과 위치를 사용합니다. 다음은 예입니다.

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

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

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

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

    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 Management Console을 사용하여 Amazon RDS 데이터베이스에 대한 자동 백업을 활성화하거나 수정할 수 있습니다. 자세한 내용은 백업 소개 섹션을 참조하세요.

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

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


                        복제를 중지하고 라이브 애플리케이션을 RDS 데이터베이스로 리디렉션

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

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

  2. SHOW REPLICA STATUS 명령 결과에서 Seconds_Behind_Master 필드가 0인지 확인합니다. 이 필드가 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 데이터베이스에서 mysql.rds_reset_external_master 명령을 실행하여 복제 구성을 재설정합니다.

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