

# 외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성
<a name="MySQL.Procedural.Importing.External.Repl"></a>

바이너리 로그 파일 복제를 사용하여 RDS for MySQL 또는 MariaDB DB 인스턴스와 Amazon RDS 외부에 있는 MySQL 또는 MariaDB 인스턴스 간에 복제를 설정할 수 있습니다.

**Topics**
+ [시작하기 전에](#MySQL.Procedural.Importing.External.Repl.BeforeYouBegin)
+ [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](#MySQL.Procedural.Importing.External.Repl.Procedure)

## 시작하기 전에
<a name="MySQL.Procedural.Importing.External.Repl.BeforeYouBegin"></a>

복제된 트랜잭션의 이진 로그 파일 위치를 사용하여 복제를 구성할 수 있습니다.

Amazon RDS DB 인스턴스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 이 때문에 Amazon RDS [mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 또는 [mysql.rds\$1set\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 및 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 명령을 사용하여 라이브 데이터베이스와 Amazon RDS 데이터베이스 사이의 복제를 설정해야 합니다.

MySQL 또는 MariaDB 데이터베이스의 이진 로깅 형식을 설정하려면 `binlog_format` 파라미터를 업데이트합니다. DB 인스턴스가 기본 DB 인스턴스 파라미터 그룹을 사용하는 경우, `binlog_format` 파라미터를 수정하려면 새로운 DB 파라미터 그룹을 만듭니다. MariaDB 및 MySQL 8.0 이하 버전에서는 `binlog_format`의 기본값이 `MIXED`입니다. 그러나 특정한 이진 로그(binlog) 형식이 필요하다면 `binlog_format`을 `ROW` 또는 `STATEMENT`로 설정할 수도 있습니다. 변경 사항을 적용하려면 DB 인스턴스를 재부팅합니다. MySQL 8.4 이상 버전에서는 `binlog_format`의 기본값이 `ROW`입니다.

`binlog_format` 파라미터 설정에 대한 자세한 내용은 [단일 AZ 데이터베이스의 RDS for MySQL 이진 로깅 구성](USER_LogAccess.MySQL.BinaryFormat.md) 단원을 참조하십시오. 다양한 MySQL 복제 유형에 대한 자세한 내용은 MySQL 설명서의 [문 기반 및 행 기반 복제의 장/단점](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)을 참조하십시오.

## 외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성
<a name="MySQL.Procedural.Importing.External.Repl.Procedure"></a>

Amazon RDS에서 외부 소스 인스턴스 및 복제본을 설정할 때 다음 지침을 따르십시오.
+ 사용자의 복제본인 Amazon RDS DB 인스턴스에 대한 장애 조치 이벤트를 모니터링합니다. 장애 조치가 발생할 경우에는 사용자의 복제본인 DB 인스턴스가 다른 네트워크 주소를 가진 새 호스트에서 다시 생성될 수도 있습니다. 장애 조치 이벤트를 모니터링하는 자세한 방법은 [Amazon RDS 이벤트 알림 작업](USER_Events.md) 단원을 참조하십시오.
+ binlog가 복제본에 적용된 것으로 확인될 때까지는 소스 인스턴스에서 binlog를 유지 관리합니다. 이렇게 유지 관리해야 오류 발생 시 소스 인스턴스를 복원할 수 있습니다.
+ Amazon RDS DB 인스턴스에서 자동 백업을 활성화합니다. 자동 백업을 활성화하면 소스 인스턴스 및 복제본을 다시 동기화할 필요가 있을 때 복제본을 특정 시점으로 복원할 수 있습니다. 백업 및 특정 시점으로 복원에 대한 자세한 내용은 [데이터 백업, 복원 및 내보내기](CHAP_CommonTasks.BackupRestore.md) 단원을 참조하십시오.

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

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

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 원본 MySQL 또는 MariaDB 인스턴스에서 `SHOW MASTER STATUS` 명령을 실행하여 binlog 위치를 확인합니다.

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

   ```
   File                        Position  
   ------------------------------------
    mysql-bin-changelog.000031      107   
   ------------------------------------
   ```

1. `mysqldump`를 사용하여 외부 인스턴스에서 Amazon RDS DB 인스턴스로 데이터베이스를 복사합니다. 매우 큰 데이터베이스의 경우, [가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기](mysql-importing-data-reduced-downtime.md)에서 이 절차를 사용하고 싶을 것입니다.

   대상 LinuxmacOS, 또는Unix:

   ```
   mysqldump --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   Windows의 경우:

   ```
   mysqldump --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary ^
       -u local_user ^
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**참고**  
`-p` 옵션과 입력한 암호 사이에 공백이 없어야 합니다.

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

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

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

   복제에 사용할 백업을 만드는 방법에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html)를 참조하십시오.

1. AWS Management Console에서 Amazon RDS DB 인스턴스에 대한 Virtual Private Cloud(VPC) 보안 그룹에 외부 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [VPC용 보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하십시오.

   다음 조건이 충족되면 IP 주소가 바뀔 수 있습니다.
   + 외부 소스 인스턴스와 DB 인스턴스 간 통신에 퍼블릭 IP 주소를 사용하는 경우
   + 외부 소스 인스턴스가 중지되었다가 다시 시작된 경우

   위 두 가지 조건이 충족되면 추가하기 전에 IP 주소를 확인하십시오.

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

   ```
   host db_instance_endpoint
   ```

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

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

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

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

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

1. Amazon RDS DB 인스턴스를 복제본으로 만듭니다. 이렇게 하려면 먼저 마스터 사용자로 Amazon RDS DB 인스턴스에 연결합니다. 그런 다음 [mysql.rds\$1set\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 또는 [mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 명령을 사용하여 외부 MySQL 또는 MariaDB 데이터베이스를 소스 인스턴스로 식별합니다. 2단계에서 확인한 마스터 로그 파일 이름과 마스터 로그 위치를 사용합니다. 다음 명령은 예시입니다.

   **MySQL 8.4**

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

   **MariaDB 및 MySQL 8.0 및 5.7**

   ```
   CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**참고**  
RDS for MySQL의 경우 [mysql.rds\$1set\$1external\$1source\$1with\$1delay(RDS for MySQL 메이저 버전 8.4 이상)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay) 또는 [mysql.rds\$1set\$1external\$1master\$1with\$1delay(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master_with_delay) 저장 프로시저를 대신 실행하여 지연 복제를 사용하도록 선택할 수 있습니다. RDS for MySQL에서 지연 복제를 사용하는 이유 중 하나는 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저를 사용하여 재해를 복구할 수 있기 때문입니다. 현재 RDS for MariaDB에서는 지연된 복제를 지원하지만 `mysql.rds_start_replication_until` 절차에서는 지원하지 않습니다.

1. Amazon RDS DB 인스턴스에서 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 명령을 실행하여 복제를 시작합니다.

   ```
   CALL mysql.rds_start_replication;
   ```