

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

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

또한 MariaDB DB 인스턴스에 대해 바이너리 로그 좌표를 기반으로 복제를 구성할 수 있습니다. MariaDB 인스턴스의 경우에는 전역 트랜잭션 ID(GTID)를 기반으로 복제를 구성할 수도 있습니다. 그러면 충돌 안정성이 개선됩니다. 자세한 내용은 [외부 소스 인스턴스를 사용하여 GTID 기반 복제 구성](MariaDB.Procedural.Replication.GTID.md) 단원을 참조하십시오.

다음은 RDS for MariaDB에서 사용 가능한 다른 복제 옵션입니다.
+ RDS for MySQL 또는 MariaDB DB 인스턴스와 Amazon RDS 외부에 있는 MariaDB 인스턴스 간의 복제를 설정할 수 있습니다. 외부 소스를 사용하여 복제를 구성하는 방법에 대한 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.ReplMariaDB.md) 단원을 참조하십시오.
+ Amazon RDS 외부에 있는 MySQL 또는 MariaDB 인스턴스에서 데이터베이스를 가져오거나 그런 인스턴스로 데이터베이스를 내보내도록 복제를 구성할 수 있습니다. 자세한 내용은 [가동 중지 시간을 줄이면서 Amazon RDS for MariaDB DB 인스턴스로 데이터 가져오기](mariadb-importing-data-reduced-downtime.md) 및 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md)(을)를 참조하세요.

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

MariaDB 버전 간의 복제 호환성에 대한 자세한 내용은 MariaDB 설명서의 [Replication Compatibility](https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/#replication-compatibility)를 참조하세요.

**Topics**
+ [MariaDB 읽기 전용 복제본 작업](USER_MariaDB.Replication.ReadReplicas.md)
+ [외부 소스 인스턴스를 사용하여 GTID 기반 복제 구성](MariaDB.Procedural.Replication.GTID.md)
+ [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.ReplMariaDB.md)

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

다음으로, Amazon RDS for MariaDB에서의 읽기 복제본 작업에 대한 특정 정보를 찾을 수 있습니다. 읽기 전용 복제본에 대한 일반적인 정보와 사용 지침은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 단원을 참조하십시오.
+ [MariaDB를 사용한 복제 필터 구성](USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.md)
+ [MariaDB를 사용한 지연 복제 구성](USER_MariaDB.Replication.ReadReplicas.DelayReplication.md)
+ [MariaDB를 사용한 읽기 전용 복제본 업데이트](USER_MariaDB.Replication.ReadReplicas.Updates.md)
+ [MariaDB를 사용한 다중 AZ 읽기 전용 복제본 배포 작업](USER_MariaDB.Replication.ReadReplicas.MultiAZ.md)
+ [RDS for MariaDB에서의 계단식 읽기 전용 복제본 사용](USER_MariaDB.Replication.ReadReplicas.Cascading.md)
+ [MariaDB 읽기 전용 복제본 모니터링](USER_MariaDB.Replication.ReadReplicas.Monitor.md)
+ [MariaDB 읽기 전용 복제본을 사용한 복제 시작 및 중지](USER_MariaDB.Replication.ReadReplicas.StartStop.md)
+ [MariaDB 읽기 전용 복제본의 문제 해결](USER_ReadRepl.Troubleshooting.MariaDB.md)

## MariaDB를 사용한 읽기 전용 복제본 구성
<a name="USER_MariaDB.Replication.ReadReplicas.Configuration"></a>

MariaDB DB 인스턴스가 복제 소스 역할을 하기 전에 백업 보존 기간을 0이 아닌 값으로 설정하여 소스 DB 인스턴스에서 자동 백업을 켜야 합니다. 이 요구 사항은 다른 읽기 전용 복제본의 원본 DB 인스턴스인 읽기 전용 복제본에도 적용됩니다.

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

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

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

# MariaDB를 사용한 복제 필터 구성
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters"></a>

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

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

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

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

## Amazon RDS for MariaDB에 대한 복제 필터링 파라미터 설정
<a name="USER_MariaDB.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` 파라미터가 설정되면 이 파라미터는 평가되지 않습니다.

파라미터는 나열된 순서대로 평가됩니다. 이러한 파라미터의 작동 방식에 대한 자세한 내용은 [MariaDB 설명서](https://mariadb.com/kb/en/replication-filters/#replication-filters-for-replication-slaves)를 참조하세요.

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

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

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

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

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

RDS for MariaDB에 대한 복제 필터링에 다음과 같은 제한 사항이 적용됩니다.
+ 각 복제 필터링 파라미터에는 2,000자 제한이 있습니다.
+ 복제 필터에서는 쉼표가 지원되지 않습니다.
+ 이진 로그 필터링에 대해서는 MariaDB `binlog_do_db` 및 `binlog_ignore_db` 옵션이 지원되지 않습니다.
+ 복제 필터링은 XA 트랜잭션을 지원하지 않습니다.

  자세한 내용은 MySQL 설명서에서 [XA 트랜잭션에 대한 제한 사항](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)을 참조하세요.
+ RDS for MariaDB 버전 10.2에 대해서는 복제 필터링이 지원되지 않습니다.

## RDS for MariaDB에 대한 복제 필터링 예제
<a name="USER_MariaDB.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-mariadb)
+ [Including tables in replication](#rep-filter-in-tables-mariadb)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mariadb)
+ [Escaping wildcard characters in names](#rep-filter-escape-wildcards-mariadb)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mariadb)
+ [Excluding tables from replication](#rep-filter-ex-tables-mariadb)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mariadb)<a name="rep-filter-in-dbs-mariadb"></a>

**Example 복제에 데이터베이스 포함**  
다음 예제에서는 복제에 `mydb1` 및 `mydb2` 데이터베이스가 포함되어 있습니다. 읽기 복제본에 대해 `replicate-do-db`을(를) 설정하면 파라미터에 지정된 데이터베이스만 복제됩니다.  
대상 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-mariadb"></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-mariadb"></a>

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

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-escape-wildcards-mariadb"></a>

**Example 이름에서 와일드카드 문자 이스케이프**  
다음 예제에서는 이스케이프 문자 `\`을(를) 사용하여 이름의 일부인 와일드카드 문자를 이스케이프하는 방법을 보여줍니다.  
`mydb1`(으)로 시작하는 데이터베이스 `my_table`에 여러 테이블 이름이 있다고 가정하고, 이러한 테이블을 복제에 포함하고자 합니다. 테이블 이름에 와일드카드 문자이기도 한 밑줄이 포함되어 있으므로 테이블 이름에서 밑줄을 이스케이프합니다.  
대상 LinuxmacOS, 또는Unix:  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-dbs-mariadb"></a>

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

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-mariadb"></a>

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

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-wildcards-mariadb"></a>

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

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
Windows의 경우:  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```

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

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

  지침은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 값 보기](USER_WorkingWithParamGroups.Viewing.md) 섹션을 참조하세요.
+ MariaDB 클라이언트에서 읽기 전용 복제본에 연결하고 `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)을 참조하세요.
**참고**  
이전 버전의 MariaDB에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 10.5 이전 MariaDB 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

# MariaDB를 사용한 지연 복제 구성
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication"></a>

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

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

**참고**  
지연된 복제는 MariaDB 10.6 이상에서 지원됩니다.
저장 프로시저를 사용하여 지연된 복제를 구성합니다. AWS Management Console, AWS CLI 또는 Amazon RDS API를 사용하여 지연 복제를 구성할 수 없습니다.
지연된 복제 구성에서 전역 트랜잭션 ID(GTID)를 기반으로 하는 복제를 사용할 수 있습니다.

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

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

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

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

1. MariaDB 클라이언트를 사용하여 마스터 사용자로 읽기 전용 복제본에 대한 원본이 될 MariaDB 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_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

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

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

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

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_MariaDB.Replication.ReadReplicas.DelayReplication.Promote"></a>

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

# MariaDB를 사용한 읽기 전용 복제본 업데이트
<a name="USER_MariaDB.Replication.ReadReplicas.Updates"></a>

읽기 전용 복제본은 읽기 쿼리를 지원하도록 설계되었지만 경우에 따라 업데이트가 필요할 수 있습니다. 예를 들어 특정 유형의 쿼리가 복제본에 액세스하는 속도를 높이기 위해 인덱스를 추가해야 할 경우가 있습니다. 읽기 전용 복제본의 DB 파라미터 그룹에서 `read_only` 파라미터를 **0**으로 설정하여 업데이트를 활성화할 수 있습니다.

# MariaDB를 사용한 다중 AZ 읽기 전용 복제본 배포 작업
<a name="USER_MariaDB.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 MariaDB에서의 계단식 읽기 전용 복제본 사용
<a name="USER_MariaDB.Replication.ReadReplicas.Cascading"></a>

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

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

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

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

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

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

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

# MariaDB 읽기 전용 복제본 모니터링
<a name="USER_MariaDB.Replication.ReadReplicas.Monitor"></a>

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

**참고**  
이전 버전의 MariaDB에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 10.5 이전 MariaDB 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

이렇게 MariaDB에서 복제 지연이 발생하는 공통 원인은 다음과 같습니다.
+ 네트워크 중단.
+ 읽기 전용 복제본의 인덱스가 있는 테이블에 쓰기 작업 중일 때. 읽기 전용 복제본에서 `read_only` 파라미터가 0으로 설정되어 있지 않으면 복제가 중단될 수 있습니다.
+ MyISAM과 같은 비트랜잭션 스토리지 엔진 사용. 복제는 MariaDB의 InnoDB 스토리지 엔진에서만 지원됩니다.

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

# MariaDB 읽기 전용 복제본을 사용한 복제 시작 및 중지
<a name="USER_MariaDB.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 MariaDB DB 인스턴스로 데이터 가져오기](mariadb-importing-data-reduced-downtime.md) 및 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md)(을)를 참조하세요.

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

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

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

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

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

MariaDB 엔진에서 발생하는 관련 오류에 대한 세부 정보는 `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) 단원을 참조하십시오. MariaDB 오류 메시지가 반환되는 경우 [MariaDB 오류 메시지 문서](http://mariadb.com/kb/en/mariadb/mariadb-error-codes/)에 설명되어 있는 오류를 검토하십시오.

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

이밖에 복제 오류의 원인이 되는 공통적인 상황은 다음과 같습니다.
+ 읽기 전용 복제본의 테이블에 쓰기 작업 중일 때. 읽기 전용 복제본에서 인덱스를 생성 중인 경우 `read_only` 파라미터를 **0**으로 설정하여 인덱스를 생성해야 합니다. 읽기 전용 복제본의 테이블에 쓰기 작업 중인 경우 복제가 중단될 수 있습니다.
+ MyISAM과 같은 비트랜잭션 스토리지 엔진을 사용할 때. 읽기 전용 복제본에 트랜잭션 스토리지 엔진이 필요합니다. 복제는 MariaDB의 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*으로 변경됩니다.

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

# 외부 소스 인스턴스를 사용하여 GTID 기반 복제 구성
<a name="MariaDB.Procedural.Replication.GTID"></a>

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

**참고**  
MariaDB DB 인스턴스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 따라서 Amazon RDS [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 및 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 명령을 사용하여 라이브 데이터베이스와 RDS for MariaDB 데이터베이스 사이의 복제를 설정해야 합니다.

외부 소스 인스턴스와 Amazon RDS의 MariaDB DB 인스턴스 간에 복제를 시작하려면 다음 절차를 수행하십시오.<a name="MariaDB.Procedural.Importing.External.Repl.Procedure"></a>

**복제를 시작하려면**

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

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

1. 외부 MariaDB 인스턴스의 현재 GTID를 가져옵니다. 이를 위해 `mysql` 또는 원하는 쿼리 편집기를 사용하여 `SELECT @@gtid_current_pos;`를 실행할 수 있습니다.

   GTID는 `<domain-id>-<server-id>-<sequence-id>` 형식입니다. 일반적인 GTID는 **0-1234510749-1728**과 비슷한 형식입니다. GTID 및 그 구성 요소에 대한 자세한 내용은 MariaDB 설명서의 [전역 트랜잭션 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)를 참조하십시오.

1. `mysqldump`를 사용하여 외부 MariaDB 인스턴스에서 MariaDB DB 인스턴스로 데이터베이스를 복사합니다. 매우 큰 데이터베이스의 경우, [가동 중지 시간을 줄이면서 Amazon RDS for MariaDB DB 인스턴스로 데이터 가져오기](mariadb-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` 옵션과 입력한 암호 사이에 공백이 없어야 합니다.  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

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

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

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

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

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

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

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

   ```
   host db_instance_endpoint
   ```

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

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

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

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

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

1. MariaDB DB 인스턴스를 복제본으로 만듭니다. 마스터 사용자로서 MariaDB DB 인스턴스에 연결하고 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 명령을 사용하여 외부 MariaDB 데이터베이스를 복제 소스 인스턴스로 식별합니다. 2단계에서 확인된 GTID를 사용하십시오. 다음은 예입니다.

   ```
   CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
   ```
**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

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

   ```
   CALL mysql.rds_start_replication; 
   ```

# 외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성
<a name="MySQL.Procedural.Importing.External.ReplMariaDB"></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;
   ```