

# Amazon RDS에서 MySQL 복제 작업
<a name="USER_MySQL.Replication"></a>

일반적으로 읽기 전용 복제본을 사용하여 Amazon RDS DB 인스턴스 간 복제를 구성합니다. 읽기 전용 복제본에 대한 일반적인 정보는 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 단원을 참조하십시오. Amazon RDS for MySQL의 읽기 복제본 작업에 대한 자세한 내용은 [MySQL 읽기 전용 복제본 작업](USER_MySQL.Replication.ReadReplicas.md) 단원을 참조하세요.

RDS for MySQL를 통한 복제에 전역 트랜잭션 ID(GTID)를 사용할 수 있습니다. 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 단원을 참조하십시오.

RDS for MySQL DB 인스턴스와 Amazon RDS 외부에 있는 MySQL 또는 MariaDB 인스턴스 간의 복제를 설정할 수도 있습니다. 외부 소스를 사용하여 복제를 구성하는 방법에 대한 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 단원을 참조하십시오.

이러한 복제 옵션의 경우 행 기반 복제, 문 기반 복제 또는 혼합 복제를 사용할 수 있습니다. 행 기반 복제는 SQL 문으로 인해 변경된 행만 복제합니다. 문 기반 복제는 전체 SQL 문을 복제합니다. 혼합 복제는 가능한 경우 문 기반 복제를 사용하지만, 문 기반 복제에 안전하지 않은 SQL 문이 실행될 경우 행 기반 복제로 전환합니다. 대부분의 경우 혼합 복제가 권장됩니다. DB 인스턴스의 이진 로그 형식은 복제가 행 기반인지, 문 기반인지, 혼합인지 결정합니다. 이진 로그 형식 설정에 대한 자세한 내용은 [단일 AZ 데이터베이스의 RDS for MySQL 이진 로깅 구성](USER_LogAccess.MySQL.BinaryFormat.md) 단원을 참조하십시오.

**참고**  
Amazon RDS 외부에 있는 MySQL 또는 MariaDB 인스턴스에서 데이터베이스를 가져오거나 그런 인스턴스로 데이터베이스를 내보내도록 복제를 구성할 수 있습니다. 자세한 내용은 [가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기](mysql-importing-data-reduced-downtime.md) 및 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md)(을)를 참조하세요.

스냅샷에서 DB 인스턴스를 복원하거나 시점 복구를 수행한 후 RDS 콘솔의 소스 데이터베이스에서 마지막으로 복구된 binlog 위치를 볼 수 있습니다. **로그 및 이벤트**에서 **binlog**를 입력합니다. binlog 위치가 **시스템 메모** 아래에 나타납니다.

**Topics**
+ [MySQL 읽기 전용 복제본 작업](USER_MySQL.Replication.ReadReplicas.md)
+ [GTID 기반 복제 사용](mysql-replication-gtid.md)
+ [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md)
+ [Amazon RDS for MySQL용 다중 소스 복제 구성](mysql-multi-source-replication.md)

# MySQL 읽기 전용 복제본 작업
<a name="USER_MySQL.Replication.ReadReplicas"></a>

다음으로, RDS for MySQL에서의 읽기 전용 복제본 작업에 대한 특정 정보를 찾을 수 있습니다. 읽기 전용 복제본에 대한 일반적인 정보와 사용 지침은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 단원을 참조하십시오.

MySQL 읽기 전용 복제본에 대한 자세한 내용은 다음 주제를 참조하세요.
+ [MySQL을 사용한 복제 필터 구성](USER_MySQL.Replication.ReadReplicas.ReplicationFilters.md)
+ [MySQL을 사용한 지연 복제 구성](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)
+ [MySQL을 사용한 읽기 전용 복제본 업로드](USER_MySQL.Replication.ReadReplicas.Updates.md)
+ [MySQL을 사용한 다중 AZ 읽기 전용 복제본 배포 작업](USER_MySQL.Replication.ReadReplicas.MultiAZ.md)
+ [RDS for MySQL에서의 계단식 읽기 전용 복제본 사용](USER_MySQL.Replication.ReadReplicas.Cascading.md)
+ [MySQL 읽기 전용 복제본의 복제 지연 모니터링](USER_MySQL.Replication.ReadReplicas.Monitor.md)
+ [MySQL 읽기 전용 복제본을 사용한 복제 시작 및 중지](USER_MySQL.Replication.ReadReplicas.StartStop.md)
+ [MySQL 읽기 전용 복제본의 문제 해결](USER_ReadRepl.Troubleshooting.md)

## MySQL을 사용한 읽기 전용 복제본 구성
<a name="USER_MySQL.Replication.ReadReplicas.Configuration"></a>

MySQL DB 인스턴스를 복제 원본으로 사용하려면 먼저 원본 DB 인스턴스에서 자동 백업을 활성화해야 합니다. 이렇게 하려면 백업 보존 기간을 0 이외의 값으로 설정합니다. 이 요구 사항은 다른 읽기 전용 복제본의 원본 DB 인스턴스인 읽기 전용 복제본에도 적용됩니다. 자동 백업은 모든 버전의 MySQL을 실행 중인 읽기 전용 복제본에서 지원됩니다. MySQL DB 인스턴스에 대해 바이너리 로그 좌표를 기반으로 복제를 구성할 수 있습니다.

다음 버전에서 전역 트랜잭션 식별자(GTID)를 사용하여 복제를 구성할 수 있습니다.
+ RDS for MySQL 버전 5.7.44 이상 5.7 버전
+ RDS for MySQL 버전 8.0.28 이상 8.0 버전
+ RDS for MySQL 버전 8.4.3 이상 8.4 버전

자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하세요.

동일 리전 내의 DB 인스턴스 하나에서 최대 15개까지 읽기 전용 복제본을 생성할 수 있습니다. 효과적인 복제를 위해서는 읽기 전용 복제본도 각각 원본 DB 인스턴스와 동일한 양의 컴퓨팅 및 스토리지 리소스를 가져야 합니다. 원본 DB 인스턴스를 확장하는 경우 읽기 전용 복제본도 확장합니다.

RDS for MySQL은 계단식 읽기 전용 복제본을 지원합니다. 읽기 전용 복제본을 계단식으로 구성하는 방법을 알아보려면 [RDS for MySQL에서의 계단식 읽기 전용 복제본 사용](USER_MySQL.Replication.ReadReplicas.Cascading.md) 단원을 참조하세요.

동일한 원본 DB 인스턴스를 참조하는 여러 읽기 전용 복제본 생성 및 삭제 작업을 동시에 실행할 수 있습니다. 이러한 작업을 수행할 때 각 원본 인스턴스의 읽기 전용 복제본 한도 15개를 넘지 않아야 합니다.

MySQL DB 인스턴스의 읽기 전용 복제본은 소스 DB 인스턴스보다 낮은 DB 엔진 버전을 사용할 수 없습니다.

### MyISAM을 사용하는 MySQL DB 인스턴스 준비
<a name="USER_MySQL.Replication.ReadReplicas.Configuration-MyISAM-Instances"></a>

MySQL DB 인스턴스가 MyISAM 같은 비트랜잭션 엔진을 사용할 경우 다음 단계를 수행하여 읽기 전용 복제본을 성공적으로 설정해야 합니다. 이러한 단계는 읽기 전용 복제본에 데이터의 일관성 있는 복사본이 포함되도록 하기 위해 필요합니다. 그러나 모든 테이블이 InnoDB와 같은 트랜잭션 엔진을 사용하는 경우에는 이 단계가 필요 없습니다.

1. 원본 DB 인스턴스에서 비트랜잭션 테이블의 모든 데이터 조작 언어(DML) 및 데이터 정의 언어(DDL) 작업을 중지하고 완료될 때까지 기다립니다. SELECT 문은 계속해서 실행할 수 있습니다.

1. 원본 DB 인스턴스의 테이블을 플러시한 후 잠급니다.

1. 다음 단원의 방법 중 하나를 사용하여 읽기 전용 복제본을 생성합니다.

1. 예를 들어, `DescribeDBInstances` API 작업 등을 사용하여 읽기 전용 복제본 생성 진행률을 확인합니다. 읽기 전용 복제본을 사용할 수 있게 되면 원본 DB 인스턴스의 테이블 잠금을 해제하고 정상적인 데이터베이스 작업을 재개합니다.

# MySQL을 사용한 복제 필터 구성
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters"></a>

복제 필터를 사용하여 읽기 복제본과 함께 복제할 데이터베이스와 테이블을 지정할 수 있습니다. 복제 필터는 데이터베이스와 테이블을 복제에 포함하거나 복제에서 제외할 수 있습니다.

다음은 복제 필터의 몇 가지 사용 사례입니다.
+ 읽기 복제본의 크기를 줄이는 방법. 복제 필터링을 사용하면 읽기 복제본에 필요하지 않은 데이터베이스와 테이블을 제외할 수 있습니다.
+ 보안상의 이유로 읽기 복제본에서 데이터베이스와 테이블을 제외하는 방법.
+ 다른 읽기 복제본에서 특정 사용 사례에 대해 서로 다른 데이터베이스와 테이블을 복제하는 방법. 예를 들어 분석 또는 샤딩에 특정 읽기 복제본을 사용할 수 있습니다.
+ 여러 AWS 리전에 읽기 전용 복제본이 있는 DB 인스턴스의 경우 서로 다른 AWS 리전에 있는 다른 데이터베이스 또는 테이블을 복제합니다.

**참고**  
복제 필터를 사용하여 인바운드 복제 토폴로지에서 복제본으로 구성된 기본 MySQL DB 인스턴스에서 복제할 데이터베이스와 테이블을 지정할 수도 있습니다. 이 구성에 대한 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 단원을 참조하십시오.

**Topics**
+ [RDS for MySQL에 대한 복제 필터링 파라미터 설정](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [RDS for MySQL에 대한 복제 필터링 제한 사항](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [RDS for MySQL에 대한 복제 필터링 예제](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [읽기 복제본에 대한 복제 필터 보기](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing)

## RDS for MySQL에 대한 복제 필터링 파라미터 설정
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring"></a>

복제 필터를 구성하려면 읽기 복제본에서 다음 복제 필터링 파라미터를 설정합니다.
+ `replicate-do-db` – 지정된 데이터베이스에 변경 내용을 복제합니다. 읽기 복제본에 대해 이 파라미터를 설정하면 파라미터에 지정된 데이터베이스만 복제됩니다.
+ `replicate-ignore-db` – 지정된 데이터베이스에 변경 내용을 복제하지 마세요. 읽기 복제본에 대해 `replicate-do-db` 파라미터가 설정되면 이 파라미터는 평가되지 않습니다.
+ `replicate-do-table` – 지정된 테이블에 변경 사항을 복제합니다. 읽기 복제본에 대해 이 파라미터를 설정하면 파라미터에 지정된 테이블만 복제됩니다. 또한, `replicate-do-db` 또는 `replicate-ignore-db` 파라미터가 설정되면 복제에 지정된 테이블이 포함된 데이터베이스를 읽기 복제본과 함께 포함해야 합니다.
+ `replicate-ignore-table` – 지정된 테이블에 변경 내용을 복제하지 마세요. 읽기 복제본에 대해 `replicate-do-table` 파라미터가 설정되면 이 파라미터는 평가되지 않습니다.
+ `replicate-wild-do-table` – 지정된 데이터베이스와 테이블 이름 패턴을 기반으로 테이블을 복제합니다. `%` 및 `_` 와일드카드 문자가 지원됩니다. `replicate-do-db` 또는 `replicate-ignore-db` 파라미터가 설정되면 복제에 지정된 테이블이 포함된 데이터베이스를 읽기 복제본과 함께 포함해야 합니다.
+ `replicate-wild-ignore-table` – 지정된 데이터베이스와 테이블 이름 패턴을 기반으로 테이블을 복제하지 마세요 `%` 및 `_` 와일드카드 문자가 지원됩니다. 읽기 복제본에 대해 `replicate-do-table` 또는 `replicate-wild-do-table` 파라미터가 설정되면 이 파라미터는 평가되지 않습니다.

파라미터는 나열된 순서대로 평가됩니다. 이러한 파라미터의 작동 방식에 대한 자세한 내용은 MySQL 설명서를 참조하세요.
+ 일반적인 내용은 [복제 서버 옵션 및 변수](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html)를 참조하세요.
+ 데이터베이스 복제 필터링 파라미터를 평가하는 방법에 대한 자세한 내용은 [데이터베이스 수준의 복제 및 이진 로깅 옵션 평가](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-db-options.html)를 참조하세요.
+ 테이블 복제 필터링 파라미터가 평가되는 방법에 대한 자세한 내용은 [테이블 수준의 복제 옵션 평가](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-table-options.html)를 참조하세요.

기본적으로 이러한 각 파라미터에는 빈 값이 있습니다. 각 읽기 복제본에서 이러한 파라미터를 사용하여 복제 필터를 설정, 변경 및 삭제할 수 있습니다. 이러한 파라미터 중 하나를 설정할 때 각 필터를 쉼표로 구분합니다.

`%` 및 `_` 파라미터에 `replicate-wild-do-table` 및 `replicate-wild-ignore-table` 와일드카드 문자를 사용할 수 있습니다. `%` 와일드카드는 원하는 수의 문자를 찾으며 `_` 와일드카드는 한 문자만 찾습니다.

원본 DB 인스턴스의 이진 로깅 형식은 데이터 변경 기록을 결정하므로 복제에 중요합니다. `binlog_format` 파라미터 설정에 따라 복제가 행 기반인지 또는 문 기반인지가 결정됩니다. 자세한 내용은 [단일 AZ 데이터베이스의 RDS for MySQL 이진 로깅 구성](USER_LogAccess.MySQL.BinaryFormat.md) 섹션을 참조하세요.

**참고**  
원본 DB 인스턴스의 `binlog_format` 설정과 관계없이, 모든 DDL(데이터 정의어) 문은 문으로 복제됩니다.

## RDS for MySQL에 대한 복제 필터링 제한 사항
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

RDS for MySQL에 대한 복제 필터링에 다음과 같은 제한 사항이 적용됩니다.
+ 각 복제 필터링 파라미터에는 2,000자 제한이 있습니다.
+ 파리미터 값의 복제 필터에서는 쉼표가 지원되지 않습니다. 파라미터 목록에서 쉼표는 값 구분자로만 사용할 수 있습니다. 예를 들어, `ParameterValue='a,b'`는 지원되지만 `ParameterValue='`a,b`'`는 지원되지 않습니다.
+ 이진 로그 필터링에 대해서는 MySQL `--binlog-do-db` 및 `--binlog-ignore-db` 옵션이 지원되지 않습니다.
+ 복제 필터링은 XA 트랜잭션을 지원하지 않습니다.

  자세한 내용은 MySQL 설명서에서 [XA 트랜잭션에 대한 제한 사항](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)을 참조하세요.

## RDS for MySQL에 대한 복제 필터링 예제
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples"></a>

읽기 복제본에 대한 복제 필터링을 구성하려면 읽기 복제본과 연결된 파라미터 그룹에서 복제 필터링 파라미터를 수정합니다.

**참고**  
기본 파라미터 그룹을 수정할 수 없습니다. 읽기 복제본에서 기본 파라미터 그룹을 사용 중인 경우 새 파라미터 그룹을 생성하여 읽기 복제본과 연결합니다. DB 파라미터 그룹에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 파라미터 그룹에서 파라미터를 설정할 수 있습니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요. 파라미터 그룹에서 파라미터를 설정하면 파라미터 그룹과 연결된 모든 DB 인스턴스가 파라미터 설정을 사용합니다. 파라미터 그룹에서 복제 필터링 파라미터를 설정하는 경우, 파라미터 그룹이 읽기 복제본에만 연결되어 있는지 확인합니다. 원본 DB 인스턴스에 대해 복제 필터링 파라미터를 비워 둡니다.

다음 예제에서는 AWS CLI를 사용하여 파라미터를 설정합니다. 이 예제는 CLI 명령이 완료된 직후에 파라미터가 변경되도록 `ApplyMethod`을(를) `immediate`(으)로 설정합니다. 읽기 복제본이 재부팅된 후 보류 중인 변경 사항을 적용하려면 `ApplyMethod`을(를) `pending-reboot`(으)로 설정합니다.

다음 예제에서는 복제 필터를 설정합니다.
+ [Including databases in replication](#rep-filter-in-dbs-mysql)
+ [Including tables in replication](#rep-filter-in-tables-mysql)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mysql)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mysql)
+ [Excluding tables from replication](#rep-filter-ex-tables-mysql)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mysql)<a name="rep-filter-in-dbs-mysql"></a>

**Example 복제에 데이터베이스 포함**  
다음 예제에서는 복제에 `mydb1` 및 `mydb2` 데이터베이스가 포함되어 있습니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-mysql"></a>

**Example 복제에 테이블 포함**  
다음 예제에서는 복제의 `table1` 데이터베이스에 `table2` 및 `mydb1` 테이블이 포함되어 있습니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-wildcards-mysql"></a>

**Example 와일드카드 문자를 사용하여 복제에 테이블 포함**  
다음 예제에서는 복제의 데이터베이스 `order`에 `return` 및 `mydb`(으)로 시작하는 이름을 가진 테이블이 포함되어 있습니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```<a name="rep-filter-ex-dbs-mysql"></a>

**Example 복제에서 데이터베이스 제외**  
다음 예제에서는 `mydb5` 및 `mydb6` 데이터베이스를 복제에서 제외합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-mysql"></a>

**Example 복제에서 테이블 제외**  
다음 예시에서는 데이터베이스 `mydb5`의 `table1` 테이블과 데이터베이스 `mydb6`의 `table2` 테이블을 복제에서 제외합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-wildcards-mysql"></a>

**Example 와일드카드 문자를 사용하여 복제에서 테이블 제외**  
다음 예제에서는 데이터베이스 `order`에서 `return` 및 `mydb7`(으)로 시작하는 이름을 가진 테이블을 복제에서 제외합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```

## 읽기 복제본에 대한 복제 필터 보기
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

다음과 같은 방법으로 읽기 복제본에 대한 복제 필터를 볼 수 있습니다.
+ 읽기 복제본과 연결된 파라미터 그룹에서 복제 필터링 파라미터 설정을 확인합니다.

  지침은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 값 보기](USER_WorkingWithParamGroups.Viewing.md) 섹션을 참조하세요.
+ MySQL 클라이언트에서 읽기 전용 복제본에 연결하고 `SHOW REPLICA STATUS` 문을 실행합니다.

  출력 시, 다음 필드에서 읽기 복제본에 대한 복제 필터를 보여줍니다.
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  이러한 필드에 대한 자세한 내용은 MySQL 설명서의 [복제 상태 확인](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)을 참조하세요.

# MySQL을 사용한 지연 복제 구성
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication"></a>

지연 복제를 재해 복구를 위한 전략으로 사용할 수 있습니다. 지연된 복제를 사용하여 원본에서 읽기 전용 복제본으로의 복제를 지연할 최소 시간(초)을 지정합니다. 재해 발생 시(예: 실수로 테이블 삭제) 다음 단계를 완료하여 재해로부터 빠르게 복구할 수 있습니다.
+ 재해를 일으킨 변경 사항이 읽기 전용 복제본으로 전송되기 이전에 읽기 전용 복제본에 대한 복제를 중지합니다.

  [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 저장 프로시저를 사용하여 복제를 중지합니다.
+ 복제를 시작하고 로그 파일 위치에서 복제가 자동으로 중지되도록 지정합니다.

  [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저를 사용하여 재해 직전 위치를 지정합니다.
+ [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 원본 DB 인스턴스로 승격합니다.

**참고**  
RDS for MySQL 8.4에서는 지연 복제가 MySQL 8.4.3 이상에 대해 지원됩니다. RDS for MySQL 8.0에서는 지연 복제가 MySQL 8.0.28 이상에 대해 지원됩니다. RDS for MySQL 5.7에서는 지연 복제가 MySQL 5.7.44 이상에 대해 지원됩니다.
저장 프로시저를 사용하여 지연된 복제를 구성합니다. AWS Management Console, AWS CLI 또는 Amazon RDS API를 사용하여 지연 복제를 구성할 수 없습니다.
다음 버전에 대한 지연된 복제 구성에서 전역 트랜잭션 ID(GTID)를 기반으로 하는 복제를 사용할 수 있습니다.  
RDS for MySQL 버전 5.7.44 이상 5.7 버전
RDS for MySQL 버전 8.0.28 이상 8.0 버전
RDS for MySQL 버전 8.4.3 이상 8.4 버전
GTID 기반 복제를 사용하는 경우 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저 대신 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저를 사용하십시오. GTID 기반 복제에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 단원을 참조하십시오.

**Topics**
+ [읽기 전용 복제본 생성 중 지연 복제 구성](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [기존 읽기 전용 복제본에 대한 지연 복제 수정](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [읽기 전용 복제본에 대한 복제를 중지할 위치 설정](#USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil)
+ [읽기 전용 복제본 승격](#USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote)

## 읽기 전용 복제본 생성 중 지연 복제 구성
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

DB 인스턴스에서 향후에 생성되는 읽기 전용 복제본에 대한 지연된 복제를 구성하려면 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 파라미터와 함께 `target delay` 저장 프로시저를 실행합니다.

**읽기 전용 복제본을 생성하는 동안 지연된 복제를 구성하려면**

1. MySQL 클라이언트를 사용하여 마스터 사용자로 읽기 전용 복제본에 대한 원본이 될 MySQL DB 인스턴스에 연결합니다.

1. [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 파라미터와 함께 `target delay` 저장 프로시저를 실행합니다.

   예를 들어, 현재 DB 인스턴스에서 생성되는 모든 읽기 전용 복제본에 대해 1시간(3,600초) 이상 복제를 지연하도록 지정하려면 다음 저장 프로시저를 실행합니다.

   ```
   call mysql.rds_set_configuration('target delay', 3600);
   ```
**참고**  
이 저장 프로시저를 실행한 후 AWS CLI 또는 Amazon RDS API를 사용하여 생성하는 모든 읽기 전용 복제본은 지정된 시간(초)만큼 복제를 지연하도록 구성됩니다.

## 기존 읽기 전용 복제본에 대한 지연 복제 수정
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

기존 읽기 전용 복제본에 대한 지연된 복제를 수정하려면 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 저장 프로시저를 실행합니다.

**기존 읽기 전용 복제본에 대한 지연된 복제를 수정하려면**

1. MySQL 클라이언트를 사용하여 마스터 사용자로 읽기 전용 복제본에 연결합니다.

1. [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 저장 프로시저를 사용하여 복제를 중지합니다.

1. [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 저장 프로시저를 실행합니다.

   예를 들어, 읽기 전용 복제본에 대한 복제가 1시간(3,600초) 이상 지연되도록 지정하려면 다음 저장 프로시저를 실행합니다.

   ```
   call mysql.rds_set_source_delay(3600);
   ```

1. [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 저장 프로시저를 사용하여 복제를 시작합니다.

## 읽기 전용 복제본에 대한 복제를 중지할 위치 설정
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil"></a>

읽기 전용 복제본에 대한 복제를 중단한 이후에 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저를 사용하여 복제를 시작한 다음 지정된 이진 로그 파일 위치에서 복제를 중지할 수 있습니다.

**읽기 전용 복제본에 대한 복제를 시작하고 특정 위치에서 복제를 중지하려면**

1. MySQL 클라이언트를 사용하여 원본 MySQL DB 인스턴스에 마스터 사용자로 연결합니다.

1. [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저를 실행합니다.

   다음 예제에서는 복제를 시작하고 `120` 바이너리 로그 파일의 `mysql-bin-changelog.000777` 위치에 도달할 때까지 변경 사항을 복제합니다. 재해 복구 시나리오에서 `120`이 재해 직전 위치라고 가정합니다.

   ```
   call mysql.rds_start_replication_until(
     'mysql-bin-changelog.000777',
     120);
   ```

중지 지점에 도달하면 복제가 자동으로 중지됩니다. `Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure` RDS 이벤트가 생성됩니다.

## 읽기 전용 복제본 승격
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote"></a>

복제가 중지된 후 재해 복구 시나리오에서 읽기 전용 복제본을 새 원본 DB 인스턴스로 승격할 수 있습니다. 읽기 전용 복제본 승격에 대한 자세한 내용은 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md) 단원을 참조하십시오.

# MySQL을 사용한 읽기 전용 복제본 업로드
<a name="USER_MySQL.Replication.ReadReplicas.Updates"></a>

읽기 전용 복제본은 읽기 쿼리를 지원하도록 설계되었지만 경우에 따라 업데이트가 필요할 수 있습니다. 예를 들어 특정 유형의 쿼리가 복제본에 대한 액세스를 최저거화하기 위해 인덱스를 추가해야 할 경우가 있습니다.

읽기 전용 복제본의 DB 파라미터 그룹에서 `read_only` 파라미터를 `0`으로 설정하여 업데이트를 활성화할 수 있지만, 읽기 전용 복제본이 소스 DB 인스턴스와 호환되지 않는 경우 문제가 발생할 수 있으므로 그렇게 하지 않는 것이 좋습니다. 유지 관리 작업의 경우 블루/그린 배포를 사용하는 것이 좋습니다. 자세한 내용은 [데이터베이스 업데이트에 블루/그린 배포 사용](blue-green-deployments.md) 섹션을 참조하세요.

읽기 전용 복제본에서 읽기 전용을 비활성화하는 경우 가능한 빨리 `read_only` 파라미터의 값을 `1`로 되돌려 변경합니다.

# MySQL을 사용한 다중 AZ 읽기 전용 복제본 배포 작업
<a name="USER_MySQL.Replication.ReadReplicas.MultiAZ"></a>

단일 AZ 또는 다중 AZ DB 인스턴스 배포를 통해 읽기 전용 복제본을 생성할 수 있습니다. 다중 AZ 배포는 중요 데이터의 내구성과 가용성을 개선하는 데 효과적이지만 읽기 전용 쿼리를 실행하는 데 보조로 사용할 수는 없습니다. 대신 트래픽이 많은 다중 AZ DB 인스턴스에서 읽기 전용 쿼리를 오프로드할 목적으로 읽기 전용 복제본을 생성할 수 있습니다. 다중 AZ 배포의 원본 인스턴스가 보조 인스턴스로 장애 조치되는 경우 연결된 모든 읽기 전용 복제본이 자동으로 전환되어 보조(이제는 기본) 인스턴스를 복제 원본으로 사용합니다. 자세한 내용은 [Amazon RDS에 대한 다중 AZ 배포 구성 및 관리](Concepts.MultiAZ.md) 섹션을 참조하세요.

다중 AZ DB 인스턴스에서 읽기 전용 복제본을 생성할 수 있습니다. Amazon RDS는 복제본에 대한 장애 조치 지원을 위해 대기 복제본을 다른 가용 영역에 생성합니다. 읽기 전용 복제본을 다중 AZ DB 인스턴스로 생성하는 작업은 원본 데이터베이스가 다중 AZ DB 인스턴스인지 여부와는 무관합니다.

# RDS for MySQL에서의 계단식 읽기 전용 복제본 사용
<a name="USER_MySQL.Replication.ReadReplicas.Cascading"></a>

RDS for MySQL은 계단식 읽기 전용 복제본을 지원합니다. *계단식 읽기 전용 복제본*을 사용하면 소스 RDS for MySQL DB 인스턴스에 오버헤드를 추가하지 않고도 읽기 전용 복제본 크기를 조정할 수 있습니다.

계단식 읽기 전용 복제본을 사용하면 RDS for MySQL DB 인스턴스가 데이터를 체인의 첫 번째 읽기 전용 복제본으로 전송합니다. 뒤이어 해당 읽기 전용 복제본이 데이터를 체인의 두 번째 복제본으로 전송하는 식으로 이루어집니다. 결과적으로 체인의 모든 읽기 전용 복제본이 소스 DB 인스턴스에만 오버헤드가 발생하는 일 없이 RDS for MySQL DB 인스턴스에서 변경됩니다.

소스 RDS for MyQL DB 인스턴스에서 체인에 최대 3개의 읽기 전용 복제본을 생성할 수 있습니다. 예를 들어 RDS MySQL DB 인스턴스, `mysql-main`이 있다고 가정해봅니다. 다음을 수행할 수 있습니다.
+ `mysql-main`부터 시작해서 체인에 첫 번째 읽기 전용 복제본 `read-replica-1`을 생성합니다.
+ 다음으로 `read-replica-1`에서 체인에 다음 읽기 전용 복제본 `read-replica-2`를 생성합니다.
+ 마지막으로 `read-replica-2`에서 체인에 세 번째 읽기 전용 복제본 `read-replica-3`을 생성합니다.

체인에서 `mysql-main`에 대한 세 번째 계단식 읽기 전용 복제본 다음으로 또 다른 읽기 전용 복제본을 생성할 수 없습니다. RDS for MySQL 소스 DB 인스턴스부터 계단식 읽기 전용 복제본 체인의 마지막에 이르는 전체 인스턴스는 최대 4개의 DB 인스턴스로 구성될 수 있습니다.

읽기 전용 복제본을 계단식으로 실행하려면 각 소스 RDS for MySQL DB 인스턴스에 자동 백업이 켜져 있어야 합니다. 읽기 전용 복제본에서 자동 백업을 켜려면 먼저 읽기 전용 복제본을 생성한 다음 자동 백업이 켜지도록 읽기 전용 복제본을 수정합니다. 자세한 내용은 [읽기 전용 복제본 생성](USER_ReadRepl.Create.md) 단원을 참조하십시오.

모든 읽기 전용 복제본과 마찬가지로 계단식 구성에 포함된 읽기 전용 복제본을 승격할 수 있습니다. 읽기 전용 복제본 체인의 한 읽기 전용 복제본을 승격하면 체인에서 해당 복제본이 제거됩니다. 예를 들어 `mysql-main` DB 인스턴스의 일부 워크로드를 회계 부서에서만 사용할 수 있도록 새 인스턴스로 옮기려고 합니다. 이 예제에서 3개의 읽기 전용 복제본 체인이 있다고 가정하고 `read-replica-2`를 승격하기로 결정합니다. 체인은 다음과 같이 변화합니다.
+ `read-replica-2`를 승격하면 복제 체인에서 제거됩니다.
  + 이제 전체 읽기/쓰기 DB 인스턴스가 됩니다.
  + 승격 전과 마찬가지로 `read-replica-3`으로 계속 복제합니다.
+ `mysql-main`은 `read-replica-1`로 계속 복제를 진행합니다.

읽기 전용 복제본 승격에 대한 자세한 내용은 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md) 섹션을 참조하세요.

# MySQL 읽기 전용 복제본의 복제 지연 모니터링
<a name="USER_MySQL.Replication.ReadReplicas.Monitor"></a>

MySQL 읽기 전용 복제본의 경우 Amazon RDS `ReplicaLag` 지표를 보면서 Amazon CloudWatch의 복제 지연을 모니터링할 수 있습니다. `ReplicaLag` 메트릭은 `Seconds_Behind_Master` 명령의 `SHOW REPLICA STATUS` 필드의 값을 보고합니다.

이렇게 MySQL에서 복제 지연이 발생하는 공통 원인은 다음과 같습니다.
+ 네트워크 중단.
+ 읽기 전용 복제본에 대한 서로 다른 인덱스를 가진 테이블에 쓰기 작업 중일 때. 읽기 전용 복제본에 `read_only` 파라미터가 `0`으로 설정된 경우 읽기 전용 복제본이 소스 DB 인스턴스와 호환되지 않으면 복제가 중단될 수 있습니다. 읽기 전용 복제본에 대한 유지 관리 작업을 수행한 후에는 `read_only` 파라미터를 다시 `1`로 설정하는 것이 좋습니다.
+ MyISAM과 같은 비트랜잭션 스토리지 엔진 사용. 복제는 MySQL의 InnoDB 스토리지 엔진에서만 지원됩니다.

`ReplicaLag` 지표가 0에 도달하면 복제본이 원본 DB 인스턴스를 따라잡은 것입니다. `ReplicaLag` 지표가 -1을 반환하는 경우 복제가 현재 활성이 아닙니다. `ReplicaLag` = -1은 `Seconds_Behind_Master` = `NULL`​과 동등합니다.

# MySQL 읽기 전용 복제본을 사용한 복제 시작 및 중지
<a name="USER_MySQL.Replication.ReadReplicas.StartStop"></a>

Amazon RDS DB 인스턴스에서는 시스템에 저장된 프로시저인 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication)과(와) [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)을 호출하여 복제 프로세스를 종료하거나 재시작할 수 있습니다. 대용량 인덱스를 생성하는 등 오랜 시간이 걸리는 작업에서 두 Amazon RDS 인스턴스를 서로 복제할 때도 이런 방법이 가능합니다. 또한 데이터베이스를 가져오거나 내보낼 때도 복제를 종료하거나 시작할 필요가 있습니다. 자세한 내용은 [가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기](mysql-importing-data-reduced-downtime.md) 및 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md)(을)를 참조하세요.

수동으로 또는 복제 오류로 인해 연속하여 30일 이상 복제가 중단된 경우에는 Amazon RDS가 원본 DB 인스턴스와 모든 읽기 전용 복제본 사이의 복제를 종료합니다. 이렇게 하는 이유는 소스 DB 인스턴스에 대한 스토리지 요건 증가와 장애 조치의 장기화를 방지하기 위해서입니다. 읽기 전용 복제본 DB 인스턴스는 계속 사용할 수 있습니다. 그러나 복제가 종료된 후 읽기 전용 복제본에 필요한 이진 로그가 원본 DB 인스턴스에서 삭제되므로 복제를 재개할 수 없습니다. 원본 DB 인스턴스에서 복제를 재설정하려면 새 읽기 전용 복제본을 생성해야 합니다.

# MySQL 읽기 전용 복제본의 문제 해결
<a name="USER_ReadRepl.Troubleshooting"></a>

MySQL DB 인스턴스의 경우 읽기 전용 복제본이 읽기 전용 복제본과 원본 DB 인스턴스 사이에 복제 오류, 데이터 불일치 또는 둘 다를 나타내는 경우가 있습니다. 이 문제는 읽기 전용 복제본 또는 원본 DB 인스턴스에 오류가 발생하는 동안 일부 이진 로그(binlog) 이벤트 또는 InnoDB 다시 실행 로그가 플러시되지 않는 경우에 발생합니다. 이러한 경우 수동으로 읽기 전용 복제본을 삭제한 후 재생성해야 합니다. `sync_binlog=1` 및 `innodb_flush_log_at_trx_commit=1` 파라미터 값을 설정하여 발생하는 이러한 가능성을 줄일 수 있습니다. 단, 이 설정은 성능 감소의 원인이 될 수도 있으므로 변경 사항을 프로덕션 환경에 적용하기 전에 그 효과를 테스트하는 것이 좋습니다.

**주의**  
원본 DB 인스턴스와 연결된 파라미터 그룹에서 `sync_binlog=1` 및 `innodb_flush_log_at_trx_commit=1` 파라미터 값을 유지하는 것이 좋습니다. 이러한 파라미터는 동적입니다. 이러한 설정을 사용하지 않으려면 원본 DB 인스턴스에서 이를 다시 시작하게 할 수 있는 작업을 실행하기 전에 해당 값을 임시로 설정하는 것이 좋습니다. 이러한 작업에는 재부팅, 장애 조치를 통한 재부팅, 데이터베이스 버전 업그레이드, DB 인스턴스 클래스 또는 해당 스토리지 변경이 포함되지만 이에 국한되지 않습니다. 원본 DB 인스턴스에 대한 읽기 전용 복제본을 새로 생성할 때도 동일한 권장 사항이 적용됩니다.  
이 지침을 따르지 않으면 읽기 전용 복제본이 읽기 전용 복제본과 원본 DB 인스턴스 간에 복제 오류, 데이터 불일치 또는 둘 다 발생할 위험이 높아집니다.

MySQL의 복제본 기술은 비동기적입니다. 간혹 원본 DB 인스턴스에서 `BinLogDiskUsage`가 증가하면 읽기 전용 복제본의 `ReplicaLag`가 예상되는 이유도 비동기식이기 때문입니다. 예를 들어 원본 DB 인스턴스에 대해 대량의 쓰기 작업이 동시에 발생할 수 있습니다. 반대로 읽기 전용 복제본에 대한 쓰기 작업은 단일 I/O 스레드를 사용하기 때문에 연이어 차례로 발생합니다. 이로 인해 원본 인스턴스와 읽기 전용 복제본 사이에 지연 시간이 있기 마련입니다. 읽기 전용 복제본에 대한 자세한 내용은 MySQL 설명서의 [복제 구현 세부 정보](https://dev.mysql.com/doc/refman/8.0/en/replication-implementation-details.html)를 참조하십시오.

원본 DB 인스턴스와 뒤이어 일어나는 읽기 전용 복제본의 업데이트 간 지연 시간을 줄일 수 있는 방법에는 다음과 같이 몇 가지가 있습니다.
+ 읽기 전용 복제본의 크기를 조정하여 원본 DB 인스턴스에 버금가는 스토리지 크기와 DB 인스턴스 클래스를 할당합니다.
+ 원본 DB 인스턴스와 읽기 전용 복제본에 사용되는 DB 파라미터 그룹의 파라미터 설정이 서로 호환되는지 확인합니다. 자세한 정보와 예는 이번 섹션 후반의 `max_allowed_packet` 파라미터 관련 설명을 참조하십시오.

Amazon RDS는 읽기 전용 복제본의 복제 상태를 모니터링하고, 어떤 이유로든 복제가 중지되는 경우 읽기 전용 복제본 인스턴스의 `Replication State` 필드를 `Error`로 업데이트합니다. 읽기 전용 복제본에서 실행되는 DML 쿼리가 원본 DB 인스턴스의 업데이트와 충돌하는 경우가 한 예가 될 수 있습니다.

MySQL 엔진에서 발생하는 관련 오류에 대한 세부 정보는 `Replication Error`필드에서 다시 확인할 수 있습니다. [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045), [RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046) 및 [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047)을 포함하여 읽기 전용 복제본의 상태를 나타내는 이벤트도 생성됩니다. 이벤트와 이벤트 구독에 대한 자세한 내용은 [Amazon RDS 이벤트 알림 작업](USER_Events.md) 단원을 참조하십시오. MySQL 오류 메시지가 반환되는 경우에는 [MySQL 오류 메시지 문서](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html)에서 오류 번호를 검토하십시오.

복제 오류의 원인이 되는 공통적인 문제를 하나 꼽으라고 하면 읽기 전용 복제본의 `max_allowed_packet` 파라미터 값이 원본 DB 인스턴스의 `max_allowed_packet` 파라미터 값보다 작을 때입니다. `max_allowed_packet` 파라미터는 DB 파라미터 그룹에서 설정할 수 있는 사용자 지정 파라미터입니다. `max_allowed_packet`을 사용하여 데이터베이스에서 실행할 수 있는 DML 코드의 최대 크기를 지정합니다. 경우에 따라 읽기 전용 복제본과 연결된 DB 파라미터 그룹의 `max_allowed_packet` 값이 원본 DB 인스턴스와 연결된 DB 파라미터 그룹의 `max_allowed_packet` 값보다 작습니다. 이러한 경우 복제 프로세스에서 오류(`Packet bigger than 'max_allowed_packet' bytes`)가 발생하여 복제가 중지될 수도 있습니다. 이 오류를 해결하려면 원본 DB 인스턴스와 읽기 전용 복제본이 동일한 `max_allowed_packet` 파라미터 값을 가진 DB 파라미터 그룹을 사용하도록 합니다.

이밖에 복제 오류의 원인이 되는 공통적인 상황은 다음과 같습니다.
+ 읽기 전용 복제본의 테이블에 쓰기 작업 중일 때. 경우에 따라 원본 DB 인스턴스의 인덱스와는 다른 읽기 전용 복제본의 인덱스를 생성할 수 있습니다. 이 경우 `read_only` 파라미터를 `0`으로 설정하여 인덱스를 생성합니다. 읽기 전용 복제본의 테이블에 쓰는 경우 읽기 전용 복제본이 원본 DB 인스턴스와 호환되지 않으면 복제가 중단될 수 있습니다. 읽기 전용 복제본에 대한 유지 관리 작업을 수행한 후에는 `read_only` 파라미터를 다시 `1`로 설정하는 것이 좋습니다.
+  MyISAM 같은 비트랜잭션 스토리지 엔진을 사용할 때. 읽기 전용 복제본에는 트랜잭션 스토리지 엔진이 필요합니다. 복제는 MySQL의 InnoDB 스토리지 엔진에서만 지원됩니다.
+  `SYSDATE()`와 같이 안전하지 않은 비결정적 쿼리를 사용하는 경우. 자세한 내용은 [바이너리 로깅에서 안전한 문과 안전하지 않은 문 결정](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)을 참조하세요.

오류를 건너뛰어도 안전하다고 판단될 경우에는 [RDS for MySQL에 대한 현재 복제 오류 건너뛰기](Appendix.MySQL.CommonDBATasks.SkipError.md) 섹션에 설명한 단계를 따르십시오. 아니면 먼저 읽기 전용 복제본을 삭제할 수 있습니다. 그런 다음 엔드포인트가 이전 읽기 전용 복제본의 엔드포인트와 동일하게 유지되도록 동일한 DB 인스턴스 식별자를 사용하여 인스턴스를 생성합니다. 복제 오류가 해결되면 `Replication State`가 *replicating*으로 변경됩니다.

# GTID 기반 복제 사용
<a name="mysql-replication-gtid"></a>

아래 내용에서는 Amazon RDS for MySQL DB 인스턴스 간 이진 로그(binlog) 복제를 통해 전역 트랜잭션 식별자(GTID)를 사용하는 방법이 나와 있습니다.

binlog 복제를 사용하고 있지만 MySQL을 사용한 GTID 기반 복제에 대해 잘 알지 못하는 경우 MySQL 설명서의 [전역 트랜잭션 식별자를 사용한 복제](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html)를 참조하세요.

GTID 기반 복제는 다음 버전에서 지원됩니다.
+ 모든 RDS for MySQL 8.4 버전
+ 모든 RDS for MySQL 8.0 버전
+ 모든 RDS for MySQL 5.7 버전

복제 구성의 모든 MySQL DB 인스턴스가 이 버전 요구 사항을 충족해야 합니다.

**Topics**
+ [전역 트랜잭션 식별자(GTID) 개요](#mysql-replication-gtid.overview)
+ [GTID 기반 복제 파라미터](#mysql-replication-gtid.parameters)
+ [RDS for MySQL용 새 읽기 전용 복제본에 대한 GTID 기반 복제 활성화](mysql-replication-gtid.configuring-new-read-replicas.md)
+ [RDS for MySQL용 기존 읽기 전용 복제본에 대한 GTID 기반 복제 활성화](mysql-replication-gtid.configuring-existing-read-replicas.md)
+ [읽기 전용 복제본이 포함된 MySQL DB 인스턴스에 대해 GTID 기반 복제 비활성화](mysql-replication-gtid.disabling.md)

## 전역 트랜잭션 식별자(GTID) 개요
<a name="mysql-replication-gtid.overview"></a>

*전역 트랜잭션 ID(GTIDs)* are unique identifiers generated for committed MySQL transactions. GTID를 사용해 binlog 복제 관련 문제를 더 간편하게 해결할 수 있습니다.

MySQL은 binlog 복제에 다음 두 가지 유형의 트랜잭션을 사용합니다.
+ *GTID 트랜잭션* – GTID로 식별되는 트랜잭션.
+ *익명 트랜잭션* – GTID가 할당되지 않은 트랜잭션.

복제 구성의 GTID는 모든 DB 인스턴스에서 고유합니다. GTID를 사용하면 로그 파일 위치를 참조할 필요가 없기 때문에 복제 구성이 간편해집니다. 또한 GTID를 사용하면 복제된 트랜잭션을 추적하고 소스 인스턴스 및 복제본이 일치하는지를 쉽게 확인할 수 있습니다.

GTID 기반 복제를 사용하여 RDS for MySQL 읽기 전용 복제본으로 데이터를 복제할 수 있습니다. 읽기 전용 복제본을 새로 생성할 때 GTID 기반 복제를 구성할 수 있습니다. 또는 기존 읽기 전용 복제본을 GTID 기반 복제를 사용하도록 변환할 수 있습니다.

RDS for MySQL을 사용하여 지연된 복제 구성에서 GTID 기반 복제를 사용할 수도 있습니다. 자세한 정보는 [MySQL을 사용한 지연 복제 구성](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)을 참조하세요.

## GTID 기반 복제 파라미터
<a name="mysql-replication-gtid.parameters"></a>

다음 파라미터를 사용하여 GTID 기반 복제를 구성할 수 있습니다.


| 파라미터 | 유효한 값 | 설명 | 
| --- | --- | --- | 
|  `gtid_mode`  |  `OFF`, `OFF_PERMISSIVE`, `ON_PERMISSIVE`, `ON`  |  `OFF`는 새 트랜잭션을 익명 트랜잭션(GTID가 없음)으로 지정하며, 트랜잭션을 복제하려면 익명이어야 합니다. `OFF_PERMISSIVE`는 새 트랜잭션을 익명 트랜잭션(GTID가 없음)으로 지정하지만, 모든 트랜잭션을 복제할 수 있습니다. `ON_PERMISSIVE`는 새 트랜잭션을 GTID 트랜잭션으로 지정하지만, 모든 트랜잭션을 복제할 수 있습니다. `ON`은 새 트랜잭션을 GTID 트랜잭션으로 지정하고, 트랜잭션을 복제하려면 GTID 트랜잭션이어야 합니다.  | 
|  `enforce_gtid_consistency`  |  `OFF`, `ON`, `WARN`  |  `OFF`는 트랜잭션이 GTID 일관성을 위반하는 것을 허용합니다. `ON`은 트랜잭션이 GTID 일관성을 위반하지 않도록 합니다. `WARN`은 트랜잭션이 GTID 일관성을 위반하는 것을 허용하지만, 위반이 발생할 경우 경고를 생성합니다.  | 

**참고**  
AWS Management Console 콘솔에서 `gtid_mode` 파라미터는 `gtid-mode`로 표시됩니다.

GTID 기반 복제의 경우 DB 인스턴스 또는 읽기 전용 복제본의 파라미터 그룹에 대해 이 설정을 사용하십시오.
+ `ON` 및 `ON_PERMISSIVE`는 RDS DB 인스턴스에서 밖으로 복제하는 경우에만 적용됩니다. 복제되는 트랜잭션에 대해 이 두 값으로 인해 RDS DB 인스턴스가 GTID를 사용하게 됩니다. `ON`은 대상 데이터베이스에서도 GTID 기반 복제를 사용할 것을 요구합니다. `ON_PERMISSIVE`로 인해 외부 데이터베이스에서 GTID 기반 복제는 선택 사항이 됩니다.
+ `OFF_PERMISSIVE`가 설정된 경우 이는 RDS DB 인스턴스가 소스 데이터베이스에서 안으로 복제하는 것을 수락할 수 있음을 뜻합니다. 소스 데이터베이스가 GTID 기반 복제를 사용하든, 사용하지 않든 수락이 가능합니다.
+ `OFF`가 설정된 경우 이는 RDS DB 인스턴스가 GTID 기반 복제를 사용하지 않는 소스 데이터베이스에서 안으로 복제하는 것만을 수락할 수 있음을 뜻합니다.

파라미터 그룹에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

# RDS for MySQL용 새 읽기 전용 복제본에 대한 GTID 기반 복제 활성화
<a name="mysql-replication-gtid.configuring-new-read-replicas"></a>

RDS for MySQL DB 인스턴스에 대해 GTID 기반 복제를 활성화하면 DB 인스턴스의 읽기 전용 복제본에 대해 GTID 기반 복제가 자동으로 구성됩니다.

**새 읽기 전용 복제본에 대해 GTID 기반 복제를 활성화하려면**

1. DB 인스턴스와 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되어 있는지 확인합니다.
   + `gtid_mode` – `ON` 또는 `ON_PERMISSIVE`
   + `enforce_gtid_consistency` – `ON`

   파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

1. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 이 작업을 수행하는 방법에 대한 자세한 내용은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 단원을 참조하십시오.

1.  DB 인스턴스의 읽기 전용 복제본을 한 개 이상 생성합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 [읽기 전용 복제본 생성](USER_ReadRepl.Create.md) 단원을 참조하십시오.

Amazon RDS는 `MASTER_AUTO_POSITION`를 사용하여 MySQL DB 인스턴스와 읽기 전용 복제본 간에 GTID 기본 복제를 설정하려고 시도합니다. 이 시도가 실패할 경우 Amazon RDS는 읽기 전용 복제본이 있는 복제의 로그 파일 위치를 사용합니다. `MASTER_AUTO_POSITION`에 대한 자세한 내용은 MySQL 설명서에서 [GTID 자동 배치](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-positioning.html)를 참조하십시오.

# RDS for MySQL용 기존 읽기 전용 복제본에 대한 GTID 기반 복제 활성화
<a name="mysql-replication-gtid.configuring-existing-read-replicas"></a>

읽기 전용 복제본이 포함되어 있고 GTID 기반 복제를 사용하지 않는 기존 MySQL DB 인스턴스의 경우에는 DB 인스턴스와 읽기 전용 복제본 간에 GTID 기반 복제를 구성할 수 있습니다.

**기존 읽기 전용 복제본에 대해 GTID 기반 복제를 활성화하려면**

1. DB 인스턴스 또는 모든 읽기 전용 복제본이 RDS for MySQL 버전 8.0.26보다 낮은 버전 8.0을 사용하는 경우 DB 인스턴스 또는 읽기 전용 복제본을 MySQL 8.0보다 높은 8.0.26으로 업그레이드합니다. 모든 RDS for MySQL 8.4 버전 및 5.7 버전이 GTID 기반 복제를 지원합니다.

   자세한 내용은 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md) 섹션을 참조하세요.

1. (선택 사항) GTID 파라미터를 재설정하고 DB 인스턴스와 읽기 전용 복제본의 동작을 테스트합니다.

   1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 `enforce_gtid_consistency` 파라미터가 `WARN`으로 설정되어 있는지 확인합니다.

      파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

   1. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 읽기 전용 복제본의 파라미터 그룹을 변경한 경우 읽기 전용 복제본을 재부팅합니다.

      자세한 내용은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 섹션을 참조하세요.

   1. 보통의 워크로드로 DB 인스턴스와 읽기 전용 복제본을 실행하고 로그 파일을 모니터링합니다.

      GTID 비호환 트랜잭션에 대한 경고가 표시될 경우, GTID 호환 기능만 사용하도록 애플리케이션을 조정하십시오. 다음 단계로 진행하기 전에 DB 인스턴스에서 GTID 비호환 트랜잭션에 대한 경고가 표시되지 않는지 확인합니다.

1. 읽기 전용 복제본이 모든 트랜잭션을 처리할 때까지 익명 트랜잭션을 허용하는 GTID 기반 복제에 대한 GTID 파라미터를 재설정합니다.

   1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.
      + `gtid_mode` – `ON_PERMISSIVE`
      + `enforce_gtid_consistency` – `ON`

   1. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 읽기 전용 복제본의 파라미터 그룹을 변경한 경우 읽기 전용 복제본을 재부팅합니다.

1. 익명 트랜잭션이 모두 복제될 때까지 기다립니다. 이러한 트랜잭션이 복제되었는지 확인하려면 다음과 같이 합니다.

   1. 소스 DB 인스턴스에서 다음 문을 실행합니다.

      **MySQL 8.4**

      ```
      SHOW BINARY LOG STATUS;
      ```

      **MySQL 5.7 및 8.0**

      ```
      SHOW MASTER STATUS;
      ```

      `File` 및 `Position` 열의 값을 메모합니다.

   1. 각 읽기 전용 복제본에서 이전 단계에서 메모한 소스 인스턴스의 파일 및 위치 정보를 사용하여 다음 쿼리를 실행합니다.

      ```
      SELECT MASTER_POS_WAIT('file', position);
      ```

      예를 들어, 파일 이름이 `mysql-bin-changelog.000031`이고 위치가 `107`일 경우 다음 명령문을 실행합니다.

      ```
      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

      읽기 전용 복제본이 지정된 위치에 전달되면 쿼리가 즉시 반환합니다. 그렇지 않으면 함수가 대기합니다. 모든 읽기 전용 복제본에 대해 쿼리가 반환하면 다음 단계로 진행합니다.

1. GTID 기반 복제에 대해서만 GTID 파라미터를 재설정합니다.

   1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.
      + `gtid_mode` – `ON`
      + `enforce_gtid_consistency` – `ON`

   1. DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.

1. 각각의 읽기 전용 복제본에서 다음 프로시저를 실행합니다.

   **MySQL 8.4 이상 메이저 버전**

   ```
   CALL mysql.rds_set_source_auto_position(1);
   ```

   **MySQL 8.0 이하 메이저 버전**

   ```
   CALL mysql.rds_set_master_auto_position(1);
   ```

# 읽기 전용 복제본이 포함된 MySQL DB 인스턴스에 대해 GTID 기반 복제 비활성화
<a name="mysql-replication-gtid.disabling"></a>

 읽기 전용 복제본이 포함된 MySQL DB 인스턴스입니다.

**읽기 전용 복제본이 포함된 MySQL DB 인스턴스에 대해 GTID 기반 복제를 비활성화하려면**

1. 각각의 읽기 전용 복제본에서 다음 프로시저를 실행합니다.

   **MySQL 8.4 이상 메이저 버전**

   ```
   CALL mysql.rds_set_source_auto_position(0);
   ```

   **MySQL 8.0 이하 메이저 버전**

   ```
   CALL mysql.rds_set_master_auto_position(0);
   ```

1. `gtid_mode`를 `ON_PERMISSIVE`로 재설정합니다.

   1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 `gtid_mode` 파라미터가 `ON_PERMISSIVE`로 설정되어 있는지 확인합니다.

      파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

   1. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다. 재부팅에 대한 자세한 내용은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 단원을 참조하십시오.

1. `gtid_mode`를 `OFF_PERMISSIVE`로 재설정합니다.

   1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 `gtid_mode` 파라미터가 `OFF_PERMISSIVE`로 설정되어 있는지 확인합니다.

   1. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.

1. 모든 읽기 전용 복제본에서 모든 GTID 트랜잭션이 적용될 때까지 기다립니다. 이러한 사항이 적용되었는지 확인하려면 다음 단계를 수행합니다.

   1. MySQL DB 인스턴스에서 다음 명령을 실행합니다.

      **MySQL 8.4**

      ```
      SHOW BINARY LOG STATUS
      ```

      **MySQL 5.7 및 8.0**

      ```
      SHOW MASTER STATUS
      ```

      출력이 다음 출력과 유사해야 합니다.

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

      출력에서 파일 및 위치를 메모합니다.

   1. 각 읽기 전용 복제본에서 이전 단계의 소스 인스턴스의 파일 및 위치 정보를 사용하여 다음 쿼리를 실행합니다.

      **MySQL 8.4 및 MySQL 8.0.26 이상 MySQL 8.0 버전**

      ```
      SELECT SOURCE_POS_WAIT('file', position);
      ```

      **MySQL 5.7**

      ```
      SELECT MASTER_POS_WAIT('file', position);
      ```

      예를 들어 파일 이름이 `mysql-bin-changelog.000031`이고 위치가 `107`일 경우 다음 문을 실행합니다.

      **MySQL 8.4 및 MySQL 8.0.26 이상 MySQL 8.0 버전**

      ```
      SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

      **MySQL 5.7**

      ```
      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

1. GTID 기반 복제를 비활성화하도록 GTID 파라미터를 재설정합니다.

   1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.
      + `gtid_mode` – `OFF`
      + `enforce_gtid_consistency` – `OFF`

   1. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.

# 외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성
<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;
   ```

# Amazon RDS for MySQL용 다중 소스 복제 구성
<a name="mysql-multi-source-replication"></a>

다중 소스 복제를 사용하면 Amazon RDS for MySQL DB 인스턴스를 둘 이상의 RDS for MySQL 소스 DB 인스턴스로부터 바이너리 로그 이벤트를 수신하는 복제본으로 설정할 수 있습니다. 다중 소스 복제는 다음 엔진 버전을 실행하는 RDS for MySQL DB 인스턴스에 지원됩니다.
+ 모든 MySQL 8.4 버전
+ 8.0.35 이상 마이너 버전
+ 5.7.44 이상 마이너 버전

MySQL 다중 소스 복제에 대한 자세한 내용은 MySQL 설명서의 [MySQL 다중 소스 복제](https://dev.mysql.com/doc/refman/8.0/en/replication-multi-source.html)를 참조하세요. MySQL 설명서에는 이 기능에 대한 자세한 정보가 포함되어 있으며, 이 항목에서는 RDS for MySQL DB 인스턴스에서 다중 소스 복제 채널을 구성하고 관리하는 방법을 설명합니다.

## 다중 소스 복제 사용 사례
<a name="mysql-multi-source-replication-benefits"></a>

RDS for MySQL에서 다중 소스 복제를 사용하기에 적합한 경우는 다음과 같습니다.
+ 개별 DB 인스턴스에 있는 여러 샤드를 단일 샤드로 병합하거나 결합해야 하는 애플리케이션
+ 여러 소스에서 통합된 데이터로 보고서를 생성해야 하는 애플리케이션
+ 여러 RDS for MySQL용 DB 인스턴스에 분산된 데이터의 통합 장기 백업을 생성하기 위한 요구 사항

## 다중 소스 복제를 위한 사전 요구 사항
<a name="mysql-multi-source-replication-prerequisites"></a>

다중 소스 복제를 구성하려면 먼저 다음 사전 조건을 완료하세요.
+ 각 소스 RDS for MySQL DB 인스턴스에 자동 백업이 활성화되어 있는지 확인하세요. 자동 백업을 활성화하면 바이너리 로깅이 활성화됩니다. 자동 백업을 활성화하는 방법에 대한 자세한 내용은 [자동 백업 활성화](USER_WorkingWithAutomatedBackups.Enabling.md) 섹션을 참조하세요.
+ 복제 오류를 방지하려면 소스 DB 인스턴스에 대한 쓰기 작업을 차단하는 것이 좋습니다. RDS for MySQL용 소스 DB 인스턴스에 연결된 사용자 지정 파라미터 그룹에서 `read-only` 파라미터를 `ON`으로 설정하면 됩니다. AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹을 새로 생성하거나 기존 그룹을 수정할 수 있습니다. 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹 생성](USER_WorkingWithParamGroups.Creating.md) 및 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md)(을)를 참조하세요.
+ 다중 소스 DB 인스턴스에 대한 Virtual Private Cloud(VPC) 보안 그룹에 각 소스 DB 인스턴스에 인스턴스의 IP 주소를 추가합니다. `dig RDS Endpoint` 명령을 실행하여 소스 DB 인스턴스의 IP 주소를 식별할 수 있습니다. 대상 다중 소스 DB 인스턴스의 VPC와 동일한 VPC의 Amazon EC2에서 명령을 실행합니다.
+ 다음 예제와 같이 각 소스 DB 인스턴스에 대해 클라이언트를 사용하여 DB 인스턴스에 연결하고 복제에 필요한 권한을 가진 데이터베이스 사용자를 생성합니다.

  ```
  CREATE USER 'repl_user' IDENTIFIED BY 'password';
  GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';
  ```
**참고**  
MySQL 8.4부터 `REPLICATION SLAVE` 권한은 더 이상 사용되지 않으며 `REPLICATION REPLICA`로 대체되었습니다. MySQL 8.4 이상 버전의 경우 다음 구문을 대신 사용합니다.  

  ```
  CREATE USER 'repl_user' IDENTIFIED BY 'password';
  GRANT REPLICATION CLIENT, REPLICATION REPLICA ON *.* TO 'repl_user';
  ```

## MySQL용 RDS의 다중 소스 복제 채널 구성
<a name="mysql-multi-source-replication-configuring-channels"></a>

다중 소스 복제 채널을 구성하는 것은 단일 소스 복제 구성과 비슷합니다. 다중 소스 복제의 경우 먼저 소스 인스턴스에 대한 이진 로깅을 설정합니다. 그런 다음 소스에서 다중 소스 복제본으로 데이터를 가져옵니다. 그런 다음 이진 로그 좌표를 사용하거나 GTID 자동 위치 지정을 사용하여 각 소스에서 복제를 시작합니다.

RDS for MySQL DB 인스턴스의 다중 소스 복제본인 RDS for MySQL DB 인스턴스의 다중 소스 복제본으로 구성하려면 다음 단계를 수행합니다.

**Topics**
+ [1단계: 소스 DB 인스턴스에서 다중 소스 복제본으로 데이터 가져오기](#mysql-multi-source-replication-import)
+ [2단계: 소스 DB 인스턴스에서 다중 소스 복제본으로의 복제 시작하기](#mysql-multi-source-replication-setting-up-start-replication-other)

### 1단계: 소스 DB 인스턴스에서 다중 소스 복제본으로 데이터 가져오기
<a name="mysql-multi-source-replication-import"></a>

각 소스 DB 인스턴스에서 다음 단계를 수행합니다.

소스에서 다중 소스 복제본으로 데이터를 가져오기 전에 `SHOW MASTER STATUS` 명령을 실행하여 현재 바이너리 로그 파일과 위치를 확인하세요. 다음 단계에서 사용할 수 있도록 이러한 세부 정보를 적어 둡니다. 이 예제 출력에서 파일은 `mysql-bin-changelog.000031`이고 위치는 `107`입니다.

**참고**  
MySQL 8.4부터 `SHOW MASTER STATUS` 명령이 더 이상 사용되지 않으며 `SHOW BINARY LOG STATUS`로 대체되었습니다. MySQL 8.4 이상 버전의 경우 `SHOW BINARY LOG STATUS`를 대신 사용합니다.

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

이제 다음 예제와 같이 `mysqldump`를 사용하여 소스 DB 인스턴스에서 다중 소스 복제본으로 데이터베이스를 복사합니다.

```
mysqldump --databases database_name \
 --single-transaction \
 --compress \
 --order-by-primary \
 -u RDS_user_name \
 -p RDS_password \
 --host=RDS Endpoint | mysql \
 --host=RDS Endpoint \
 --port=3306 \
 -u RDS_user_name \
-p RDS_password
```

데이터베이스를 복사한 후 소스 DB 인스턴스에서 읽기 전용 파라미터를 `OFF`로 설정할 수 있습니다.

### 2단계: 소스 DB 인스턴스에서 다중 소스 복제본으로의 복제 시작하기
<a name="mysql-multi-source-replication-setting-up-start-replication-other"></a>

각 소스 DB 인스턴스에 대해 관리 사용자 보안 인증을 사용하여 인스턴스에 연결하고 다음 두 개의 저장 프로시저를 실행합니다. 이러한 저장 프로시저는 채널에서 복제를 구성하고 복제를 시작합니다. 이 예에서는 이전 단계의 예제 출력에 있는 binlog 파일 이름과 위치를 사용합니다.

```
CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1, 'channel_1');
CALL mysql.rds_start_replication_for_channel('channel_1');
```

이러한 저장 프로시저 및 기타를 사용하여 복제 채널을 설정하고 관리하는 방법에 대한 자세한 내용은 [다중 소스 복제 관리](mysql-stored-proc-multi-source-replication.md) 섹션을 참조하세요.

## 다중 소스 복제와 함께 필터 사용
<a name="mysql-multi-source-replication-filters"></a>

복제 필터를 사용하여 다중 소스 복제본과 함께 복제할 데이터베이스와 테이블을 지정할 수 있습니다. 복제 필터는 데이터베이스와 테이블을 복제에 포함하거나 복제에서 제외할 수 있습니다. 복제 필터에 대한 자세한 정보는 [MySQL을 사용한 복제 필터 구성](USER_MySQL.Replication.ReadReplicas.ReplicationFilters.md) 섹션을 참조하세요.

다중 소스 복제를 사용하면 전체적으로 또는 채널 수준에서 복제 필터를 구성할 수 있습니다. 채널 수준 필터링은 버전 8.0 또는 버전 8.4를 실행하는 지원되는 DB 인스턴스에서만 사용할 수 있습니다. 다음 예제에서는 필터를 전역 또는 채널 수준에서 구성하는 방법을 보여줍니다.

다중 소스 복제의 필터링과 관련된 다음 요구 사항 및 동작을 참고하세요.
+ 채널 이름 주위에는 역따옴표(``)가 필요합니다.
+ 파라미터 그룹에서 복제 필터를 변경하면 업데이트가 적용된 모든 채널에 다중 소스 복제본의 `sql_thread`가 다시 시작되어 변경 내용이 동적으로 적용됩니다. 업데이트에 글로벌 필터가 포함된 경우 실행 상태의 모든 복제 채널이 다시 시작됩니다.
+ 모든 글로벌 필터는 채널별 필터보다 먼저 적용됩니다.
+ 필터가 전체적으로 채널 수준에서 적용되는 경우 채널 수준 필터만 적용됩니다. 예를 들어, 필터가 `replicate_ignore_db="db1,`channel_22`:db2"`이면 `db1`에 설정된 `replicate_ignore_db`는 `channel_22`를 제외한 모든 채널에 적용되고, `channel_22`만 `db2`의 변경 내용을 무시합니다.

예 1: 글로벌 필터 설정

다음 예시에서 `temp_data` 데이터베이스는 모든 채널의 복제에서 제외됩니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
--db-parameter-group-name myparametergroup \
--parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"
```

예 2: 채널 수준 필터 설정

다음 예제에서는 `sample22` 데이터베이스의 변경 내용이 `channel_22` 채널에만 포함됩니다. 마찬가지로 `sample99` 데이터베이스의 변경 사항은 `channel_99` 채널에만 포함됩니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
--db-parameter-group-name myparametergroup \
--parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"
```

## 다중 소스 복제 채널 모니터링
<a name="mysql-multi-source-replication-monitoring"></a>

다음 방법을 사용하여 다중 소스 복제본의 개별 채널을 모니터링할 수 있습니다.
+ 모든 채널 또는 특정 채널의 상태를 모니터링하려면 다중 소스 복제본에 연결하고 `SHOW REPLICA STATUS` 또는 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` 명령을 실행합니다. 이러한 필드에 대한 자세한 내용은 MySQL 설명서의 [복제 상태 확인](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)을 참조하세요.
+ 복제 채널이 시작, 중지 또는 제거될 때 알림을 받으려면 RDS 이벤트 알림을 사용합니다. 자세한 내용은 [Amazon RDS 이벤트 알림 작업](USER_Events.md) 섹션을 참조하세요.
+ 특정 채널의 지연을 모니터링하려면 해당 채널의 `ReplicationChannelLag` 지표를 확인하세요. 이 지표에 대해 기간이 60초(1분)로 설정된 데이터 요소들은 15일 동안 사용할 수 있습니다. 채널의 복제 채널 지연을 찾으려면 인스턴스 식별자와 복제 채널 이름을 사용하세요. 이 지연이 특정 임곗값을 초과할 때 알림을 받으려면 CloudWatch 경보를 설정할 수 있습니다. 자세한 내용은 [Amazon CloudWatch로 Amazon RDS 지표 모니터링](monitoring-cloudwatch.md) 섹션을 참조하세요.

## 다중 소스 복제의 고려 사항
<a name="mysql-multi-source-replication-considerations"></a>

RDS for MySQL에서 다중 소스 복제를 사용하기 전에 다음 고려 사항과 모범 사례를 검토하세요.
+ 다중 소스 복제본으로 구성된 DB 인스턴스에 처리량, 메모리, CPU, IOPS와 같은 리소스가 충분한지 확인하여 여러 원본 인스턴스의 워크로드를 처리할 수 있는지 확인하세요.
+ 다중 소스 복제본의 리소스 사용률을 정기적으로 모니터링하고 리소스에 부담을 주지 않고 워크로드를 처리할 수 있도록 스토리지 또는 인스턴스 구성을 조정하세요.
+ 시스템 변수 `replica_parallel_workers`를 `0`보다 큰 값으로 설정하여 다중 소스 복제본에서 다중 스레드 복제를 구성할 수 있습니다. 이 경우 각 채널에 할당된 스레드 수는 이 변수의 값에 해당 스레드를 관리하는 코디네이터 스레드 1개를 더한 값입니다.
+ 복제 필터를 적절하게 구성하여 충돌을 방지하세요. 전체 데이터베이스를 복제본의 다른 데이터베이스에 복제하기 위해 `--replicate-rewrite-db` 옵션을 사용할 수 있습니다. 예를 들어 데이터베이스 A의 모든 테이블을 복제 인스턴스의 데이터베이스 B에 복제할 수 있습니다. 이 접근 방식은 모든 원본 인스턴스가 동일한 스키마 명명 규칙을 사용할 때 유용할 수 있습니다. `--replicate-rewrite-db` 옵션에 대한 자세한 내용은 MySQL 설명서의 [복제본 서버 옵션 및 변수](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html)를 참조하세요.
+ 복제 오류를 방지하려면 복제본에 쓰지 마세요. 쓰기 작업을 차단하려면 다중 소스 복제본에서 `read_only` 파라미터를 활성화하는 것이 좋습니다. 이렇게 하면 쓰기 작업 충돌로 인한 복제 문제를 해결하는 데 도움이 됩니다.
+ 다중 소스 복제본에서 실행되는 정렬 및 고부하 조인과 같은 읽기 작업의 성능을 높이려면 RDS 최적화된 읽기를 사용하는 것이 좋습니다. 이 기능은 대규모 임시 테이블이나 정렬 파일에 의존하는 쿼리에 유용할 수 있습니다. 자세한 내용은 [Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선](rds-optimized-reads.md) 섹션을 참조하세요.
+ 복제 지연을 최소화하고 다중 소스 복제본의 성능을 개선하려면 쓰기 최적화를 활성화하는 것이 좋습니다. 자세한 내용은 [RDS Optimized Writes for MySQL을 통한 쓰기 성능 개선](rds-optimized-writes.md) 섹션을 참조하세요.
+ 한 번에 한 채널에서 관리 작업(예: 구성 변경)을 수행하고 여러 연결에서 여러 채널을 변경하지 마세요. 이러한 경우 복제 작업에서 충돌이 발생할 수 있습니다. 예를 들어 여러 연결에서 `rds_skip_repl_error_for_channel` 및 `rds_start_replication_for_channel` 프로시저를 동시에 실행하면 의도한 것과 다른 채널의 이벤트를 건너뛸 수 있습니다.
+ 다중 소스 복제 인스턴스에서 백업을 활성화하고 해당 인스턴스의 데이터를 Amazon S3 버킷으로 내보내 장기간 사용할 수 있도록 저장할 수 있습니다. 하지만 개별 소스 인스턴스에 적절한 보존 기간을 두고 백업을 구성하는 것도 중요합니다. Amazon S3로 DB 스냅샷 데이터 내보내기에 대한 자세한 내용은 [Amazon S3 for Amazon RDS로 DB 스냅샷 데이터 내보내기](USER_ExportSnapshot.md) 섹션을 참조하세요.
+ 다중 소스 복제본에 읽기 워크로드를 분산하려면 다중 소스 복제본에서 읽기 전용 복제본을 생성할 수 있습니다. 애플리케이션의 요구 사항에 따라 다른 AWS 리전에서 이러한 읽기 전용 복제본을 찾을 수 있습니다. 읽기 전용 복제본에 대한 자세한 내용은 [MySQL 읽기 전용 복제본 작업](USER_MySQL.Replication.ReadReplicas.md)을 참조하세요.

## RDS for MySQL용 다중 소스 복제 제한
<a name="mysql-multi-source-replication-limitations"></a>

RDS for MySQL용 다중 소스에 다음과 같은 제한 사항이 적용됩니다.
+ 현재 RDS for MySQL은 다중 소스 복제본에 대해 최대 15개의 채널 구성을 지원합니다.
+ 읽기 복제본 인스턴스는 다중 소스 복제본으로 구성할 수 없습니다.
+ 엔진 버전 5.7을 실행하는 RDS for MySQL에서 다중 소스 복제를 구성하려면 복제본 인스턴스에서 성능 스키마를 활성화해야 합니다. RDS for MySQL 엔진 버전 8.0 또는 8.4에서 성능 스키마를 활성화 하는 것은 선택 사항입니다.
+ 엔진 버전 5.7을 실행하는 RDS for MySQL의 경우 복제 필터가 모든 복제 채널에 적용됩니다. 엔진 버전 8.0 또는 8.4를 실행하는 RDS for MySQL의 경우 모든 복제 채널 또는 개별 채널에 적용되는 필터를 구성할 수 있습니다.
+ RDS 스냅샷을 복원하거나 시점 복구(PITR)를 수행해도 다중 소스 복제본 채널 구성은 복원되지 않습니다.
+ 다중 소스 복제본의 읽기 전용 복제본을 생성하면 다중 소스 인스턴스의 데이터만 복제됩니다. 채널 구성은 복원되지 않습니다.
+ MySQL은 각 채널에 대해 다른 수의 병렬 워커를 설정하는 것을 지원하지 않습니다. 모든 채널은 `replica_parallel_workers` 값에 따라 동일한 수의 병렬 워커를 받습니다.

다중 소스 복제 대상이 다중 AZ DB 클러스터인 경우 다음과 같은 추가 제한 사항이 적용됩니다.
+ 소스 RDS for MySQL 인스턴스용 채널을 구성해야 해당 인스턴스에 쓰기 작업을 수행할 수 있습니다.
+ RDS for MySQL 인스턴스의 경우 GTID 기반 복제가 활성화되어야 합니다.
+ DB 클러스터의 장애 조치 이벤트가 발생하면 다중 소스 복제 구성이 제거됩니다. 해당 구성을 복원하려면 구성 단계를 반복해야 합니다.