Amazon Relational Database Service
사용 설명서 (API 버전 2014-10-31)

Amazon RDS 외부에서 실행 중인 MySQL 또는 MariaDB 인스턴스를 사용한 복제

Amazon RDS MySQL 또는 MariaDB DB 인스턴스와 Amazon RDS 외부에 있는 MySQL 또는 MariaDB 인스턴스 간의 복제를 설정할 수 있습니다. 복제된 트랜잭션의 이진 로그 파일 위치를 사용하여 복제를 구성할 수 있습니다. Amazon RDS MySQL 5.7.23 및 이후 MySQL 5.7 버전에서는 GTID(글로벌 트랜잭션 식별자)를 사용하여 복제를 구성할 수도 있습니다.

Amazon RDS DB 인스턴스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 이 때문에, Amazon RDS mysql.rds_set_external_mastermysql.rds_start_replication 명령을 사용하여 라이브 데이터베이스와 Amazon RDS 데이터베이스 사이의 복제를 설정해야 합니다.

참고

외부 인스턴스가 MariaDB 버전 10.0.2 이상이고 Amazon RDS 인스턴스가 MariaDB인 경우를 제외하고 항상 이 주제의 프로시저를 사용하여 복제를 구성합니다. 이 경우에는 Amazon RDS MariaDB DB 인스턴스로의 GTID 기반 복제 구성 내 프로세저를 사용하여 GTID 기반 복제를 설정하십시오.

외부 마스터 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성

Amazon RDS에서 외부 복제 마스터와 복제본을 설정할 때 다음 지침을 준수해야 합니다.

  • 사용자의 복제본인 Amazon RDS DB 인스턴스에 대한 장애 조치 이벤트를 모니터링합니다. 장애 조치가 발생할 경우에는 사용자의 복제본인 DB 인스턴스가 다른 네트워크 주소를 가진 새 호스트에서 다시 생성될 수도 있습니다. 장애 조치 이벤트를 모니터링하는 자세한 방법은 Amazon RDS 이벤트 알림 서비스 사용 단원을 참조하십시오.

  • 이진 로그(binlog)가 복제본에 적용되었음을 확인할 때까지는 마스터 인스턴스에서 binlog를 유지 관리하십시오. 이렇게 유지 관리해야 오류 발생 시 마스터 인스턴스를 복원할 수 있습니다.

  • Amazon RDS DB 인스턴스에서 자동 백업을 활성화합니다. 자동 백업을 활성화하면 마스터 및 복제본을 다시 동기화할 필요가 있을 때 복제본을 특정 시점으로 복원할 수 있습니다. 백업 및 특정 시점으로 복원에 대한 자세한 내용은 Amazon RDS DB 인스턴스 백업 및 복원 단원을 참조하십시오.

외부 마스터 인스턴스를 사용하여 이진 로그 파일 위치 복제를 구성하려면

  1. 원본 MySQL 또는 MariaDB 인스턴스를 읽기 전용으로 설정합니다.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 원본 MySQL 또는 MariaDB 인스턴스에서 SHOW MASTER STATUS 명령을 실행하여 binlog 위치를 확인합니다.

    다음 예제와 비슷한 출력 결과를 얻습니다.

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. mysqldump를 사용하여 외부 인스턴스에서 Amazon RDS DB 인스턴스로 데이터베이스를 복사합니다. 매우 큰 데이터베이스의 경우, 가동 중지 시간을 단축하여 Amazon RDS MySQL MariaDB DB 인스턴스로 데이터 가져오기에서 이 절차를 사용하고 싶을 것입니다.

    Linux, OS X, Unix의 경우:

    mysqldump --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u <local_user> \ -p<local_password> | mysql \ --host=hostname \ --port=3306 \ -u <RDS_user_name> \ -p<RDS_password>

    Windows의 경우:

    mysqldump --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u <local_user> ^ -p<local_password> | mysql ^ --host=hostname ^ --port=3306 ^ -u <RDS_user_name> ^ -p<RDS_password>

    참고

    -p 옵션과 입력한 암호 사이에 공백이 없어야 합니다.

    Amazon RDS DB 인스턴스에 연결하기 위해 호스트 이름, 사용자 이름, 포트 및 암호를 지정하려면 mysql 명령에 --host, --user (-u), --port, -p 옵션을 사용합니다. 호스트 이름은 Amazon RDS DB 인스턴스 엔드포인트의 DNS(Domain Name Service) 이름입니다(예: myinstance.123456789012.us-east-1.rds.amazonaws.com). AWS Management 콘솔의 인스턴스 세부 정보에서 엔드포인트 값을 확인할 수 있습니다.

  4. 원본 MySQL 또는 MariaDB 인스턴스를 다시 쓰기 가능한 상태로 만듭니다.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    복제와 함께 사용할 백업을 만드는 자세한 내용은 MySQL 문서의 Backing Up a Master or Slave by Making It Read Only 단원을 참조하십시오.

  5. AWS Management 콘솔에서 Amazon RDS DB 인스턴스에 대한 VPC 보안 그룹에 외부 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 정보는 Amazon Virtual Private Cloud 사용 설명서VPC용 보안 그룹을 참조하십시오.

    외부 MySQL 또는 MariaDB 인스턴스와 통신할 수 있도록, Amazon RDS DB 인스턴스 IP 주소에서의 연결을 허용하도록 로컬 네트워크를 구성해야 할 수도 있습니다. Amazon RDS DB 인스턴스의 IP 주소를 확인하려면 host 명령을 사용합니다.

    host <RDS_MySQL_DB_host_name>

    호스트 이름은 Amazon RDS DB 인스턴스 엔드포인트의 DNS 이름입니다.

  6. 선택한 클라이언트를 사용하여 외부 인스턴스에 연결하고 복제에 사용할 사용자를 만듭니다. 이 계정을 복제용으로만 사용하고, 보안을 강화하기 위해 해당 도메인으로만 제한하십시오. 다음은 예제입니다.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  7. 외부 인스턴스의 경우 복제 사용자에게 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여합니다. 예를 들어 도메인의 'repl_user' 사용자를 위해 모든 데이터베이스에서 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여하려면 다음 명령을 실행합니다.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  8. Amazon RDS DB 인스턴스를 복제본으로 만듭니다. 이렇게 하려면 마스터 사용자로 Amazon RDS DB 인스턴스에 연결한 후 mysql.rds_set_external_master 명령을 사용하여 외부 MySQL 또는 MariaDB 데이터베이스를 복제 마스터로 식별합니다. 2단계에서 확인한 마스터 로그 파일 이름과 마스터 로그 위치를 사용합니다. 다음은 예제입니다.

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

    참고

    Amazon RDS MySQL에서 mysql.rds_set_external_master_with_delay 저장 프로시저를 대신 실행하여 지연 복제를 사용하도록 선택할 수 있습니다. 지연 복제를 사용하는 이유 중 하나는 mysql.rds_start_replication_until 저장 프로시저를 사용하여 재해를 복구할 수 있기 때문입니다. 현재는 지연 복제가 Amazon RDS MariaDB에서만 지원됩니다.

  9. Amazon RDS DB 인스턴스에서 mysql.rds_start_replication 명령을 실행하여 복제를 시작합니다.

    CALL mysql.rds_start_replication;

외부 마스터 인스턴스를 사용하여 GTID 기반 복제 구성

Amazon RDS에 외부 복제 마스터와 복제본을 설정한 경우, 복제본인 Amazon RDS DB 클러스터에 대한 장애 조치 이벤트를 모니터링하십시오. 장애 조치가 발생할 경우에는 사용자의 복제본인 DB 인스턴스가 다른 네트워크 주소를 가진 새 호스트에서 다시 생성될 수도 있습니다. 장애 조치 이벤트를 모니터링하는 자세한 방법은 Amazon RDS 이벤트 알림 서비스 사용 단원을 참조하십시오.

중요

GTID 기반 복제는 Amazon RDS MySQL 버전 5.7.23 및 이후 MySQL 5.7 버전에서만 지원됩니다. Amazon RDS MySQL 5.5, 5.6, 8.0에서는 GTID 기반 복제가 지원되지 않습니다.

외부 마스터 인스턴스를 사용하여 GTID 기반 복제를 구성하려면

  1. GTID 기반 복제를 준비합니다.

    1. 외부 MySQL 또는 MariaDB 데이터베이스에서 GTID 기반 복제가 활성화되었는지 확인합니다. 이를 확인하려면 외부 데이터베이스의 다음 파라미터가 지정된 값으로 설정되었는지 확인합니다.

      gtid_modeON

      enforce_gtid_consistencyON

      자세한 내용은 MySQL 설명서의 전역 트랜잭션 ID를 사용한 복제 또는 MariaDB 설명서의 전역 트랜잭션 ID를 참조하십시오.

    2. DB 인스턴스와 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되어 있는지 확인합니다.

      • gtid_modeON, ON_PERMISSIVE 또는 OFF_PERMISSIVE

      • enforce_gtid_consistencyON

      파라미터 그룹에 대한 자세한 내용은 DB 파라미터 그룹 작업 단원을 참조하십시오.

    3. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 자세한 내용은 DB 클러스터에서 DB 인스턴스 단원을 참조하십시오.

  2. 원본 MySQL 또는 MariaDB 인스턴스를 읽기 전용으로 설정합니다.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. mysqldump를 사용하여 외부 인스턴스에서 Amazon RDS DB 인스턴스로 데이터베이스를 복사합니다. 매우 큰 데이터베이스의 경우, 가동 중지 시간을 단축하여 Amazon RDS MySQL MariaDB DB 인스턴스로 데이터 가져오기에서 이 절차를 사용하고 싶을 것입니다.

    Linux, OS X, Unix의 경우:

    mysqldump --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u <local_user> \ -p<local_password> | mysql \ --host=hostname \ --port=3306 \ -u <RDS_user_name> \ -p<RDS_password>

    Windows의 경우:

    mysqldump --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u <local_user> ^ -p<local_password> | mysql ^ --host=hostname ^ --port=3306 ^ -u <RDS_user_name> ^ -p<RDS_password>

    참고

    -p 옵션과 입력한 암호 사이에 공백이 없어야 합니다.

    Amazon RDS DB 인스턴스에 연결하기 위해 호스트 이름, 사용자 이름, 포트 및 암호를 지정하려면 mysql 명령에 --host, --user (-u), --port, -p 옵션을 사용합니다. 호스트 이름은 Amazon RDS DB 인스턴스 엔드포인트의 DNS 이름입니다(예: myinstance.123456789012.us-east-1.rds.amazonaws.com). AWS Management 콘솔의 인스턴스 세부 정보에서 엔드포인트 값을 확인할 수 있습니다.

  4. 원본 MySQL 또는 MariaDB 인스턴스를 다시 쓰기 가능한 상태로 만듭니다.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    복제와 함께 사용할 백업을 만드는 자세한 내용은 MySQL 문서의 Backing Up a Master or Slave by Making It Read Only 단원을 참조하십시오.

  5. AWS Management 콘솔에서 Amazon RDS DB 인스턴스에 대한 VPC 보안 그룹에 외부 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 정보는 Amazon Virtual Private Cloud 사용 설명서VPC용 보안 그룹을 참조하십시오.

    외부 MySQL 또는 MariaDB 인스턴스와 통신할 수 있도록, Amazon RDS DB 인스턴스 IP 주소에서의 연결을 허용하도록 로컬 네트워크를 구성해야 할 수도 있습니다. Amazon RDS DB 인스턴스의 IP 주소를 확인하려면 host 명령을 사용합니다.

    host <RDS_MySQL_DB_host_name>

    호스트 이름은 Amazon RDS DB 인스턴스 엔드포인트의 DNS 이름입니다.

  6. 선택한 클라이언트를 사용하여 외부 인스턴스에 연결하고 복제에 사용할 사용자를 만듭니다. 이 계정을 복제용으로만 사용하고, 보안을 강화하기 위해 해당 도메인으로만 제한하십시오. 다음은 예제입니다.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  7. 외부 인스턴스의 경우 복제 사용자에게 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여합니다. 예를 들어 도메인의 'repl_user' 사용자를 위해 모든 데이터베이스에서 REPLICATION CLIENTREPLICATION SLAVE 권한을 부여하려면 다음 명령을 실행합니다.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY '<password>';
  8. Amazon RDS DB 인스턴스를 복제본으로 만듭니다. 이렇게 하려면 마스터 사용자로 Amazon RDS DB 인스턴스에 연결한 후 mysql.rds_set_external_master_with_auto_position 명령을 사용하여 외부 MySQL 또는 MariaDB 데이터베이스를 복제 마스터로 식별합니다. 다음은 예제입니다.

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', '<password>', 0, 0);

    참고

    Amazon RDS MySQL에서 mysql.rds_set_external_master_with_delay 저장 프로시저를 대신 실행하여 지연 복제를 사용하도록 선택할 수 있습니다. 지연 복제를 사용하는 이유 중 하나는 mysql.rds_start_replication_until_gtid 저장 프로시저를 사용하여 재해를 복구할 수 있기 때문입니다. 현재는 지연 복제가 Amazon RDS MariaDB에서만 지원됩니다.

  9. Amazon RDS DB 인스턴스에서 mysql.rds_start_replication 명령을 실행하여 복제를 시작합니다.

    CALL mysql.rds_start_replication;