

# Amazon RDS for MySQL
<a name="CHAP_MySQL"></a>

Amazon RDS는 여러 버전의 MySQL for DB 인스턴스를 지원합니다. 지원되는 버전에 대한 전체 정보는 [Amazon RDS의 MySQL 버전](MySQL.Concepts.VersionMgmt.md) 섹션을 참조하세요.

Amazon RDS for MySQL DB 인스턴스를 생성하려면 Amazon RDS 관리 도구 또는 인터페이스를 사용하면 됩니다. 그러면 다음 작업을 수행할 수 있습니다.
+ DB 인스턴스 크기 조정
+ DB 인스턴스로의 연결 승인
+ 백업 또는 스냅샷에서 생성 및 복원
+ 보조 다중 AZ 생성
+ 읽기 전용 복제본 생성
+ DB 인스턴스의 성능 모니터링

DB 인스턴스의 데이터를 저장하고 이에 액세스하려면 표준 MySQL 유틸리티 및 애플리케이션을 사용하면 됩니다.

Amazon RDS for MySQL은 다수의 산업 표준을 준수합니다. 예를 들어, RDS for MySQL 데이터베이스를 사용하여 HIPAA 호환 애플리케이션을 개발할 수 있습니다. RDS for MySQL 데이터베이스를 사용하여 AWS와의 비즈니스 제휴 계약(BAA)에 따라 보호 대상 건강 정보(PHI)를 비롯한 의료 관련 정보를 저장할 수 있습니다. Amazon RDS for MySQL은 또한 연방 위험 및 인증 관리 프로그램(FedRAMP) 보안 요건을 충족합니다. 나아가 Amazon RDS for MySQL은 FedRAMP 공동 승인 위원회(JAB)로부터 AWS GovCloud (US) 리전 내에 FedRAMP HIGH Baseline 수준의 잠정적 운영 권한(P-ATO)을 받았습니다. 지원되는 규정 준수 표준에 대한 자세한 내용은 [AWS 클라우드 규정 준수](https://aws.amazon.com/compliance/)를 참조하세요.

MySQL의 각 버전의 기능에 대한 내용은 MySQL 설명서의 [MySQL의 기본 기능](https://dev.mysql.com/doc/refman/8.0/en/features.html) 단원을 참조하십시오.

DB 인스턴스를 생성하기 전에 [Amazon RDS 환경 설정](CHAP_SettingUp.md) 단계를 완료합니다. DB 인스턴스를 생성하면 RDS 마스터 사용자에 DBA 권한이 부여되나, 몇 가지 제한이 적용됩니다. 추가 데이터베이스 계정 생성과 같은 관리 작업에 이 계정을 사용합니다.

다음을 생성할 수 있습니다.
+ DB 인스턴스
+ DB 스냅샷
+ 특정 시점 복원
+ 자동 백업
+ 수동 백업

Amazon VPC를 기반으로 Virtual Private Cloud(VPC)에서 MySQL을 실행하는 DB 인스턴스를 사용할 수 있습니다. 또한 다양한 옵션을 활성화하여 MySQL DB 인스턴스에 기능을 추가할 수 있습니다. Amazon RDS는 고가용성 장애 조치 솔루션으로 MySQL에 다중 AZ 배포를 지원합니다.

**중요**  
관리형 서비스 환경을 제공하기 위해 Amazon RDS는 DB 인스턴스에 대해 shell 액세스를 제공하지 않습니다. 또한 고급 권한이 필요한 특정 시스템 절차와 테이블에 대한 액세스를 제한합니다. mysql 클라이언트와 같은 표준 SQL 클라이언트를 사용하여 데이터베이스에 액세스할 수 있습니다. 그러나 Telnet 또는 SSH(Secure Shell)를 사용하여 호스트에 직접 액세스할 수는 없습니다.

**Topics**
+ [

# Amazon RDS에서 지원되는 MySQL 기능
](MySQL.Concepts.FeatureSupport.md)
+ [

# Amazon RDS의 MySQL 버전
](MySQL.Concepts.VersionMgmt.md)
+ [

# MySQL DB 인스턴스에 연결
](USER_ConnectToInstance.md)
+ [

# MySQL DB 인스턴스 연결 보안
](securing-mysql-connections.md)
+ [

# Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선
](rds-optimized-reads.md)
+ [

# RDS Optimized Writes for MySQL을 통한 쓰기 성능 개선
](rds-optimized-writes.md)
+ [

# RDS for MySQL DB 엔진 업그레이드
](USER_UpgradeDBInstance.MySQL.md)
+ [

# MySQL DB 스냅샷 엔진 버전 업그레이드
](mysql-upgrade-snapshot.md)
+ [

# Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기
](MySQL.Procedural.Importing.Other.md)
+ [

# Amazon RDS에서 MySQL 복제 작업
](USER_MySQL.Replication.md)
+ [

# RDS for MySQL 액티브-액티브 클러스터 구성
](mysql-active-active-clusters.md)
+ [

# 복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기
](MySQL.Procedural.Exporting.NonRDSRepl.md)
+ [

# MySQL DB 인스턴스 옵션
](Appendix.MySQL.Options.md)
+ [

# MySQL 파라미터
](Appendix.MySQL.Parameters.md)
+ [

# MySQL DB 인스턴스에 대한 공통 DBA 작업
](Appendix.MySQL.CommonDBATasks.md)
+ [

# MySQL DB 인스턴스의 현지 시간대
](MySQL.Concepts.LocalTimeZone.md)
+ [

# Amazon RDS for MySQL에 대해 알려진 문제 및 제한
](MySQL.KnownIssuesAndLimitations.md)
+ [

# RDS for MySQL 저장 프로시저 참조
](Appendix.MySQL.SQLRef.md)

# Amazon RDS에서 지원되는 MySQL 기능
<a name="MySQL.Concepts.FeatureSupport"></a>

RDS for MySQL은 MySQL의 특징과 기능을 대부분 지원합니다. 일부 기능에는 제한된 지원 또는 제한된 권한이 있을 수 있습니다.

[데이터베이스 관련 새로운 소식](https://aws.amazon.com/about-aws/whats-new/database/) 페이지에서 새로운 Amazon RDS 기능을 필터링할 수 있습니다. [**제품(Products)**]에서 [**Amazon RDS**]를 선택합니다. 그런 다음 **MySQL 2022**과 같은 키워드를 사용하여 검색합니다.

**참고**  
다음 목록이 전부는 아닙니다.

**Topics**
+ [

## Amazon RDS for MySQL 메이저 버전에 MySQL 기능 지원
](#MySQL.Concepts.FeatureSupport.MajorVersions)
+ [

## RDS for MySQL에 대해 지원되는 스토리지 엔진
](#MySQL.Concepts.Storage)
+ [

## Amazon RDS의 MySQL에서 memcached 및 기타 옵션 사용
](#MySQL.Concepts.General.Options)
+ [

## Amazon RDS의 MySQL용 InnoDB 캐시 워밍
](#MySQL.Concepts.InnoDBCacheWarming)
+ [

## RDS for MySQL 8.4의 포용적인 언어 변경 사항
](#mysql-8-4-inclusive-language-changes)
+ [

## Amazon RDS가 지원하지 않는 MySQL 기능
](#MySQL.Concepts.Features)

## Amazon RDS for MySQL 메이저 버전에 MySQL 기능 지원
<a name="MySQL.Concepts.FeatureSupport.MajorVersions"></a>

아래 섹션에서 Amazon RDS for MySQL 메이저 버전의 MySQL 기능 지원에 대해 알아볼 수 있습니다.

**Topics**
+ [

### Amazon RDS에서 MySQL 8.4 지원
](#MySQL.Concepts.FeatureSupport.8-4)

지원되는 Amazon RDS for MySQL 마이너 버전에 대한 자세한 내용은 [Amazon RDS에서 지원되는 MySQL 마이너 버전](MySQL.Concepts.VersionMgmt.md#MySQL.Concepts.VersionMgmt.Supported) 섹션을 참조하세요.

### Amazon RDS에서 MySQL 8.4 지원
<a name="MySQL.Concepts.FeatureSupport.8-4"></a>

Amazon RDS는 MySQL 버전 8.4 이상을 실행하는 DB 인스턴스에서 다음과 같은 새로운 기능을 지원합니다.
+ **암호화 라이브러리** - RDS for MySQL이 OpenSSL을 FIPS 140-3 인증을 받은 AWS Libcrypto(AWS-LC)로 대체했습니다. 자세한 내용은 [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)에서 AWS-LC GitHub 리포지토리를 참조하세요.
+ **TLS 변경 사항** - RDS for MySQL은 TLS 1.2 및 TLS 1.3만 지원합니다. 자세한 내용은 [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md) 섹션을 참조하세요.
+ **memcached 지원** - MySQL 8.4에서는 memcached 인터페이스를 더 이상 사용할 수 없습니다. 자세한 내용은 [MySQL memcached 지원](Appendix.MySQL.Options.memcached.md) 섹션을 참조하세요.
+ **기본 인증 플러그인** - 기본 인증 플러그인은 `caching_sha2_password`입니다. 자세한 내용은 [MySQL 기본 인증 플러그인](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin) 섹션을 참조하세요.
+ **`mysqlpump` 클라이언트 유틸리티** - MySQL 8.4에서 `mysqlpump` 클라이언트 유틸리티를 더 이상 사용할 수 없습니다. 자세한 내용은 *AWS 규범적 지침*의 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 및 [mysqldump 및 mysqlpump](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-large-mysql-mariadb-databases/mysqldump-and-mysqlpump.html)를 참조하세요.
+ **관리형 복제 저장 프로시저** - `caching_sha2_password`로 구성된 복제 사용자로 복제를 관리하기 위해 저장 프로시저를 사용하는 경우, `SOURCE_SSL=1`을 지정하여 TLS를 구성해야 합니다. `caching_sha2_password`는 RDS for MySQL 8.4의 기본 인증 플러그인입니다.
+ **파라미터 동작 변경 사항** - MySQL 8.4에서 다음 파라미터가 변경되었습니다.
  + `innodb_dedicated_server` - 이 파라미터가 이제 기본적으로 활성화됩니다. 자세한 내용은 [MySQL 8.4에서 버퍼 풀 크기 및 다시 실행 로그 용량 구성](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md) 섹션을 참조하세요.
  + `innodb_buffer_pool` - 데이터베이스 엔진이 이제 이 파라미터를 계산하지만 이 설정을 재정의할 수 있습니다. 자세한 내용은 [MySQL 8.4에서 버퍼 풀 크기 및 다시 실행 로그 용량 구성](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md) 섹션을 참조하세요.
  + `innodb_redo_log_capacity` - 이제 이 파라미터가 다시 실행 로그 파일의 크기를 제어합니다. 데이터베이스 엔진이 이제 이 파라미터를 계산하지만 이 설정을 재정의할 수 있습니다. 자세한 내용은 [MySQL 8.4에서 버퍼 풀 크기 및 다시 실행 로그 용량 구성](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md) 섹션을 참조하세요.
+ **더 이상 사용되지 않거나 제거된 파라미터** - RDS for MySQL은 MySQL 8.4 DB 인스턴스의 파라미터 그룹에서 다음 파라미터를 제거했습니다. 이제 `innodb_redo_log_capacity` 파라미터가 다시 실행 로그 파일의 크기를 제어합니다.
  + `innodb_log_file_size`
  + `innodb_log_files_in_group`
+ **파라미터의 새로운 기본값** – 다음 파라미터에는 MySQL 8.4 DB 인스턴스에 대한 새로운 기본값이 포함됩니다.
  + 성능과 관련된 다양한 MySQL 커뮤니티 파라미터가 변경되었습니다. 자세한 내용은 [What is New in MySQL 8.4 since MySQL 8.0](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)을 참조하세요.

    프로덕션 인스턴스를 마이그레이션하기 전에 RDS for MySQL 8.4에서 애플리케이션의 성능을 테스트하는 것이 좋습니다.
  + `innodb_purge_threads` - InnoDB 기록 목록 길이가 너무 크게 증가하는 것을 방지하기 위해 기본값이 공식 `LEAST({DBInstanceVCPU/2},4)`에 설정됩니다.
  + `group_replication_exit_state_action` – 기본값은 `OFFLINE_MODE`이며 MySQL 커뮤니티의 기본값과 일치합니다. 자세한 내용은 [RDS for MySQL 액티브-액티브 클러스터에 대한 고려 사항 및 모범 사례](mysql-active-active-clusters-considerations-limitations.md#mysql-active-active-clusters-considerations) 섹션을 참조하세요.
  + `binlog_format` – 기본값은 `ROW`이며 MySQL 커뮤니티의 기본값과 일치합니다. 단일 AZ DB 인스턴스 또는 다중 AZ DB 인스턴스의 파라미터는 수정할 수 있지만 다중 AZ DB 클러스터의 파라미터는 수정할 수 없습니다. 다중 AZ DB 클러스터는 반동기식 복제를 사용하며 `binlog_format`이 `MIXED` 또는 `STATEMENT`로 설정되면 복제가 실패합니다.
+ **포용적인 언어 변경 사항** - RDS for MySQL 8.4에는 포용적인 언어에 대한 키워드 및 시스템 스키마와 관련된 RDS for MySQL 8.0의 변경 사항이 포함되어 있습니다. 자세한 내용은 [RDS for MySQL 8.4의 포용적인 언어 변경 사항](#mysql-8-4-inclusive-language-changes) 섹션을 참조하세요.

모든 MySQL 8.4 기능 및 변경 사항 목록은 MySQL 설명서에서[What Is New in MySQL 8.4 since MySQL 8.0](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)을 참조하세요.

지원되지 않는 기능 목록은 [Amazon RDS가 지원하지 않는 MySQL 기능](#MySQL.Concepts.Features) 섹션을 참조하세요.

## RDS for MySQL에 대해 지원되는 스토리지 엔진
<a name="MySQL.Concepts.Storage"></a>

MySQL은 다양한 기능으로 여러 스토리지 엔진을 지원하지만, 모든 기능이 복구와 데이터 내구성에 최적화되어 있지는 않습니다. Amazon RDS는 MySQL DB 인스턴스용 InnoDB 스토리지 엔진을 완전히 지원합니다. 특정 시점 복원 및 스냅샷 복원과 같은 Amazon RDS 기능은 복구 가능한 스토리지 엔진이 필요하며 InnoDB 스토리지 엔진에서만 지원됩니다. 자세한 내용은 [MySQL memcached 지원](Appendix.MySQL.Options.memcached.md)을 참조하세요.

외부 스토리지 엔진은 현재 Amazon RDS for MySQL에서 지원되지 않습니다.

사용자가 생성한 스키마의 경우 MyISAM 스토리지 엔진이 안정적인 복구를 지원하지 않으며 복구 후에 MySQL을 다시 시작할 때 데이터가 손실되거나 손상되어 특정 시점으로 복원 또는 스냅샷 복원 기능이 계획대로 작동하지 않을 수 있습니다. 그래도 Amazon RDS에서 MyISAM을 사용하기로 선택한 경우, 일부 조건에서는 스냅샷이 유용할 수 있습니다.

**참고**  
`mysql` 스키마의 시스템 테이블은 MyISAM 스토리지에 있을 수 있습니다.

기존 MyISAM 테이블을 InnoDB 테이블로 변환하려는 경우 `ALTER TABLE`명령(예, `alter table TABLE_NAME engine=innodb;`)을 사용하면 됩니다. MyISAM과 InnoDB는 각기 다른 장점과 단점을 갖고 있으므로 전환하기 전에 전환이 현재 애플리케이션에 미치는 영향을 충분히 평가해야 합니다.

MySQL 5.1, 5.5, 5.6은 Amazon RDS에서 더 이상 지원되지 않습니다. 그러나 기존의 MySQL 5.1, 5.5, 5.6 스냅샷을 복원할 수는 있습니다. MySQL 5.1, 5.5 또는 5.6 스냅샷을 복원하는 경우 DB 인스턴스가 자동으로 MySQL 5.7로 업그레이드됩니다.

## Amazon RDS의 MySQL에서 memcached 및 기타 옵션 사용
<a name="MySQL.Concepts.General.Options"></a>

대부분의 Amazon RDS DB 엔진은 DB 인스턴스 관련 추가 기능을 선택할 수 있도록 옵션 그룹을 지원합니다. RDS for MySQL DB 인스턴스는 단순 키 기반 캐시인 `memcached` 옵션을 지원합니다. `memcached` 및 기타 옵션에 대한 자세한 내용은 [MySQL DB 인스턴스 옵션](Appendix.MySQL.Options.md)을 참조하세요. 옵션 그룹 작업에 대한 자세한 내용은 [옵션 그룹 작업](USER_WorkingWithOptionGroups.md) 단원을 참조하세요.

## Amazon RDS의 MySQL용 InnoDB 캐시 워밍
<a name="MySQL.Concepts.InnoDBCacheWarming"></a>

InnoDB 캐시 워밍은 DB 인스턴스가 종료될 때 버퍼 풀의 현재 상태를 저장한 다음 DB 인스턴스가 시작될 때 저장된 정보에서 버퍼 풀을 다시 로드하여 MySQL DB 인스턴스의 성능 향상을 제공할 수 있습니다. 이렇게 하면 보통 데이터베이스 사용에서 "준비"까지의 버퍼 풀에 대한 필요를 무시하고, 대신 알려진 공용 쿼리에 대한 페이지와 함께 버퍼 풀을 미리 로드합니다. 저장된 버퍼 풀 정보를 저장하는 파일은 페이지 자체가 아니라 단지 버퍼 풀에 있는 페이지에 대한 메타데이터만 저장합니다. 따라서 파일은 많은 저장 공간을 요구하지 않습니다. 파일 크기는 캐시 크기의 약 0.2%입니다. 예를 들면, 64GiB의 경우 캐시 워밍 파일 크기는 128MiB입니다. InnoDB 캐시 워밍에 대한 자세한 내용은 MySQL 설명서의 [버퍼 풀 상태 저장 및 복원](https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html)을 참조하세요.

RDS for MySQL DB 인스턴스는 InnoDB 캐시 워밍을 지원합니다. InnoDB 캐시 워밍을 활성화하려면 `innodb_buffer_pool_dump_at_shutdown` 및`innodb_buffer_pool_load_at_startup` 파라미터를 DB 인스턴스용 파라미터 그룹에서 1로 설정합니다. 파라미터 그룹에서 이들 파라미터 값을 변경하면 파라미터 그룹을 사용하는 모든 MySQL DB 인스턴스가 영향을 받습니다. 특정 MySQL DB 인스턴스에 대한 InnoDB 캐시 워밍을 활성화하려면, 이들 인스턴스에 대한 새 파라미터 그룹을 생성해야 할 수도 있습니다. 파라미터 그룹에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

InnoDB 캐시 워밍은 주로 표준 스토리지를 사용하는 DB 인스턴스를 위해 성능 혜택을 제공합니다. PIOPS 스토리지를 사용하는 경우에는 통상적으로 중요한 성능 혜택이 제공되지 않습니다.

**중요**  
MySQL DB 인스턴스가 정상적으로 종료되지 않는 경우(예: 장애 조치 도중), 버퍼 풀 상태가 디스크에 저장되지 않습니다. 이 경우 MySQL은 DB 인스턴스가 다시 시작될 때 이용 가능한 모든 버퍼 풀 파일을 로드합니다. 어떤 손상도 발생하지 않지만, 복원된 버퍼 풀은 대부분의 경우 다시 시작하기 이전의 버퍼 풀 최신 상태를 반영하지 못할 수도 있습니다. 시작 시 InnoDB 캐시를 워밍업하기 위해 버퍼 풀의 최신 상태를 이용할 수 있게 하려면, "요청 시" 버퍼 풀을 주기적으로 덤프하는 것이 좋습니다.  
이벤트를 생성하여 버퍼 풀을 자동으로 그리고 정기적으로 덤프할 수 있습니다. 예를 들면, 다음 문은 매 시간마다 버퍼 풀을 덤프하는 이름이 `periodic_buffer_pool_dump`인 이벤트를 생성합니다.  

```
1. CREATE EVENT periodic_buffer_pool_dump 
2. ON SCHEDULE EVERY 1 HOUR 
3. DO CALL mysql.rds_innodb_buffer_pool_dump_now();
```
MySQL 이벤트에 대한 자세한 내용은 MySQL 설명서의 [이벤트 구문](https://dev.mysql.com/doc/refman/8.0/en/events-syntax.html)을 참조하십시오.

### 요청 시 버퍼 풀 덤핑 및 로딩
<a name="MySQL.Concepts.InnoDBCacheWarming.OnDemand"></a>

'요청 시' InnoDB 캐시를 저장하고 로드할 수 있습니다.
+ 버퍼 풀의 현재 상태를 디스크에 덤프하려면 [mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_dump_now) 저장 프로시저를 호출합니다.
+ 디스크에서 저장된 버퍼 풀의 상태를 로드하려면 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_now) 저장 프로시저를 호출합니다.
+ 진행 중인 로드 작업을 취소하려면 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_abort) 저장 프로시저를 호출합니다.

## RDS for MySQL 8.4의 포용적인 언어 변경 사항
<a name="mysql-8-4-inclusive-language-changes"></a>

RDS for MySQL 버전 8.4에는 포용적 언어에 대한 키워드 및 시스템 스키마와 관련된 MySQL 8.4의 변경 사항이 포함되어 있습니다. 예를 들어 `SHOW REPLICA STATUS` 명령은 `SHOW SLAVE STATUS`를 대체합니다.

**Topics**
+ [

### 구성 파라미터 이름 변경 사항
](#mysql-8-4-inclusive-language-changes-params)
+ [

### 저장 프로시저 이름 변경 사항
](#mysql-8-4-inclusive-language-changes-sp)

### 구성 파라미터 이름 변경 사항
<a name="mysql-8-4-inclusive-language-changes-params"></a>

다음 구성 파라미터는 RDS for MySQL 8.4에서 이름이 변경되었습니다.

호환성을 위해 두 이름 중 하나를 사용하여 `mysql` 클라이언트에서 파라미터 이름을 확인할 수 있습니다. 사용자 정의 MySQL 8.4 파라미터 그룹의 값을 수정할 때는 새 이름만 사용 수 있습니다. 자세한 내용은 [기본 및 사용자 지정 파라미터 그룹](parameter-groups-overview.md#parameter-groups-overview.custom) 섹션을 참조하세요.


| 제거할 이름 | 새 이름 또는 기본 이름 | 
| --- | --- | 
|  `init_slave`  |  `init_replica`  | 
|  `log_slave_updates`  |  `log_replica_updates`  | 
|  `log_slow_slave_statements`  |  `log_slow_replica_statements`  | 
|  `rpl_stop_slave_timeout`  |  `rpl_stop_replica_timeout`  | 
|  `skip_slave_start`  |  `skip_replica_start`  | 
|  `slave_checkpoint_group`  |  `replica_checkpoint_group`  | 
|  `slave_checkpoint_period`  |  `replica_checkpoint_period`  | 
|  `slave_compressed_protocol`  |  `replica_compressed_protocol`  | 
|  `slave_exec_mode`  |  `replica_exec_mode`  | 
|  `slave_load_tmpdir`  |  `replica_load_tmpdir`  | 
|  `slave_max_allowed_packet`  |  `replica_max_allowed_packet`  | 
|  `slave_net_timeout`  |  `replica_net_timeout`  | 
|  `slave_parallel_type`  |  `replica_parallel_type`  | 
|  `slave_parallel_workers`  |  `replica_parallel_workers`  | 
|  `slave_pending_jobs_size_max`  |  `replica_pending_jobs_size_max`  | 
|  `slave_preserve_commit_order`  |  `replica_preserve_commit_order`  | 
|  `slave_skip_errors`  |  `replica_skip_errors`  | 
|  `slave_sql_verify_checksum`  |  `replica_sql_verify_checksum`  | 
|  `slave_transaction_retries`  |  `replica_transaction_retries`  | 
|  `slave_type_conversions`  |  `replica_type_conversions`  | 
|  `sql_slave_skip_counter`  |  `sql_replica_skip_counter`  | 

**참고**  
Amazon RDS는 NDB 클러스터를 지원하지 않으므로 `replica_allow_batching` 파라미터를 사용할 수 없습니다.

### 저장 프로시저 이름 변경 사항
<a name="mysql-8-4-inclusive-language-changes-sp"></a>

다음 저장 프로시저는 RDS for MySQL 8.4에서 이름이 변경되었습니다.

호환성을 위해 초기 RDS for MySQL 8.4 릴리스에서 두 이름 중 하나를 사용할 수 있습니다. 향후 릴리스에서 기존 프로시저 이름이 제거되게 됩니다. 자세한 내용은 [이진수 로그(binlog) 복제 구성, 시작 및 중지](mysql-stored-proc-replicating.md) 섹션을 참조하세요.


| 제거할 이름 | 새 이름 또는 기본 이름 | 
| --- | --- | 
|  `mysql.rds_next_master_log`  |  `mysql.rds_next_source_log `  | 
|  `mysql.rds_reset_external_master`  |  `mysql.rds_reset_external_source`  | 
|  `mysql.rds_set_external_master`  |  `mysql.rds_set_external_source`  | 
|  `mysql.rds_set_external_master_with_auto_position`  |  `mysql.rds_set_external_source_with_auto_position`  | 
|  `mysql.rds_set_external_master_with_delay`  |  `mysql.rds_set_external_source_with_delay`  | 
|  `mysql.rds_set_master_auto_position`  |  `mysql.rds_set_source_auto_position`  | 

## Amazon RDS가 지원하지 않는 MySQL 기능
<a name="MySQL.Concepts.Features"></a>

Amazon RDS는 현재 다음과 같은 MySQL 기능은 지원하지 않습니다.
+ 인증 플러그인
+ 시스템 로그에 오류 로깅
+ InnoDB Tablespace 암호화
+ NDB 클러스터
+ 암호 보안 수준 플러그인
+ 지속된 시스템 변수
+ 리라이터 쿼리 다시 쓰기 플러그인
+ 다중 AZ DB 클러스터를 제외한 반동기식 복제
+ 전송 가능한 테이블스페이스
+ X 플러그인

관리형 서비스 환경을 제공하기 위해 Amazon RDS는 DB 인스턴스에 대해 shell 액세스를 제공하지 않습니다. 또한 고급 권한이 필요한 특정 시스템 절차와 테이블에 대한 액세스를 제한합니다. Amazon RDS는 표준 SQL 클라이언트 애플리케이션을 사용하여 DB 인스턴스의 데이터베이스에 대한 액세스를 지원합니다. Amazon RDS는 Telnet, SSH(보안 셸) 또는 Windows 원격 데스크톱 연결을 사용하여 DB 인스턴스에 대한 직접적인 호스트 액세스를 허용하지 않습니다. DB 인스턴스를 생성할 때 사용자는 해당 인스턴스의 모든 데이터베이스에 대한 **db\$1owner 역할을 할당받게 되며, 백업을 위해 사용된 권한을 제외한 모든 데이터베이스 수준의 권한을 갖게 됩니다. Amazon RDS는 백업을 관리합니다.

# Amazon RDS의 MySQL 버전
<a name="MySQL.Concepts.VersionMgmt"></a>

MySQL의 경우 버전 번호는 버전 = X.Y.Z로 구성됩니다. Amazon RDS 용어에서 X.Y는 메이저 버전을 나타내고 Z는 마이너 버전 번호를 나타냅니다. Amazon RDS 구현을 위해서, 메이저 버전 번호가 변경될 경우—(예: 버전 5.7에서 8.0으로) 이를 메이저 버전 변경으로 간주합니다. 마이너 버전 번호만 변경된 경우(예: 버전 8.0.32에서 8.0.34로 변경)에는 마이너 버전 변경으로 간주합니다.

**Topics**
+ [

## Amazon RDS에서 지원되는 MySQL 마이너 버전
](#MySQL.Concepts.VersionMgmt.Supported)
+ [

## Amazon RDS에서 지원되는 MySQL 메이저 버전
](#MySQL.Concepts.VersionMgmt.ReleaseCalendar)
+ [

## Amazon RDS for MySQL에 대한 Amazon RDS 추가 지원 버전
](#mysql-extended-support-releases)
+ [

## 데이터베이스 미리 보기 환경 작업
](#mysql-working-with-the-database-preview-environment)
+ [

## Database Preview Environment의 MySQL 버전 9.5
](#mysql-preview-environment-version-9-5)
+ [

## 데이터베이스 미리 보기 환경의 MySQL 버전 9.4
](#mysql-preview-environment-version-9-4)
+ [

## Database Preview Environment의 MySQL 버전 9.3
](#mysql-preview-environment-version-9-3)
+ [

## 더 이상 사용되지 않는 Amazon RDS for MySQL 버전
](#MySQL.Concepts.DeprecatedVersions)

## Amazon RDS에서 지원되는 MySQL 마이너 버전
<a name="MySQL.Concepts.VersionMgmt.Supported"></a>

Amazon RDS는 현재 다음과 같은 MySQL 마이너 버전을 지원합니다.

**참고**  
마이너 버전에서는 Amazon RDS 확장 지원을 사용할 수 없습니다.

다음 표는 현재 Amazon RDS가 지원하는 MySQL 8.4의 마이너 버전을 보여 줍니다.


| MySQL 엔진 버전 | 커뮤니티 릴리스 날짜 | RDS 릴리스 날짜 | RDS 표준 지원 종료일 | 
| --- | --- | --- | --- | 
|  8.4.8  |  2026년 1월 20일  |  2026년 2월 3일  | 2027년 2월 3일 | 
|  8.4.7  |  2025년 10월 21일  |  2025년 11월 13일  | 2026년 11월 30일 | 
|  8.4.6  |  2025년 7월 22일  |  2025년 8월 1일  | 2026년 9월 30일 | 
|  8.4.5  |  2025년 4월 15일  |  2025년 4월 29일  | 2026년 9월 30일 | 
|  8.4.4  |  2025년 1월 21일  |  2025년 2월 19일  | 2026년 5월 31일 | 
|  8.4.3  |  2024년 10월 15일  |  2024년 11월 21일  | 2026년 5월 31일 | 

다음 표는 현재 Amazon RDS가 지원하는 MySQL 8.0의 마이너 버전을 보여 줍니다.

**참고**  
마이너 버전은 메이저 버전보다 먼저 표준 지원이 종료될 수 있습니다. 예를 들어 마이너 버전 8.0.28은 2024년 3월 28일에 표준 지원이 종료된 반면 메이저 버전 8.0은 2026년 7월 31일에 표준 지원이 종료됩니다. RDS는 이 날짜 사이에 MySQL 커뮤니티에서 릴리스하는 8.0.\$1 마이너 버전을 추가로 지원할 예정입니다. 가능한 한 자주 모든 메이저 버전에서 사용 가능한 최신 마이너 버전으로 업그레이드하는 것이 좋습니다.


| MySQL 엔진 버전 | 커뮤니티 릴리스 날짜 | RDS 릴리스 날짜 | RDS 표준 지원 종료일 | 
| --- | --- | --- | --- | 
|  8.0.45  |  2026년 1월 20일  |  2026년 2월 3일 |  2026년 7월 31일  | 
|  8.0.44  |  2025년 10월 21일  |  2025년 11월 13일 |  2026년 7월 31일  | 
|  8.0.43  |  2025년 7월 22일  |  2025년 8월 1일 |  2026년 7월 31일  | 
|  8.0.42  |  2025년 4월 15일  |  2025년 4월 29일 |  2026년 7월 31일  | 
|  8.0.41  |  2025년 1월 21일  |  2025년 2월 19일 |  2026년 5월 31일  | 
|  8.0.40  |  2024년 10월 15일  |  2024년 11월 13일 | 2026년 5월 31일 | 

다음 표는 Amazon RDS 추가 지원에서 사용할 수 있는 MySQL 5.7의 마이너 버전을 보여 줍니다.

**참고**  
마이너 버전은 메이저 버전보다 먼저 추가 지원이 종료될 수 있습니다. 예를 들어 마이너 버전 5.7.44-RDS.20240529는 2025년 9월에 추가 지원이 종료되는 반면 메이저 버전 5.7은 2027년 2월 28일에 추가 지원이 종료됩니다. RDS는 이 날짜 사이에 추가 5.7.44-RDS.xxyyzz 마이너 버전을 생성하여 릴리스할 예정입니다. 가능한 한 자주 모든 메이저 버전에서 사용 가능한 최신 마이너 버전으로 업그레이드하는 것이 좋습니다.


| MySQL 엔진 버전 | 커뮤니티 릴리스 날짜 | RDS 릴리스 날짜 | RDS 추가 지원 종료일 | 
| --- | --- | --- | --- | 
|  5.7.44-RDS.20260212\$1  | 해당 사항 없음 | 2026년 2월 26일 | 2027년 2월 28일 | 
|  5.7.44-RDS.20251212\$1  | 해당 사항 없음 | 2025년 12월 12일 | 2026년 12월 30일 | 
|  5.7.44-RDS.20250818\$1  | 해당 사항 없음 | 2025년 9월 15일 | 2026년 9월 30일 | 
|  5.7.44-RDS.20250508\$1  | 해당 사항 없음 | 2025년 5월 20일 | 2026년 9월 30일 | 
|  5.7.44-RDS.20250213\$1  | 해당 사항 없음 | 2025년 3월 12일 | 2026년 9월 30일 | 
|  5.7.44-RDS.20250103\$1  | 해당 사항 없음 | 2025년 2월 13일 | 2026년 5월 31일 | 

\$1 MySQL 커뮤니티는 메이저 버전 5.7을 사용 중지했으며, 새로운 마이너 버전은 릴리스하지 않을 예정입니다. 이 버전은 Amazon RDS에서 RDS 추가 지원이 적용되는 MySQL 5.7 데이터베이스의 중요 보안 패치 및 버그 수정과 함께 출시한 마이너 버전입니다. 마이너 버전에 대한 자세한 내용은 [Amazon RDS for MySQL에 대한 Amazon RDS 추가 지원 버전](#mysql-extended-support-releases) 섹션을 참조하세요. RDS 추가 지원에 대한 자세한 내용은 [Amazon RDS를 사용한 Amazon RDS 추가 지원](extended-support.md) 섹션을 참조하세요.

새 DB 인스턴스를 생성할 때는 현재 지원되는 모든 MySQL 버전을 지정할 수 있습니다. 메이저 버전(예: MySQL 5.7) 및 지정된 메이저 버전에 대해 지원되는 모든 마이너 버전을 지정할 수 있습니다. 버전이 지정되지 않은 경우 Amazon RDS는 지원되는 버전(보통 최신 버전)을 기본값으로 설정합니다. 메이저 버전이 지정되었지만 마이너 버전이 지정되지 않은 경우, Amazon RDS는 고객이 지정한 메이저 버전의 최근 릴리스를 기본값으로 설정합니다. 지원되는 버전 목록과 새로 만든 DB 인스턴스의 기본값을 보려면 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 명령을 실행합니다.

예를 들어 RDS for MySQL 버전 목록을 보려면 다음 CLI 명령을 실행합니다.

```
aws rds describe-db-engine-versions --engine mysql --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

기본 MySQL 버전은 AWS 리전에 따라 다를 수 있습니다. 특정 마이너 버전으로 DB 인스턴스를 생성하려면 DB 인스턴스 생성 중에 마이너 버전을 지정합니다. 다음 AWS CLI 명령을 실행하여 AWS 리전의 기본 마이너 버전을 확인할 수 있습니다.

```
aws rds describe-db-engine-versions --default-only --engine mysql --engine-version major_engine_version --region region --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

*major-engine-version*을 메이저 엔진 버전으로 바꾸고 *region*을 AWS 리전으로 바꿉니다. 예를 들어, 다음 AWS CLI 명령은 5.7 메이저 버전과 미국 서부(오레곤) AWS 리전(us-west-2)에 대한 기본 MySQL 마이너 엔진 버전을 반환합니다.

```
aws rds describe-db-engine-versions --default-only --engine mysql --engine-version 5.7 --region us-west-2 --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

Amazon RDS를 통해 사용자는 MySQL 인스턴스를 Amazon RDS가 지원하는 새 메이저 버전으로 언제 업그레이드할지를 제어합니다. 특정 MySQL 버전과의 호환성을 유지하고, 프로덕션 환경에 배포하기 전에 애플리케이션으로 새 버전을 테스트하고, 가장 원하는 일정에 맞춰 메이저 버전 업그레이드를 수행할 수 있습니다.

자동 마이너 버전 업그레이드가 활성화되는 경우, 새 MySQL 마이너 버전이 Amazon RDS에서 지원되면 DB 인스턴스가 새 MySQL 마이너 버전으로 자동 업그레이드됩니다. 이 패치는 예약 유지보수 중에 발생합니다. DB 인스턴스를 수정하여 자동 마이너 버전 업그레이드를 활성화 또는 비활성화할 수 있습니다.

자동으로 예약된 업그레이드를 사용하지 않기로 선택한 경우, 사용자는 메이저 버전 업데이트를 위해 선택한 것과 동일한 프로시저에 따라 지원되는 마이너 버전 릴리스로 수동으로 업그레이드할 수 있습니다. 자세한 내용은 [DB 인스턴스 엔진 버전 업그레이드](USER_UpgradeDBInstance.Upgrading.md) 섹션을 참조하세요.

현재 Amazon RDS는 MySQL 데이터베이스 엔진의 다음과 같은 메이저 버전 업그레이드를 지원합니다.
+ MySQL 5.7에서 MySQL 8.0으로
+ MySQL 8.0에서 MySQL 8.4로

메이저 버전 업그레이드에 약간의 호환성 위험이 수반되므로 업그레이드가 자동으로 이루어지지 않습니다. 즉, DB 인스턴스 수정을 요청해야 합니다. 프로덕션 인스턴스를 업그레이드하기 전에 모든 업그레이드를 철저하게 테스트해야 합니다. MySQL DB 인스턴스 업그레이드에 대한 자세한 내용은 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md)를 참조하십시오.

기존 DB 인스턴스의 DB 스냅샷을 만들고 DB 스냅샷에서 복구해 새 DB 인스턴스를 만든 다음 새로운 DB 인스턴스에 대한 버전 업그레이드를 시작함으로써, 업그레이드하기 전에 새 버전과 비교하여 DB 인스턴스를 테스트할 수 있습니다. 그런 다음 원래의 DB 인스턴스에 대한 업그레이드 여부를 결정하기 전에 DB 인스턴스의 업그레이드된 복제본에서 안전하게 실험을 진행할 수 있습니다.

### Amazon RDS의 MySQL 마이너 버전
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor"></a>

마이너 버전에 대한 MySQL 커뮤니티의 변경 사항은 Oracle 웹 사이트의 [Critical Patch Updates, Security Alerts and Bulletins](https://www.oracle.com/security-alerts/)을 참조하시기 바랍니다. **Critical Patch Update**에서 Oracle이 마이너 버전을 릴리스한 달을 선택합니다. 그런 다음 **영향을 받는 제품 및 버전**에서 MySQL 마이너 버전을 선택합니다.

**Topics**
+ [

#### MySQL 버전 8.4.8
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.8)
+ [

#### MySQL 버전 8.4.7
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.7)
+ [

#### MySQL 버전 8.4.6
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.6)
+ [

#### MySQL 버전 8.4.5
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.5)
+ [

#### MySQL 버전 8.4.4
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.4)
+ [

#### MySQL 버전 8.0.45
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.45)
+ [

#### MySQL 버전 8.0.44
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.44)
+ [

#### MySQL 버전 8.0.43
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.43)
+ [

#### MySQL 버전 8.0.42
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.42)
+ [

#### MySQL 버전 8.0.41
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.41)
+ [

#### MySQL 버전 8.0.40
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.40)
+ [

#### MySQL 버전 8.0.39
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.39)
+ [

#### MySQL 버전 8.0.37
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.37)

#### MySQL 버전 8.4.8
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.8"></a>

이제 Amazon RDS에서 MySQL 버전 8.4.8를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025c`를 기반으로 시간대 정보를 업데이트했습니다.
+ 일부 SQL 문이 감사 로그에 로깅되지 않을 수 있는 문제를 수정했습니다.

#### MySQL 버전 8.4.7
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.7"></a>

이제 Amazon RDS에서 MySQL 버전 8.4.7를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

#### MySQL 버전 8.4.6
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.6"></a>

이제 Amazon RDS에서 MySQL 버전 8.4.6을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

#### MySQL 버전 8.4.5
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.5"></a>

이제 Amazon RDS에서 MySQL 버전 8.4.5를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025b`를 기반으로 시간대 정보를 업데이트했습니다.

#### MySQL 버전 8.4.4
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.4"></a>

이제 Amazon RDS에서 MySQL 버전 8.4.4를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025a`를 기반으로 시간대 정보를 업데이트했습니다.
+ Amazon RDS 저장 프로시저 `mysql.rds_set_configuration` 및 `mysql.rds_kill`을 실행하는 동안 데이터 정렬 오류가 발생한 버그를 수정했습니다.

#### MySQL 버전 8.0.45
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.45"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.45을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025c`를 기반으로 시간대 정보를 업데이트했습니다.
+ 일부 SQL 문이 감사 로그에 로깅되지 않을 수 있는 문제를 수정했습니다.

#### MySQL 버전 8.0.44
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.44"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.44을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

#### MySQL 버전 8.0.43
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.43"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.43을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

#### MySQL 버전 8.0.42
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.42"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.42를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025b`를 기반으로 시간대 정보를 업데이트했습니다.

#### MySQL 버전 8.0.41
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.41"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.41을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `tzdata2025a`를 기반으로 시간대 정보를 업데이트했습니다.
+ Amazon RDS 저장 프로시저 `mysql.rds_set_configuration` 및 `mysql.rds_kill`을 실행하는 동안 데이터 정렬 오류가 발생한 버그를 수정했습니다.

#### MySQL 버전 8.0.40
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.40"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.40을 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ 데이터베이스 업그레이드 중에 문자 세트 불일치 실패를 일으킨 버그를 수정했습니다.

#### MySQL 버전 8.0.39
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.39"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.39를 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ `SESSION_VARIABLES_ADMIN` 권한으로 `sql_log_off`가 제대로 작동하지 않도록 하는 버그를 수정했습니다.
+ 마스터 사용자가 다른 데이터베이스 사용자에게 `SESSION_VARIABLE_ADMIN` 권한을 부여할 수 없었던 버그를 수정했습니다.
+ RDS 제공 저장 프로시저를 실행하는 동안 데이터 정렬이 잘못 혼합되어 발생하는 버그를 수정했습니다.

#### MySQL 버전 8.0.37
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.37"></a>

이제 Amazon RDS에서 MySQL 버전 8.0.37에서 사용할 수 있습니다. 이 릴리스에는 MySQL 커뮤니티와 Amazon RDS에서 추가한 수정 및 개선 사항이 포함되어 있습니다.

**새로운 기능 및 개선 사항**
+ 인스턴트 DDL 문을 실행한 후 업데이트하면 어설션 실패로 이어지는 버그가 수정되었습니다.

## Amazon RDS에서 지원되는 MySQL 메이저 버전
<a name="MySQL.Concepts.VersionMgmt.ReleaseCalendar"></a>

RDS for MySQL 메이저 버전은 해당 커뮤니티 버전에 대한 커뮤니티 사용 주기가 끝날 때까지 표준 지원에 따라 사용할 수 있습니다. RDS 표준 지원 종료일이 지난 후에도 유료로 메이저 버전을 계속 실행할 수 있습니다. 자세한 내용은 [Amazon RDS를 사용한 Amazon RDS 추가 지원](extended-support.md) 및 [Amazon RDS for MySQL 요금](https://aws.amazon.com/rds/mysql/pricing/)을 참조하세요.

다음 날짜를 사용하여 테스트 및 업그레이드 주기를 계획할 수 있습니다.

**참고**  
AWS CLI 또는 RDS API를 사용하여 메이저 엔진 버전의 지원 날짜에 대한 정보를 볼 수도 있습니다. 자세한 내용은 [Amazon RDS 추가 지원에서 엔진 버전에 대한 지원 날짜 보기](extended-support-viewing-support-dates.md) 섹션을 참조하세요.


| MySQL 메이저 버전 | 커뮤니티 릴리스 날짜 | RDS 릴리스 날짜 | 커뮤니티 수명 종료 날짜 | RDS 표준 지원 종료일 | RDS 추가 지원 요금 부과 시작일(1년) | RDS 추가 지원 요금 부과 시작일(3년) | RDS 추가 지원 종료일 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  2024년 4월 30일  |  2024년 11월 21일  |  2029년 4월 30일  |  2029년 7월 31일  |  2029년 8월 1일  |  2031년 8월 1일  |  2032년 7월 31일  | 
|  MySQL 8.0  |  2018년 4월 19일  |  2018년 10월 23일  |  2026년 4월 30일  |  2026년 7월 31일  |  2026년 8월 1일  |  2028년 8월 1일  |  2029년 7월 31일  | 
|  MySQL 5.7\$1  |  2015년 10월 21일  |  2016년 2월 22일  |  2023년 10월 31일  |  2024년 2월 29일  |  2024년 3월 1일  |  2026년 3월 1일  |  2027년 2월 28일  | 

\$1 MySQL 5.7은 이제 RDS 추가 지원하에서만 사용할 수 있습니다. 자세한 내용은 [Amazon RDS를 사용한 Amazon RDS 추가 지원](extended-support.md) 섹션을 참조하세요.

## Amazon RDS for MySQL에 대한 Amazon RDS 추가 지원 버전
<a name="mysql-extended-support-releases"></a>

다음 콘텐츠에는 RDS for MySQL 버전에 대한 모든 RDS 추가 지원 릴리스가 나와 있습니다.

**Topics**
+ [

### RDS for MySQL 버전 5.7.44-RDS.20260212에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-RDS.20260212)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20251212에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-RDS.20251212)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20250818에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-RDS.20250818)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20250508에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20250508)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20250213에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20250213)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20250103에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20250103)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20240808에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20240808)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20240529에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20240529)
+ [

### RDS for MySQL 버전 5.7.44-RDS.20240408에 대한 RDS 추가 지원
](#mysql-extended-support-releases-version-5.7.44-20240408)

### RDS for MySQL 버전 5.7.44-RDS.20260212에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20260212"></a>

RDS for MySQL 버전 5.7.44-RDS.20260212에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ 버그 22295186에 대한 수정을 테스트하는 데 사용되는 테스트 인증서를 새로 고칩니다.
+ Blob 열에서 접두사 인덱스가 있는 메모리 누수를 수정합니다.

**CVE 수정됨:**
+ [CVE-2026-21936](https://nvd.nist.gov/vuln/detail/CVE-2026-21936)
+ [CVE-2026-21968](https://nvd.nist.gov/vuln/detail/CVE-2026-21968)
+ [CVE-2026-21941](https://nvd.nist.gov/vuln/detail/CVE-2026-21941)
+ [CVE-2026-21948](https://nvd.nist.gov/vuln/detail/CVE-2026-21948)

### RDS for MySQL 버전 5.7.44-RDS.20251212에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20251212"></a>

RDS for MySQL 버전 5.7.44-RDS.20251212에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ 버퍼 풀 크기가 상한을 초과할 때 서버 시작 시 발생하는 문제를 수정했습니다.
+ `INFORMATION_SCHEMA.INNODB_LOCKS`에서 읽을 때 서버가 비정상적으로 종료되는 문제를 수정했습니다.
+ MySQL 테스트 실행(MTR)에서 JUnit 보고 지원과 관련된 문제를 수정했습니다.
+ `-DWITH_INNODB_MEMCACHED=ON` 옵션으로 빌드할 때 발생하는 컴파일 문제를 수정했습니다.
+ 버그 25182306에 대한 MySQL 테스트 실행(MTR)의 실행 문제를 수정했습니다.

**CVE 수정됨:**
+ [CVE-2025-53054](https://nvd.nist.gov/vuln/detail/CVE-2025-53054)
+ [CVE-2025-53044](https://nvd.nist.gov/vuln/detail/CVE-2025-53044)
+ [CVE-2025-53045](https://nvd.nist.gov/vuln/detail/CVE-2025-53045)
+ [CVE-2025-53062](https://nvd.nist.gov/vuln/detail/CVE-2025-53062)
+ [CVE-2025-53040](https://nvd.nist.gov/vuln/detail/CVE-2025-53040)
+ [CVE-2025-53042](https://nvd.nist.gov/vuln/detail/CVE-2025-53042)
+ [CVE-2025-53067](https://nvd.nist.gov/vuln/detail/CVE-2025-53067)

### RDS for MySQL 버전 5.7.44-RDS.20250818에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20250818"></a>

RDS for MySQL 버전 5.7.44-RDS.20250818에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ 서버가 `autocommit=OFF`에서 작동할 때 쿼리 다시 쓰기 플러그인이 실패하는 문제를 수정했습니다.
+ Debian 및 Ubuntu 빌드가 루트 없는 모드에서 실행되지 않는 권한 문제를 수정했습니다.
+ 버그 30875669에 대한 업데이트 누락을 수정했습니다.

**CVE 수정됨:**
+ [CVE-2025-50082](https://nvd.nist.gov/vuln/detail/CVE-2025-50082)
+ [CVE-2025-50083](https://nvd.nist.gov/vuln/detail/CVE-2025-50083)
+ [CVE-2025-50079](https://nvd.nist.gov/vuln/detail/CVE-2025-50079)
+ [CVE-2025-50084](https://nvd.nist.gov/vuln/detail/CVE-2025-50084)
+ [CVE-2025-50087](https://nvd.nist.gov/vuln/detail/CVE-2025-50087)
+ [CVE-2025-50091](https://nvd.nist.gov/vuln/detail/CVE-2025-50091)
+ [CVE-2025-50101](https://nvd.nist.gov/vuln/detail/CVE-2025-50101)
+ [CVE-2025-50102](https://nvd.nist.gov/vuln/detail/CVE-2025-50102)
+ [CVE-2025-50098](https://nvd.nist.gov/vuln/detail/CVE-2025-50098)
+ [CVE-2025-53023](hhttps://nvd.nist.gov/vuln/detail/CVE-2025-53023)
+ [CVE-2025-50081](https://nvd.nist.gov/vuln/detail/CVE-2025-50081)
+ [CVE-2025-50085](https://nvd.nist.gov/vuln/detail/CVE-2025-50085)
+ [CVE-2025-50077](https://nvd.nist.gov/vuln/detail/CVE-2025-50077)
+ [CVE-2025-50088](https://nvd.nist.gov/vuln/detail/CVE-2025-50088)
+ [CVE-2025-50092](https://nvd.nist.gov/vuln/detail/CVE-2025-50092)
+ [CVE-2025-50099](https://nvd.nist.gov/vuln/detail/CVE-2025-50099)
+ [CVE-2025-50096](https://nvd.nist.gov/vuln/detail/CVE-2025-50096)

### RDS for MySQL 버전 5.7.44-RDS.20250508에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20250508"></a>

RDS for MySQL 버전 5.7.44-RDS.20250508에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ `index_id`가 최대 `uint32`보다 클 때 롤백 후 가상 인덱스가 불안정해지는 문제를 해결했습니다.
+ 메모리 문제로 인한 테스트 실패를 해결했습니다.
+ 수정된 `<COMMAND_CLASS>`는 `<NAME>Execute</NAME>`의 경우 비어 있습니다.
+ GCC 14 [noclose 5.7]로 MySQL 컴파일을 수정했습니다.

**CVE 수정됨:**
+ [CVE-2025-30682](https://nvd.nist.gov/vuln/detail/CVE-2025-30682)
+ [CVE-2025-30687](https://nvd.nist.gov/vuln/detail/CVE-2025-30687)
+ [CVE-2025-30688](https://nvd.nist.gov/vuln/detail/CVE-2025-30688)
+ [CVE-2025-21581](https://nvd.nist.gov/vuln/detail/CVE-2025-21581)
+ [CVE-2025-21585](https://nvd.nist.gov/vuln/detail/CVE-2025-21585)
+ [CVE-2025-30689](https://nvd.nist.gov/vuln/detail/CVE-2025-30689)
+ [CVE-2025-30722](https://nvd.nist.gov/vuln/detail/CVE-2025-30722)
+ [CVE-2025-21577](https://nvd.nist.gov/vuln/detail/CVE-2025-21577)
+ [CVE-2025-30693](https://nvd.nist.gov/vuln/detail/CVE-2025-30693)
+ [CVE-2025-30695](https://nvd.nist.gov/vuln/detail/CVE-2025-30695)
+ [CVE-2025-30703](https://nvd.nist.gov/vuln/detail/CVE-2025-30703)

### RDS for MySQL 버전 5.7.44-RDS.20250213에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20250213"></a>

RDS for MySQL 버전 5.7.44-RDS.20250213에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ InnoDB 실패 어설션 `result != FTS_INVALID`를 수정했습니다.
+ `ALTER TABLE` 작업이 `INPLACE` 알고리즘을 사용하여 InnoDB 테이블을 다시 구축한 후 공간 인덱스가 충돌하고 광범위하게 손상되는 문제를 수정했습니다.
+ `innobase_get_computed_value`에서 `ON DELETE CASCADE`의 생성된 열 충돌 문제를 수정했습니다.
+ `row_MySQL_pad_col`에서 어설션 실패를 수정했습니다.
+ 온라인 DDL에서 `ERROR 1712 (HY000): Index PRIMARY is corrupted` 오류가 발생하는 문제를 수정했습니다.
+ `Item_rollup_sum_switcher::current_arg`의 충돌을 수정했습니다.
+ `DROP USER`에서 데이터베이스 캐시가 플러시되지 않는 문제를 수정했습니다.
+ `my_print_help`에서 버퍼 오버런을 수정했습니다.
+ `FULLTEXT` 인덱스가 부호 없는 최대 32비트 값으로 `FTS_DOC_ID`를 제한하는 InnoDB 문제를 수정했습니다.

**CVE 수정됨:**
+ [CVE-2025-21497](https://nvd.nist.gov/vuln/detail/CVE-2025-21497)
+ [CVE-2025-21555](https://nvd.nist.gov/vuln/detail/CVE-2025-21555)
+ [CVE-2025-21559](https://nvd.nist.gov/vuln/detail/CVE-2025-21559)
+ [CVE-2025-21490](https://nvd.nist.gov/vuln/detail/CVE-2025-21490)
+ [CVE-2025-21491](https://nvd.nist.gov/vuln/detail/CVE-2025-21491)
+ [CVE-2025-21500](https://nvd.nist.gov/vuln/detail/CVE-2025-21500)
+ [CVE-2025-21501](https://nvd.nist.gov/vuln/detail/CVE-2025-21501)
+ [CVE-2025-21540](https://nvd.nist.gov/vuln/detail/CVE-2025-21540)
+ [CVE-2025-21543](https://nvd.nist.gov/vuln/detail/CVE-2025-21543)
+ [CVE-2025-21520](https://nvd.nist.gov/vuln/detail/CVE-2025-21520)

### RDS for MySQL 버전 5.7.44-RDS.20250103에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20250103"></a>

RDS for MySQL 버전 5.7.44-RDS.20250103에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ 동일한 트랜잭션에서 `FULLTEXT` 인덱스를 삭제하고 추가할 때 발생하는 FTS 정리 문제를 해결했습니다.
+ 잠재적 누출을 방지하기 위해 MySQL 클라이언트의 메모리 할당 타이밍을 최적화했습니다.
+ `UNION` 연산자 사용 시 34바이트에서 결과가 잘리는 문제를 수정했습니다.
+ 권한 부여 코드의 `ulong bitmask`로 인해 범위를 벗어난 잠재적 액세스가 수정되었습니다.

**CVE 수정됨:**
+ [CVE-2024-21230](https://nvd.nist.gov/vuln/detail/CVE-2024-21230)
+ [CVE-2024-21201](https://nvd.nist.gov/vuln/detail/CVE-2024-21201)
+ [CVE-2024-21241](https://nvd.nist.gov/vuln/detail/CVE-2024-21241)
+ [CVE-2024-21203](https://nvd.nist.gov/vuln/detail/CVE-2024-21203)

### RDS for MySQL 버전 5.7.44-RDS.20240808에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20240808"></a>

RDS for MySQL 버전 5.7.44-RDS.20240808에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ 딕셔너리 열 인덱스와 관련된 어설션 오류를 해결했습니다.
+ `is_binlog_cache_empty()` 함수 관련 문제를 해결했습니다.
+ `sql/item.cc` 파일의 `heap-use-after-free` 오류를 해결했습니다.
+ `index-only` 읽기 기능을 비활성화하여 몇 가지 공간 인덱스 문제를 해결했습니다.
+ `LOCK_ORDER: CONNECTION_CONTROL` 플러그인의 계측 문제를 해결했습니다.
+ 스레드가 `CONNECTION_CONTROL` 플러그인에서 멈추는 문제를 해결했습니다.
+ `PREPARED STATEMENTS`에 대해 업데이트되지 않는 `PSI_THREAD_INFO`를 수정했습니다.
+ `innodb_optimize_fulltext_only`로 FTS 인덱스 단어를 이중으로 처리하던 문제를 수정했습니다.

**CVE 수정됨:**
+ [CVE-2024-21177](https://nvd.nist.gov/vuln/detail/CVE-2024-21177)

### RDS for MySQL 버전 5.7.44-RDS.20240529에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20240529"></a>

RDS for MySQL 버전 5.7.44-RDS.20240529에 대한 RDS 추가 지원을 사용할 수 있습니다.

**버그 수정:**
+ `fix_after_pullout`을 구현하여 `field.cc` 어설션 실패를 수정했습니다.
+ 특정 SQL 쿼리에 대해 클라이언트에 메타데이터를 반환할 때 발생하는 널 포인터 오류를 수정했습니다. 이러한 쿼리에는 `SELECT` 절에 동적 파라미터와 하위 쿼리가 포함되어 있었습니다.
+ 느슨한 인덱스 스캔 또는 인덱스의 비연속 범위 스캔에 `GROUP BY`를 사용할 때 잘못된 결과가 표시되던 문제를 수정했습니다.
+ 지속성 중 MySQL 충돌 시 GTID 정보가 손실되는 문제를 수정했습니다.
+ InnoDB 트랜잭션이 무기한 중단될 수 있는 경쟁 조건을 수정했습니다.
+ 그룹 복제의 인증 정보 정리에서 경쟁 조건을 수정했습니다.
+ 동시 페이지 작업 시 역방향 인덱스 스캔 문제를 수정했습니다.
+ 동시 시나리오에서 일관되지 않은 전체 텍스트 검색(FTS) 상태 문제를 수정했습니다.
+ 테이블 삭제 시 변경 버퍼와 관련된 어설션 문제를 수정했습니다.
+ 모든 플러그인 유형에서 `deinit` 함수 호출에 대한 동작이 통합되었습니다.

**CVE 수정됨:**
+ [CVE-2024-20963](https://nvd.nist.gov/vuln/detail/CVE-2024-20963)
+ [CVE-2024-20963](https://nvd.nist.gov/vuln/detail/CVE-2024-20993)
+ [CVE-2024-20998](https://nvd.nist.gov/vuln/detail/CVE-2024-20998)
+ [CVE-2024-21009](https://nvd.nist.gov/vuln/detail/CVE-2024-21009)
+ [CVE-2024-21054](https://nvd.nist.gov/vuln/detail/CVE-2024-21054)
+ [CVE-2024-21055](https://nvd.nist.gov/vuln/detail/CVE-2024-21055)
+ [CVE-2024-21057](https://nvd.nist.gov/vuln/detail/CVE-2024-21057)
+ [CVE-2024-21062](https://nvd.nist.gov/vuln/detail/CVE-2024-21062)
+ [CVE-2024-21008](https://nvd.nist.gov/vuln/detail/CVE-2024-21008)
+ [CVE-2024-21013](https://nvd.nist.gov/vuln/detail/CVE-2024-21013)
+ [CVE-2024-21047](https://nvd.nist.gov/vuln/detail/CVE-2024-21047)
+ [CVE-2024-21087](https://nvd.nist.gov/vuln/detail/CVE-2024-21087)
+ [CVE-2024-21096](https://nvd.nist.gov/vuln/detail/CVE-2024-21096)

### RDS for MySQL 버전 5.7.44-RDS.20240408에 대한 RDS 추가 지원
<a name="mysql-extended-support-releases-version-5.7.44-20240408"></a>

RDS for MySQL 버전 5.7.44-RDS.20240408에 대한 RDS 추가 지원을 사용할 수 있습니다.

이 릴리스에는 다음 CVE에 대한 패치가 포함되어 있습니다.
+ [CVE-2024-20963](https://nvd.nist.gov/vuln/detail/CVE-2024-20963)

## 데이터베이스 미리 보기 환경 작업
<a name="mysql-working-with-the-database-preview-environment"></a>

2023년 7월, Oracle은 MySQL의 새로운 릴리스 모델을 발표했습니다. 이 모델에는 Innovation 릴리스와 LTS 릴리스라는 두 가지 유형의 릴리스가 포함됩니다. Amazon RDS는 MySQL Innovation 릴리스를 RDS 미리 보기 환경에서 사용할 수 있도록 합니다. MySQL Innovation 릴리스에 대한 자세한 내용은 [MySQL Innovation 및 장기 지원(LTS) 버전 소개](https://blogs.oracle.com/mysql/post/introducing-mysql-innovation-and-longterm-support-lts-versions)를 참조하세요.

데이터베이스 미리 보기 환경의 RDS for MySQL DB 인스턴스는 다른 RDS for MySQL DB 인스턴스와 기능적으로 유사합니다. 하지만 프로덕션 워크로드에는 데이터베이스 미리 보기 환경을 사용할 수 없습니다.

미리 보기 환경에는 다음과 같은 제한 사항이 적용됩니다.
+ Amazon RDS는 생성 시점으로부터 60일이 지난 모든 DB 인스턴스를 백업 및 스냅샷과 함께 삭제합니다.
+ 범용 SSD와 프로비저닝된 IOPS SSD 스토리지만 사용할 수 있습니다.
+ DB 인스턴스와 관련해서는 지원의 도움을 받을 수 없습니다. 대신 AWS 관리형 Q&A 커뮤니티인 [AWS re:Post](https://repost.aws/tags/TAsibBK6ZeQYihN9as4S_psg/amazon-relational-database-service)에 질문을 게시할 수 있습니다.
+ DB 인스턴스의 스냅샷을 프로덕션 환경으로 복제할 수 없습니다.

미리 보기에서 지원되는 옵션은 다음과 같습니다.
+ db.m6i, db.r6i, db.m6g, db.m5, db.t3, db.r6g, and db.r5 DB 인스턴스 클래스를 사용하여 DB 인스턴스를 생성할 수 있습니다. RDS 인스턴스 클래스에 대한 자세한 내용은 [DB 인스턴스 클래스](Concepts.DBInstanceClass.md) 섹션을 참조하세요.
+ 단일 AZ 배포와 다중 AZ 배포를 모두 사용할 수 있습니다.
+ 표준 MySQL 덤프 및 로드 함수를 사용하여 데이터베이스 미리 보기 환경에서 데이터베이스를 내보내거나 데이터베이스 미리 보기 환경으로 데이터베이스를 가져올 수 있습니다.

### 데이터베이스 미리 보기 환경에서 지원하지 않는 기능
<a name="mysql-preview-environment-exclusions"></a>

다음 기능은 데이터베이스 미리 보기 환경에서 사용할 수 없습니다.
+ 리전 간 스냅샷 복제
+ 리전 간 읽기 전용 복제본
+ RDS 프록시

### 데이터베이스 미리 보기 환경에서 새 DB 인스턴스 생성
<a name="mysql-create-db-instance-in-preview-environment"></a>

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 데이터베이스 미리 보기 환경에서 DB 인스턴스를 생성할 수 있습니다.

#### 콘솔
<a name="mysql-create-db-instance-in-preview-environment.CON"></a>

**데이터베이스 미리 보기 환경에서 DB 인스턴스를 생성하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 **대시보드**를 선택합니다.

1. 다음 그림과 같이 **대시보드** 페이지에서 **데이터베이스 미리 보기 환경** 섹션을 찾습니다.  
![\[링크가 있는 Amazon RDS 콘솔의 데이터베이스 미리 보기 환경 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/preview-environment-dashboard.png)

   [데이터베이스 미리 보기 환경](https://us-east-2.console.aws.amazon.com/rds-preview/home?region=us-east-2#)으로 바로 이동할 수도 있습니다. 계속하려면 먼저 제한 사항을 확인하고 수락해야 합니다.  
![\[데이터베이스 미리 보기 환경 서비스 계약 대화 상자를 통해 제한 사항을 확인할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/preview-environment-console.png)

1. RDS for MySQL DB 인스턴스를 생성하려면 일반적으로 Amazon RDS DB 인스턴스를 생성할 때와 동일한 프로세스를 따릅니다. 자세한 내용은 [DB 인스턴스 생성](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)의 [콘솔](USER_CreateDBInstance.md#USER_CreateDBInstance.CON) 절차를 참조하세요.

#### AWS CLI
<a name="mysql-create-db-instance-in-preview-environment.CLI"></a>

AWS CLI를 사용하여 데이터베이스 미리 보기 환경에 DB 인스턴스를 생성하려면 다음 엔드포인트를 사용합니다.

```
rds-preview.us-east-2.amazonaws.com
```

RDS for MySQL DB 인스턴스를 생성하려면 일반적으로 Amazon RDS DB 인스턴스를 생성할 때와 동일한 프로세스를 따릅니다. 자세한 내용은 [DB 인스턴스 생성](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)의 [AWS CLI](USER_CreateDBInstance.md#USER_CreateDBInstance.CLI) 절차를 참조하세요.

#### RDS API
<a name="mysql-create-db-instance-in-preview-environment.API"></a>

RDS API를 사용하여 데이터베이스 미리 보기 환경에 DB 인스턴스를 생성하려면 다음 엔드포인트를 사용합니다.

```
rds-preview.us-east-2.amazonaws.com
```

RDS for MySQL DB 인스턴스를 생성하려면 일반적으로 Amazon RDS DB 인스턴스를 생성할 때와 동일한 프로세스를 따릅니다. 자세한 내용은 [DB 인스턴스 생성](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)의 [RDS API](USER_CreateDBInstance.md#USER_CreateDBInstance.API) 절차를 참조하세요.

## Database Preview Environment의 MySQL 버전 9.5
<a name="mysql-preview-environment-version-9-5"></a>

이제 MySQL 버전 9.5을 Amazon RDS Database Preview Environment에서 사용할 수 있습니다. MySQL 버전 9.5에는 [Changes in MySQL 9.5.0](https://dev.mysql.com/doc/relnotes/mysql/9.5/en/news-9-5-0.html)에 설명된 여러 개선 사항이 포함되어 있습니다.

데이터베이스 미리 보기 환경에 대한 자세한 내용은 [데이터베이스 미리 보기 환경 작업](#mysql-working-with-the-database-preview-environment) 섹션을 참조하세요. 콘솔에서 미리 보기 환경에 액세스하려면 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)를 선택합니다.

## 데이터베이스 미리 보기 환경의 MySQL 버전 9.4
<a name="mysql-preview-environment-version-9-4"></a>

이제 MySQL 버전 9.4를 Amazon RDS 데이터베이스 미리 보기 환경에서 사용할 수 있습니다. MySQL 버전 9.4에는 [Changes in MySQL 9.4.0](https://dev.mysql.com/doc/relnotes/mysql/9.4/en/news-9-4-0.html)에 설명된 여러 개선 사항이 포함되어 있습니다.

데이터베이스 미리 보기 환경에 대한 자세한 내용은 [데이터베이스 미리 보기 환경 작업](#mysql-working-with-the-database-preview-environment) 섹션을 참조하세요. 콘솔에서 미리 보기 환경에 액세스하려면 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)를 선택합니다.

## Database Preview Environment의 MySQL 버전 9.3
<a name="mysql-preview-environment-version-9-3"></a>

이제 MySQL 버전 9.3을 Amazon RDS Database Preview Environment에서 사용할 수 있습니다. MySQL 버전 9.3에는 [Changes in MySQL 9.3.0](https://dev.mysql.com/doc/relnotes/mysql/9.3/en/news-9-3-0.html)에 설명된 여러 개선 사항이 포함되어 있습니다.

데이터베이스 미리 보기 환경에 대한 자세한 내용은 [데이터베이스 미리 보기 환경 작업](#mysql-working-with-the-database-preview-environment) 섹션을 참조하세요. 콘솔에서 미리 보기 환경에 액세스하려면 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)를 선택합니다.

## 더 이상 사용되지 않는 Amazon RDS for MySQL 버전
<a name="MySQL.Concepts.DeprecatedVersions"></a>

Amazon RDS for MySQL 버전 5.1, 5.5, 5.6은 더 이상 사용되지 않습니다.

Amazon RDS for MySQL 버전 9.1 및 9.2는 데이터베이스 미리 보기 환경에서 더 이상 사용되지 않습니다.

MySQL에 대한 Amazon RDS 사용 중단 정책에 대한 자세한 내용은 [Amazon RDS FAQ](https://aws.amazon.com/rds/faqs/)를 참조하세요.

# MySQL DB 인스턴스에 연결
<a name="USER_ConnectToInstance"></a>

 MySQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결하려면 우선 DB 인스턴스를 생성해야 합니다. 자세한 정보는 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요. Amazon RDS가 DB 인스턴스를 프로비저닝한 후에는 표준 MySQL 클라이언트 애플리케이션 또는 유틸리티를 사용하여 인스턴스에 연결할 수 있습니다. 연결 문자열에는 호스트 파라미터로 DB 인스턴스 엔드포인트의 DNS 주소와 포트 파라미터로 DB 인스턴스 엔드포인트의 포트 번호를 지정합니다.

RDS DB 인스턴스에 인증하려면, MySQL 및 AWS Identity and Access Management(IAM) 데이터베이스 인증의 인증 방법 중 하나를 사용할 수 있습니다.
+ MySQL의 인증 방법 중 하나를 사용하는 MySQL 인증 방법을 확인하려면, MySQL의 [인증 방법](https://dev.mysql.com/doc/internals/en/authentication-method.html)을 참조하십시오.
+ IAM 데이터베이스 인증을 사용하는 MySQL 인증 방법을 확인하려면 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 단원을 참조하십시오.

MySQL 명령줄 클라이언트 같은 도구를 사용하여 MySQL DB 인스턴스에 연결할 수 있습니다. MySQL 명령줄 클라이언트 사용에 대한 자세한 내용은 MySQL 문서의 [mysql - MySQL 명령줄 클라이언트](https://dev.mysql.com/doc/refman/8.0/en/mysql.html)를 참조하세요. 연결에 사용할 수 있는 GUI 기반 애플리케이션 중 하나는 MySQL Workbench입니다. 자세한 정보는 [ MySQL Workbench 다운로드](http://dev.mysql.com/downloads/workbench/) 페이지 단원을 참조하십시오. MySQL 설치(MySQL 명령줄 클라이언트 포함)에 대한 정보는 [MySQL 설치 및 업그레이드](https://dev.mysql.com/doc/refman/8.0/en/installing.html)를 참조하세요.

Amazon VPC 외부에서 DB 인스턴스에 연결하려면 DB 인스턴스에 공개적으로 액세스할 수 있어야 하고, DB 인스턴스 보안 그룹의 인바운드 규칙을 사용하여 액세스 권한을 부여해야 하며, 기타 요구 사항을 충족해야 합니다. 자세한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하십시오.

MySQL DB 인스턴스로의 연결에 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS) 암호화를 사용할 수 있습니다. 자세한 내용은 [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md)을 참조하세요. AWS Identity and Access Management(IAM) 데이터베이스 인증을 사용하는 경우 SSL/TLS 연결을 사용해야 합니다. 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md)을 참조하세요.

웹 서버에서 DB 인스턴스에 연결할 수도 있습니다. 자세한 내용은 [자습서: 웹 서버 및 Amazon RDS DB 인스턴스 생성](TUT_WebAppWithRDS.md) 섹션을 참조하세요.

**참고**  
SSL을 사용한 MariaDB DB 인스턴스 연결에 대한 자세한 내용은 [MariaDB DB 인스턴스에 연결](USER_ConnectToMariaDBInstance.md) 단원을 참조하십시오.

RDS for MySQL DB 인스턴스를 찾아 연결하려면 다음 주제를 참조하세요.

**Topics**
+ [

# RDS for MySQL DB 인스턴스에 대한 연결 정보 찾기
](USER_ConnectToInstance.EndpointAndPort.md)
+ [

# MySQL 명령줄 클라이언트 설치
](mysql-install-cli.md)
+ [

# MySQL 명령줄 클라이언트에서 연결(암호화되지 않음)
](USER_ConnectToInstance.CLI.md)
+ [

# MySQL Workbench에서 연결
](USER_ConnectToInstance.MySQLWorkbench.md)
+ [

# AWS JDBC 드라이버, AWS Python 드라이버 및 MySQL용 AWS ODBC 드라이버를 사용하여 RDS for MySQL에 연결
](MySQL.Connecting.Drivers.md)
+ [

# MySQL DB 인스턴스에 대한 연결 문제 해결
](USER_ConnectToInstance.Troubleshooting.md)

# RDS for MySQL DB 인스턴스에 대한 연결 정보 찾기
<a name="USER_ConnectToInstance.EndpointAndPort"></a>

DB 인스턴스의 연결 정보에는 엔드포인트, 포트 및 유효한 데이터베이스 사용자(예: 마스터 사용자)가 포함됩니다. 예를 들어 엔드포인트 값이 `mydb.123456789012.us-east-1.rds.amazonaws.com`이라고 가정합니다. 이 경우 포트 값은 `3306`이고 데이터베이스 사용자는 `admin`입니다. 이 정보를 바탕으로 연결 문자열에 다음 값을 지정합니다.
+ 호스트 또는 호스트 이름 또는 DNS 이름에 `mydb.123456789012.us-east-1.rds.amazonaws.com`을 지정합니다.
+ 포트에 대해 `3306`을 지정합니다.
+ 사용자에 `admin`을 지정합니다.

DB 인스턴스에 연결하려면 MySQL DB 엔진에 대해 임의의 클라이언트를 사용합니다. 예를 들어 MySQL 명령줄 클라이언트 또는 MySQL 워크벤치를 사용할 수 있습니다.

DB 인스턴스에 대한 연결 정보를 찾으려면 AWS Management Console, AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령 또는 Amazon RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 작업을 사용하여 세부 정보를 나열하면 됩니다.

## 콘솔
<a name="USER_ConnectToInstance.EndpointAndPort.Console"></a>

**AWS Management Console에서 DB 인스턴스에 대한 연결 정보를 찾으려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 [**데이터베이스(Database)**] 를 선택하여 DB 인스턴스 목록을 표시합니다.

1. MySQL DB 인스턴스의 이름을 선택하여 세부 정보를 표시합니다.

1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[Amazon RDS 콘솔 내 DB 인스턴스의 엔드포인트 및 포트.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/endpoint-port.png)

1. 마스터 사용자 이름을 찾아야 하는 경우 [**구성(Configuration)**] 탭을 선택하고 [**마스터 사용자 이름(Master username)**] 값을 확인합니다.

## AWS CLI
<a name="USER_ConnectToInstance.EndpointAndPort.CLI"></a>

AWS CLI를 사용하여 MySQL DB 인스턴스의 연결 정보를 찾으려면 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령을 실행합니다. 이 호출에서 DB 인스턴스 ID, 엔드포인트, 포트 및 마스터 사용자 이름을 쿼리합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-db-instances \
  --filters "Name=engine,Values=mysql" \
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

Windows의 경우:

```
aws rds describe-db-instances ^
  --filters "Name=engine,Values=mysql" ^
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

다음과 유사하게 출력되어야 합니다.

```
[
    [
        "mydb1",
        "mydb1.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ],
    [
        "mydb2",
        "mydb2.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ]
]
```

## RDS API
<a name="USER_ConnectToInstance.EndpointAndPort.API"></a>

Amazon RDS API를 사용하여 DB 인스턴스의 연결 정보를 찾으려면 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 작업을 호출합니다. 출력에서 엔드포인트 주소, 엔드포인트 포트 및 마스터 사용자 이름의 값을 찾습니다.

# MySQL 명령줄 클라이언트 설치
<a name="mysql-install-cli"></a>

대부분의 Linux 배포에는 Oracle MySQL 클라이언트 대신 MariaDB 클라이언트가 포함됩니다. Amazon Linux 2023에서 MySQL 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

```
sudo dnf install mariadb105
```

Amazon Linux 2에서 MySQL 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

```
sudo yum install mariadb
```

대부분의 DEB 기반 Linux 배포판에 MySQL 명령줄 클라이언트를 설치하려면 다음 명령을 실행합니다.

```
apt-get install mariadb-client
```

MySQL 명령줄 클라이언트의 버전을 확인하려면 다음 명령을 실행합니다.

```
mysql --version
```

현재 클라이언트 버전에 대한 MySQL 문서를 보려면 다음 명령을 실행합니다.

```
man mysql
```

# MySQL 명령줄 클라이언트에서 연결(암호화되지 않음)
<a name="USER_ConnectToInstance.CLI"></a>

**중요**  
클라이언트와 서버가 동일한 VPC에 있고 네트워크를 신뢰할 수 있는 경우에만 암호화되지 않은 MySQL 연결을 사용합니다. 암호화된 연결 사용에 대한 자세한 내용은 [MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결](USER_ConnectToInstanceSSL.CLI.md) 섹션을 참조하세요.

MySQL 명령줄 클라이언트를 사용하여 DB 인스턴스에 연결하려면 클라이언트 컴퓨터의 명령 프롬프트에서 다음 명령을 입력합니다. -h 파라미터의 경우 해당 DB 인스턴스의 DNS 이름(엔드포인트)으로 대체합니다. -p 파라미터에는 DB 인스턴스의 포트로 대체합니다. -u 파라미터에는 마스터 사용자와 같이 유효한 데이터베이스 사용자의 사용자 이름으로 대체합니다. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

```
mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u mymasteruser -p
```

사용자에 대한 암호를 입력하면 다음과 유사한 출력이 나타납니다.

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
```

# MySQL Workbench에서 연결
<a name="USER_ConnectToInstance.MySQLWorkbench"></a>

**MySQL Workbench에서 연결하려면**

1. [MySQL Workbench 다운로드](http://dev.mysql.com/downloads/workbench/)에서 MySQL Workbench를 다운로드하고 설치합니다.

1. MySQL Workbench를 엽니다.  
![\[MySQL Workbench의 시작 화면.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/mysql-workbench-main.png)

1. **데이터베이스**에서 **Manage Connections(연결 관리)**를 선택합니다.

1. **Manage Server Connections(서버 연결 관리)** 창에서 **새로 생성**을 선택합니다.

1. **Connect to Database(데이터베이스에 연결)** 창에 다음 정보를 입력합니다.
   + **Stored Connection(저장된 연결)** – 연결에 **MyDB**와 같은 이름을 입력합니다.
   + **Hostname(호스트 이름)** – DB 인스턴스 엔드포인트를 입력합니다.
   + **포트** – DB 인스턴스에서 사용한 포트를 입력합니다.
   + **사용자 이름** – 마스터 사용자와 같이 유효한 데이터이스 사용자의 사용자 이름을 입력합니다.
   + **암호** – 선택적으로 **Store in Vault(볼트에 저장)**를 선택한 후 사용자의 암호를 입력하고 저장합니다.

   창은 다음과 비슷하게 표시됩니다.  
![\[MySQL Workbench의 서버 연결 관리 창.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/mysql-workbench-connect.png)

   MySQL Workbench의 기능을 사용하여 연결을 사용자 지정할 수 있습니다. 예를 들어, **SSL** 탭에서 SSL/TLS 연결을 구성할 수 있습니다. MySQL Workbench 사용에 대한 자세한 내용은 [MySQL Workbench 설명서](https://dev.mysql.com/doc/workbench/en/)를 참조하십시오. SSL/TLS를 사용하여 MySQL DB 인스턴스로의 클라이언트 연결을 암호화하려면 [SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 대한 클라이언트 연결 암호화](mysql-ssl-connections.md) 섹션을 참조하세요.

1. 선택적으로 **연결 테스트**를 선택하여 DB 인스턴스에 대한 연결이 성공적인지 확인합니다.

1. **닫기**를 선택합니다.

1. **데이터베이스**에서 **Connect to Database(데이터베이스에 연결)**를 선택합니다.

1. **Stored Connection(저장된 연결)**에서 연결을 선택합니다.

1. **확인**을 선택합니다.

# AWS JDBC 드라이버, AWS Python 드라이버 및 MySQL용 AWS ODBC 드라이버를 사용하여 RDS for MySQL에 연결
<a name="MySQL.Connecting.Drivers"></a>

AWS JDBC 드라이버, AWS Python 드라이버 및 MySQL용 AWS ODBC 드라이버를 사용하여 RDS for MySQL DB 인스턴스에 연결합니다. 자세한 내용은 다음 항목을 참조하세요.

**Topics**
+ [

## Amazon Web Services(AWS) JDBC 드라이버를 사용하여 RDS for MySQL에 연결
](#MySQL.Connecting.JDBCDriver)
+ [

## Amazon Web Services(AWS) Python 드라이버를 사용하여 RDS for MySQL에 연결
](#MySQL.Connecting.PythonDriver)
+ [

## MySQL용 Amazon Web Services(AWS) ODBC 드라이버를 사용하여 RDS for MySQL에 연결
](#USER_ConnectToInstance.ODBCDriverMySQL)

## Amazon Web Services(AWS) JDBC 드라이버를 사용하여 RDS for MySQL에 연결
<a name="MySQL.Connecting.JDBCDriver"></a>

Amazon Web Services(AWS) JDBC 드라이버는 고급 JDBC 래퍼로 설계되었습니다. 이 래퍼는 기존 JDBC 드라이버의 기능을 보완하고 확장합니다. 이 드라이버는 커뮤니티 MySQL Connector/J 드라이버 및 커뮤니티 MariaDB Connector/J 드라이버와 드롭인 호환됩니다.

AWS JDBC 드라이버를 설치하려면 `CLASSPATH` 애플리케이션에 있는 AWS JDBC 드라이버 .jar 파일을 추가하고 해당 커뮤니티 드라이버에 대한 참조를 보관해 두세요. 다음과 같이 해당 연결 URL 접두사를 업데이트하세요.
+ `jdbc:mysql://`\$1`jdbc:aws-wrapper:mysql://`
+ `jdbc:mariadb://`\$1`jdbc:aws-wrapper:mariadb://`

AWS JDBC 드라이버에 대한 자세한 내용 및 사용 방법에 대한 전체 지침은 [Amazon Web Services (AWS) JDBC Driver GitHub repository](https://github.com/awslabs/aws-advanced-jdbc-wrapper)를 참조하세요.

## Amazon Web Services(AWS) Python 드라이버를 사용하여 RDS for MySQL에 연결
<a name="MySQL.Connecting.PythonDriver"></a>

Amazon Web Services(AWS) Python 드라이버는 고급 Python 래퍼로 설계되었습니다. 이 래퍼는 오픈 소스 Psycopg 드라이버의 기능을 보완하고 확장합니다. AWS Python 드라이버는 Python 버전 3.8 이상을 지원합니다. `pip` 명령을 사용하여 `psycopg` 오픈 소스 패키지와 함께 `aws-advanced-python-wrapper` 패키지를 설치할 수 있습니다.

AWS Python 드라이버에 대한 자세한 내용 및 사용 방법에 대한 전체 지침은 [Amazon Web Services (AWS) JDBC Python GitHub repository](https://github.com/awslabs/aws-advanced-python-wrapper)를 참조하세요.

## MySQL용 Amazon Web Services(AWS) ODBC 드라이버를 사용하여 RDS for MySQL에 연결
<a name="USER_ConnectToInstance.ODBCDriverMySQL"></a>

MySQL용 AWS ODBC 드라이버는 RDS for MySQL의 고가용성을 위해 설계된 클라이언트 드라이버입니다. 드라이버는 MySQL Connector/ODBC 드라이버와 함께 존재할 수 있으며 동일한 워크플로와 호환됩니다.

MySQL용 AWS ODBC 드라이버에 대한 자세한 내용 및 설치와 사용에 대한 전체 지침은 [MySQL용 Amazon Web Services(AWS) ODBC 드라이버](https://github.com/aws/aws-mysql-odbc) GitHub 리포지토리를 참조하세요.

# MySQL DB 인스턴스에 대한 연결 문제 해결
<a name="USER_ConnectToInstance.Troubleshooting"></a>

새로운 DB 인스턴스의 연결 오류가 발생하는 두 가지 공통 원인은 다음과 같습니다.
+ 보안 그룹을 사용하여 DB 인스턴스를 생성하였지만 이 보안 그룹이 MySQL 애플리케이션 또는 유틸리티를 실행 중인 디바이스나 Amazon EC2 인스턴스에서 연결을 승인하지 않는 경우. DB 인스턴스에 연결 권한을 부여하는 VPC 보안 그룹이 있어야 합니다. 자세한 내용은 [Amazon VPC 및 Amazon RDS](USER_VPC.md) 단원을 참조하십시오.

  보안 그룹에서 인바운드 규칙을 추가하거나 편집할 수 있습니다. **소스**에서 **내 IP**를 선택합니다. 이렇게 하면 브라우저에서 감지된 IP 주소에서 DB 인스턴스에 액세스할 수 있습니다.
+ 포트 3306을 사용해 DB 인스턴스를 만들었는데 기업 방화벽 규칙에 따라 기업 네트워크의 디바이스에서 해당 포트에 연결하는 것이 차단된 경우. 이 오류를 수정하려면 인스턴스를 다른 포트로 다시 만들어야 합니다.

연결 문제에 대한 자세한 내용은 [Amazon RDS DB 인스턴스에 연결할 수 없음](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting) 단원을 참조하십시오.

# MySQL DB 인스턴스 연결 보안
<a name="securing-mysql-connections"></a>

강력한 보안 조치를 구현하여 무단 액세스 및 잠재적 위협으로부터 MySQL DB 인스턴스를 보호할 수 있습니다. 보안 그룹, SSL/TLS 암호화 및 IAM 데이터베이스 인증이 함께 작동하여 MySQL DB 인스턴스에 대한 여러 연결 보안 계층을 만듭니다. 이러한 보안 제어는 규정 준수 요구 사항을 충족하고, 데이터 침해를 방지하고, 애플리케이션과 데이터베이스 간의 보안 통신 채널을 유지하는 데 도움이 됩니다. 전송 중 데이터를 암호화하고, 특정 IP 범위로 액세스를 제한하고, 데이터베이스 암호가 아닌 IAM 역할을 통해 사용자 인증을 관리하여 MySQL DB 인스턴스를 보호할 수 있습니다.

MySQL DB 인스턴스용 보안은 세 가지 수준에서 관리됩니다.
+ AWS Identity and Access Management는 DB 인스턴스에서 Amazon RDS 관리 작업을 수행할 수 있는 사용자를 제어합니다. IAM 자격 증명을 사용하여 AWS에 연결할 때, IAM 계정은 Amazon RDS 관리 작업을 수행하는 데 필요한 권한을 부여하는 IAM 정책을 보유하고 있어야 합니다. 자세한 내용은 [Amazon RDS의 자격 증명 및 액세스 관리](UsingWithRDS.IAM.md) 섹션을 참조하세요.
+ DB 인스턴스를 생성할 때 VPC 보안 그룹을 사용하여 어떤 디바이스와 Amazon EC2 인스턴스가 DB 인스턴스의 엔드포인트 및 포트에 대한 연결을 열 수 있는지를 제어하게 됩니다. 보안 소켓 계층(SSL) 및 전송 계층 보안(TLS)을 사용하여 이러한 연결을 구성할 수 있습니다. 또한 회사의 방화벽 규칙을 통해 회사에서 실행하는 디바이스가 DB 인스턴스에 대한 연결을 열 수 있는지를 제어할 수 있습니다.
+ MySQL DB 인스턴스에 대한 로그인 및 권한을 인증하기 위해서는 다음 접근 방식 중 하나를 따르거나 두 방식을 조합할 수 있습니다.
  + 독립형 MySQL 인스턴스와 동일한 접근법을 사용할 수 있습니다. `CREATE USER`, `RENAME USER`, `GRANT`, `REVOKE` 및 `SET PASSWORD` 등의 명령은 온프레미스 데이터베이스에서 작동하는 것과 마찬가지로 작동하며, 데이터베이스 스키마 테이블을 직접 수정할 때도 동일합니다. 하지만 데이터베이스 스키마 테이블을 직접 수정하는 것은 모범 사례가 아니며 RDS for MySQL 버전 8.0.36부터는 지원되지 않습니다. 자세한 내용은 MySQL 설명서의 [Access Control and Account Management](https://dev.mysql.com/doc/refman/8.0/en/access-control.html)를 참조하십시오.
  + 또한 IAM 데이터베이스 인증을 사용할 수도 있습니다. IAM 데이터베이스 인증의 경우, IAM 사용자 또는 IAM 역할 및 인증 토큰을 이용해 DB 인스턴스에 인증합니다. *인증 토큰*은 서명 버전 4 서명 프로세스를 통해 생성하는 고유 값입니다. IAM 데이터베이스 인증을 사용하면 동일한 자격 증명을 사용해 AWS 리소스 및 데이터베이스에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 [MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증](UsingWithRDS.IAMDBAuth.md) 섹션을 참조하세요.
  + 지원되는 또 다른 옵션은 RDS for MySQL용 Kerberos 인증입니다. DB 인스턴스는 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)와 함께 작동하여 Kerberos 인증을 활성화합니다. 사용자가 트러스팅 도메인에 가입된 MySQL DB 인스턴스로 인증하면 인증 요청이 전달됩니다. 전달된 요청은 Directory Service에서 생성한 도메인 디렉터리로 이동합니다. 자세한 내용은 [Amazon RDS for MySQL에 Kerberos 인증 사용](mysql-kerberos.md) 섹션을 참조하세요.

 Amazon RDS DB 인스턴스를 생성할 때 마스터 사용자는 다음과 같은 기본 권한을 갖습니다.


| 엔진 버전 | 시스템 권한 | 데이터베이스 역할 | 
| --- | --- | --- | 
|  RDS for MySQL 버전 8.4.3 이상  |  `GRANT SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`,`INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `FLUSH_OPTIMIZER_COSTS`, `FLUSH_PRIVILEGES`, `FLUSH_STATUS`, `FLUSH_TABLES`, `FLUSH_USER_RESOURCES`, `ROLE_ADMIN`, `SENSITIVE_VARIABLES_OBSERVER`, `SESSION_VARIABLES_ADMIN`, `SET_ANY_DEFINER`, `SHOW_ROUTINE`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` `rds_superuser_role`에 대한 자세한 정보는 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 섹션을 참조하세요.  | 
|  RDS for MySQL 버전 8.0.36 이상  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `ROLE_ADMIN`, `SET_USER_ID`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` `rds_superuser_role`에 대한 자세한 정보는 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 섹션을 참조하세요.  | 
|  RDS for MySQL 버전 8.0.36 미만  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `REPLICATION SLAVE`  |  없음  | 

**참고**  
DB 인스턴스에서 마스터 사용자를 삭제할 수 있지만, 권장하지는 않습니다. 마스터 사용자를 다시 만들려면 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 작업을 사용하거나 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 명령을 실행하고 적절한 파라미터와 함께 새 마스터 사용자 암호를 지정합니다. 마스터 사용자가 인스턴스에 존재하지 않는 경우 마스터 사용자가 지정된 암호와 함께 생성됩니다.

각 DB 인스턴스에 관리 서비스를 제공하기 위해 DB 인스턴스가 생성될 때 `rdsadmin` 사용자가 만들어집니다. `rdsadmin` 계정에 대한 암호를 삭제하거나 이름 바꾸기를 하거나 변경하려고 시도하면 또는 권한을 변경하려고 시도하면 오류가 발생합니다.

DB 인스턴스의 관리를 허용하기 위해 표준 `kill` 및 `kill_query` 명령이 제한되었습니다. DB 인스턴스에서 사용자 세션 또는 쿼리를 종료할 수 있도록 Amazon RDS 명령 `rds_kill` 및 `rds_kill_query`가 제공됩니다.

# RDS for MySQL에 대한 암호 검증
<a name="MySQL.Concepts.PasswordValidationPlugin"></a>

MySQL은 향상된 보안을 위한 `validate_password` 플러그인을 제공합니다. 이 플러그인은 MySQL DB 인스턴스의 DB 파라미터 그룹에 있는 파라미터를 사용하여 암호 정책을 적용합니다. 이 플러그인은 MySQL 버전 5.7, 8.0, 8.4를 실행하는 DB 인스턴스에 지원됩니다. `validate_password` 플러그인에 대한 자세한 내용은 MySQL 설명서의 [암호 확인 플러그인](https://dev.mysql.com/doc/refman/5.7/en/validate-password.html)을 참조하십시오.

**MySQL DB 인스턴스에 `validate_password` 플러그인을 활성화하는 방법**

1. MySQL DB 인스턴스에 연결하고 다음 명령을 실행합니다.

   ```
   INSTALL PLUGIN validate_password SONAME 'validate_password.so';                    
   ```

1. DB 인스턴스에서 사용하는 DB 파라미터 그룹에 플러그인에 대한 파라미터를 구성하면 됩니다.

   파라미터에 대한 자세한 내용은 MySQL 설명서의 [암호 확인 플러그인 옵션 및 변수](https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html)를 참조하십시오.

   DB 인스턴스 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

1. DB 인스턴스를 다시 시작합니다.

`validate_password` 플러그인을 활성화한 후 새 확인 정책을 준수하도록 기존 암호를 재설정하세요.

MySQL DB 인스턴스는 Amazon RDS의 암호 검증을 처리합니다. 암호를 변경하려면 먼저 AWS Management Console, `modify-db-instance` CLI 명령 또는 `ModifyDBInstance` API 작업을 통해 암호 업데이트 요청을 제출합니다. RDS는 암호가 정책을 충족하지 않더라도 처음에 요청을 수락합니다. 그런 다음 RDS는 요청을 비동기적으로 처리합니다. 암호가 정의된 정책을 충족하는 경우에만 MySQL DB 인스턴스의 암호를 업데이트합니다. 암호가 이러한 정책을 충족하지 않는 경우 RDS는 기존 암호를 유지하고 오류 이벤트를 기록합니다.

```
    Unable to reset your password. Error information: Password failed to meet validation rules.            
```

Amazon RDS 이벤트에 대한 자세한 내용은 [Amazon RDS 이벤트 알림 작업](USER_Events.md) 섹션을 참조하십시오.

# SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 대한 클라이언트 연결 암호화
<a name="mysql-ssl-connections"></a>

SSL(Secure Sockets Layer)은 클라이언트와 서버 간의 네트워크 연결을 보호하는 데 사용되는 업계 표준 프로토콜입니다. SSL 버전 3.0 이후로 이름이 전송 계층 보안(TLS)으로 변경되었습니다. Amazon RDS는 MySQL DB 인스턴스에 SSL/TLS 암호화를 지원합니다. SSL/TLS를 사용하여 애플리케이션 클라이언트와 MySQL DB 인스턴스 간의 연결을 암호화할 수 있습니다. SSL/TLS 지원 기능은 MySQL에 대한 모든 AWS 리전에서 사용할 수 있습니다.

Amazon RDS를 사용하면 SSL/TLS로 MySQL DB 인스턴스에 대한 클라이언트 연결을 암호화하고, MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS를 요구하고, MySQL 명령줄 클라이언트에서 SSL/TLS(암호화됨)로 연결하여 전송 중 데이터를 보호할 수 있습니다. 다음 섹션에서는 Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 암호화를 구성하고 활용하는 방법에 대한 지침을 제공합니다.

**Topics**
+ [

# Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원
](MySQL.Concepts.SSLSupport.md)
+ [

# Amazon RDS의 MySQL DB 인스턴스에 대한 특정 사용자 계정에 SSL/TLS 요구
](mysql-ssl-connections.require-ssl-users.md)
+ [

# Amazon RDS에서 MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS 요구
](mysql-ssl-connections.require-ssl.md)
+ [

# MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결
](USER_ConnectToInstanceSSL.CLI.md)

# Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원
<a name="MySQL.Concepts.SSLSupport"></a>

Amazon RDS가 SSL/TLS 인증서를 생성한 후 Amazon RDS가 인스턴스를 프로비저닝할 때 DB 인스턴스에 인증서를 설치합니다. 인증 기관이 서명하는 SSL 인증서에는 SSL/TLS 인증서에는 스푸핑 공격으로부터 보호해주는 SSL/TLS 인증서를 위한 일반 이름(CN)으로 DB 인스턴스 엔드포인트가 포함되어 있습니다.

Amazon RDS에서 생성하는 SSL/TLS 인증서는 신뢰할 수 있는 루트 개체이므로 대부분의 경우에 작동하지만, 애플리케이션에서 인증서 체인을 수락하지 않을 경우 사용하지 못할 수 있습니다. 애플리케이션에서 인증서 체인을 허용하지 않는 경우 중간 인증서로 사용 중인 AWS 리전에 연결해 보세요. 예를 들어, SSL/TLS를 사용하여 AWS GovCloud (US) 리전에 연결하려면 중간 인증서를 사용해야 합니다.

인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하세요. MySQL에서 SSL/TLS를 사용하는 방법에 대한 자세한 내용은 [새 SSL/TLS 인증서를 사용해 MySQL DB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-mysql.md) 섹션을 참조하세요.

MySQL 버전 8.0 이하의 경우 Amazon RDS for MySQL은 보안 연결에 OpenSSL을 사용합니다. MySQL 버전 8.4 이상의 경우 Amazon RDS for MySQL은 AWS-LC를 사용합니다. TLS 지원은 MySQL 버전에 따라 달라집니다. 다음 표는 MySQL 버전에 대한 TLS 지원을 보여줍니다.


| MySQL 버전 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 
| --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  지원되지 않음  |  지원되지 않음  |  지원  |  지원됨  | 
|  MySQL 8.0  |  지원되지 않음  |  지원되지 않음  |  지원  |  지원  | 
|  MySQL 5.7  |  지원  |  지원됨  |  지원됨  |  지원되지 않음  | 

# Amazon RDS의 MySQL DB 인스턴스에 대한 특정 사용자 계정에 SSL/TLS 요구
<a name="mysql-ssl-connections.require-ssl-users"></a>

Amazon RDS의 MySQL DB 인스턴스에 대한 지정된 사용자 계정 연결에 SSL/TLS 암호화가 필요할 수 있습니다. 데이터 기밀성이 우려되는 보안 정책을 적용하려면 민감한 정보를 무단 액세스 또는 가로채기로부터 보호하는 것이 중요합니다.

특정 사용자의 계정에 대해 SSL/TLS 연결을 요구하려면 MySQL 버전에 따라 다음 문 중 하나를 사용하여 사용자 계정 `encrypted_user`에서 SSL/TLS 연결을 요구하세요.

이렇게 하려면 다음 문을 사용하면 됩니다.

```
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
```

MySQL과의 SSL/TLS 연결에 대한 자세한 내용은 MySQL 설명서의 [암호화된 연결 사용](https://dev.mysql.com/doc/refman/8.0/en/encrypted-connections.html)을 참조하세요.

# Amazon RDS에서 MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS 요구
<a name="mysql-ssl-connections.require-ssl"></a>

`require_secure_transport` 파라미터를 사용하여 MySQL DB 인스턴스에 대한 모든 사용자 연결이 SSL/TLS를 사용하도록 요구합니다. 기본적으로 `require_secure_transport` 파라미터는 `OFF`로 설정됩니다. `require_secure_transport` 파라미터를 `ON`으로 설정하면 해당 DB 인스턴스에 대한 연결 시 SSL/TLS를 요구합니다.

`require_secure_transport` 파라미터 값은 DB 인스턴스의 DB 파라미터 그룹을 업데이트하여 설정할 수 있습니다. 변경 사항을 적용하기 위해 DB 인스턴스를 재부팅할 필요가 없습니다.

DB 클러스터에 대해 `require_secure_transport` 파라미터를 `ON`으로 설정하면 암호화된 연결을 설정할 수 있는 경우 데이터베이스 클라이언트가 인스턴스에 연결할 수 있습니다. 그렇지 않으면 다음과 유사한 오류 메시지가 클라이언트에 반환됩니다.

```
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
```

파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md)을 참조하세요.

`require_secure_transport` 파라미터에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_require_secure_transport)를 참조하세요.

# MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결
<a name="USER_ConnectToInstanceSSL.CLI"></a>

`mysql` 클라이언트 프로그램 파라미터는 사용 중인 MySQL 또는 MariaDB 버전에 따라 약간 다릅니다.

사용 중인 버전을 확인하려면 `--version` 옵션을 사용하여 `mysql` 명령을 실행합니다. 다음 예에서는 출력은 클라이언트 프로그램이 MariaDB의 프로그램임을 나타냅니다.

```
$ mysql --version
mysql  Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1
```

Amazon Linux, CentOS, SUSE 및 Debian과 같은 대부분의 Linux 배포판은 MySQL을 MariaDB로 대체했으며 `mysql` 버전은 MariaDB에서 가져온 것입니다.

다음 단계에 따라 SSL/TLS를 사용하여 DB 인스턴스에 연결합니다.

**MySQL 명령줄 클라이언트를 사용하여 SSL/TLS를 통해 DB 인스턴스에 연결하려면**

1. 모든 AWS 리전에 적용되는 루트 인증서를 다운로드할 수 있습니다.

   인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하세요.

1. MySQL 명령줄 클라이언트를 사용하여 SSL/TLS를 통해 DB 인스턴스에 연결합니다. `-h` 파라미터의 경우 해당 DB 인스턴스의 DNS 이름(엔드포인트)로 대체합니다. `--ssl-ca` 파라미터는 해당하는 SSL/TLS 인증서 파일 이름으로 대체합니다. `-P` 파라미터에는 DB 인스턴스의 포트로 대체합니다. `-u` 파라미터에는 마스터 사용자와 같이 유효한 데이터베이스 사용자의 사용자 이름으로 대체합니다. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

   다음 예제는 MySQL 5.7 클라이언트 이후 버전의 경우 `--ssl-ca` 파라미터를 사용하여 클라이언트를 시작하는 방법을 보여줍니다.

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p
   ```

   SSL/TLS 연결에서 SSL/TLS 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인하도록 요구할 수 있습니다.

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p
   ```

   다음 예제는 MariaDB 클라이언트를 사용하여 `--ssl-ca` 파라미터를 통해 클라이언트를 시작하는 방법을 보여줍니다.

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
   ```

1. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

출력은 다음과 비슷합니다.

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
```

# 새 SSL/TLS 인증서를 사용해 MySQL DB 인스턴스에 연결할 애플리케이션 업데이트
<a name="ssl-certificate-rotation-mysql"></a>

2023년 1월 13일부터 Amazon RDS는 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용해 RDS DB 인스턴스에 연결하기 위한 용도의 새 인증 기관(CA) 인증서를 게시하였습니다. 아래에서 새 인증서를 사용하기 위해 애플리케이션을 업데이트하는 방법에 관한 정보를 찾으실 수 있습니다.

이 주제는 클라이언트 애플리케이션에서 SSL/TLS를 사용해 DB 인스턴스에 연결하는지 여부를 판단하는 데 도움이 됩니다. SSL/TLS를 사용해 연결한다면 이 애플리케이션에서 연결 시 인증서 확인이 필요한지 여부를 추가로 확인할 수 있습니다.

**참고**  
어떤 애플리케이션은 서버에서 인증서를 성공적으로 확인할 수 있는 경우에만 MySQL DB 인스턴스에 연결하도록 구성되어 있습니다. 이러한 애플리케이션의 경우 클라이언트 애플리케이션 트러스트 스토어를 업데이트하여 새 CA 인증서를 포함해야 합니다.  
`disabled`, `preferred` 및 `required`의 SSL 모드를 지정할 수 있습니다. `preferred` SSL 모드를 사용할 때 CA 인증서가 없거나 최신 버전이 아닌 경우 연결이 SSL을 사용하지 않는 것으로 폴백되고 암호화 없이 연결됩니다.  
`preferred` 모드는 피하는 것이 좋습니다. `preferred` 모드에서 연결이 잘못된 인증서가 발견되면 모드에서 암호화 사용을 중지하고 암호화되지 않은 상태로 진행합니다.

클라이언트 애플리케이션 트러스트 스토어에서 CA 인증서를 업데이트한 후에는 DB 인스턴스에서 인증서를 교환할 수 있습니다. 이 절차를 프로덕션 환경에서 구현하기 전에 개발 또는 스테이징 환경에서 테스트해볼 것을 적극 권장합니다.

인증서 교환에 대한 자세한 내용은 [SSL/TLS 인증서 교체](UsingWithRDS.SSL-certificate-rotation.md) 단원을 참조하십시오. 인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하십시오. MySQL DB 인스턴스에서 SSL/TLS를 사용하는 방법에 관한 자세한 내용은 [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md) 단원을 참조하십시오.

**Topics**
+ [

## 애플리케이션에서 SSL을 사용해 MySQL DB 인스턴스에 연결하는지 여부 확인
](#ssl-certificate-rotation-mysql.determining-server)
+ [

## 클라이언트에서 연결 시 인증서 확인이 필요한지 여부 확인
](#ssl-certificate-rotation-mysql.determining-client)
+ [

## 애플리케이션 트러스트 스토어 업데이트
](#ssl-certificate-rotation-mysql.updating-trust-store)
+ [

## SSL 연결 설정을 위한 Java 코드 예시
](#ssl-certificate-rotation-mysql.java-example)

## 애플리케이션에서 SSL을 사용해 MySQL DB 인스턴스에 연결하는지 여부 확인
<a name="ssl-certificate-rotation-mysql.determining-server"></a>

Amazon RDS for MySQL 버전 5.7, 8.0 또는 8.4를 사용 중이고 성능 스키마가 활성화되어 있는 경우 다음 쿼리를 실행하여 연결 시 SSL/TLS를 사용하는지 여부를 확인하세요. 성능 스키마 활성화에 대한 자세한 내용은 MySQL 설명서의 [성능 스키마 빠른 시작](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-quick-start.html)을 참조하십시오.

```
mysql> SELECT id, user, host, connection_type 
       FROM performance_schema.threads pst 
       INNER JOIN information_schema.processlist isp 
       ON pst.processlist_id = isp.id;
```

이 샘플 출력에서는 고객님 자신의 세션(`admin`)과 `webapp1`로 로그인된 애플리케이션에서 모두 SSL을 사용 중임을 알 수 있습니다.

```
+----+-----------------+------------------+-----------------+
| id | user            | host             | connection_type |
+----+-----------------+------------------+-----------------+
|  8 | admin           | 10.0.4.249:42590 | SSL/TLS         |
|  4 | event_scheduler | localhost        | NULL            |
| 10 | webapp1         | 159.28.1.1:42189 | SSL/TLS         |
+----+-----------------+------------------+-----------------+
3 rows in set (0.00 sec)
```

## 클라이언트에서 연결 시 인증서 확인이 필요한지 여부 확인
<a name="ssl-certificate-rotation-mysql.determining-client"></a>

JDBC 클라이언트 및 MySQL 클라이언트에서 연결 시 인증서 확인이 필요한지 여부를 확인할 수 있습니다.

### JDBC
<a name="ssl-certificate-rotation-mysql.determining-client.jdbc"></a>

아래의 MySQL 커넥터/J 8.0 관련 예시에서는 애플리케이션의 JDBC 연결 속성을 확인하여 성공적인 연결을 위해 유효한 인증서가 필요한지 여부를 판단하는 한 가지 방법을 보여줍니다. MySQL에 대한 모든 JDBC 연결 옵션에 대한 자세한 내용은 MySQL 문서의 [구성 속성](https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html)을 참조하십시오.

MySQL 커넥터/J 8.0을 사용 중인 경우 다음 예시와 같이 연결 속성에서 `sslMode`가 `VERIFY_CA` 또는 `VERIFY_IDENTITY`로 설정되어 있다면 SSL 연결 시 DB 서버 인증서에 대한 확인이 필요합니다.

```
Properties properties = new Properties();
properties.setProperty("sslMode", "VERIFY_IDENTITY");
properties.put("user", DB_USER);
properties.put("password", DB_PASSWORD);
```

**참고**  
데이터베이스에 연결할 때 SSL/TLS를 사용하도록 애플리케이션을 명시적으로 구성하지 않았더라도 MySQL Java Connector v5.1.38 이상 또는 MySQL Java Connector v8.0.9 이상을 사용하여 데이터베이스에 연결하는 경우, 이러한 클라이언트 드라이버는 기본적으로 SSL/TLS를 사용합니다. 또한 SSL/TLS 사용 시 부분 인증서 확인을 수행하고 데이터베이스 서버 인증서가 만료되면 연결에 실패합니다.

### MySQL
<a name="ssl-certificate-rotation-mysql.determining-client.mysql"></a>

MySQL 클라이언트에 관한 다음 예시에서는 스크립트의 MySQL 연결을 확인하여 성공적인 연결을 위해 유효한 인증서가 필요한지 여부를 판단하는 두 가지 방법을 보여줍니다. MySQL 클라이언트의 모든 연결 옵션에 대한 자세한 내용은 MySQL 문서의 [암호화된 연결을 위한 클라이언트 측 구성](https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html#using-encrypted-connections-client-side-configuration)을 참조하십시오.

MySQL Client 버전 5.7 이상을 사용 중인 경우 다음 예시와 같이 `--ssl-mode` 옵션에 대해 `VERIFY_CA` 또는 `VERIFY_IDENTITY`를 지정했다면 SSL 연결 시 서버 CA 인증서에 대한 확인이 필요합니다.

```
mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA                
```

## 애플리케이션 트러스트 스토어 업데이트
<a name="ssl-certificate-rotation-mysql.updating-trust-store"></a>

MySQL 애플리케이션을 위한 트러스트 스토어 업데이트에 관한 자세한 내용은 MySQL 문서의 [SSL 인증서 설치](https://dev.mysql.com/doc/mysql-monitor/8.0/en/mem-ssl-installation.html) 단원을 참조하십시오.

루트 인증서 다운로드에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하십시오.

인증서를 가져오는 샘플 스크립트는 [트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script) 섹션을 참조하세요.

**참고**  
트러스트 스토어를 업데이트할 때 새 인증서를 추가할 뿐 아니라 이전 인증서를 유지할 수도 있습니다.

애플리케이션에서 mysql JDBC를 사용 중인 경우 애플리케이션에서 다음 속성을 설정하십시오.

```
System.setProperty("javax.net.ssl.trustStore", certs);
System.setProperty("javax.net.ssl.trustStorePassword", "password");
```

애플리케이션을 시작할 때 다음 속성을 설정하십시오.

```
java -Djavax.net.ssl.trustStore=/path_to_trust_store/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_trust_store_password com.companyName.MyApplication        
```

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

## SSL 연결 설정을 위한 Java 코드 예시
<a name="ssl-certificate-rotation-mysql.java-example"></a>

다음 코드 예시에서는 JDBC를 사용하여 서버 인증서를 확인하는 SSL 연결을 설정하는 방법을 보여줍니다.

```
public class MySQLSSLTest {
     
        private static final String DB_USER = "username";
        private static final String DB_PASSWORD = "password";
        // This trust store has only the prod root ca.
        private static final String TRUST_STORE_FILE_PATH = "file-path-to-trust-store";
        private static final String TRUST_STORE_PASS = "trust-store-password";
            
        public static void test(String[] args) throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
                    
            System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_FILE_PATH);
            System.setProperty("javax.net.ssl.trustStorePassword", TRUST_STORE_PASS);
            
            Properties properties = new Properties();
            properties.setProperty("sslMode", "VERIFY_IDENTITY");
            properties.put("user", DB_USER);
            properties.put("password", DB_PASSWORD);
            
     
            Connection connection = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                connection = DriverManager.getConnection("jdbc:mysql://mydatabase.123456789012.us-east-1.rds.amazonaws.com:3306",properties);
                stmt = connection.createStatement();
                rs=stmt.executeQuery("SELECT 1 from dual");
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                    }
                }
                if (stmt != null) {
                   try {
                        stmt.close();
                    } catch (SQLException e) {
                   }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
    }
```

**중요**  
데이터베이스 연결에서 SSL/TLS를 사용함을 확인하고 애플리케이션 트러스트 스토어를 업데이트한 후에는 데이터베이스에서 rds-ca-rsa2048-g1 인증서를 사용하도록 업데이트할 수 있습니다. 지침은 [DB 인스턴스또는 클러스터를 수정하여 CA 인증서 업데이트](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating)의 3단계를 참조하십시오.  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

# Amazon RDS for MySQL에 Kerberos 인증 사용
<a name="mysql-kerberos"></a>

 사용자가 MySQL DB 인스턴스에 접속하려고 할 때 Kerberos 인증을 사용하여 사용자를 인증할 수 있습니다. DB 인스턴스는 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD)와 함께 작동하여 Kerberos 인증을 활성화합니다. 사용자가 트러스팅 도메인에 가입된 MySQL DB 인스턴스로 인증하면 인증 요청이 전달됩니다. 전달된 요청은 Directory Service에서 생성한 도메인 디렉터리로 이동합니다.

 모든 자격 증명을 동일한 디렉터리에 보관하면 시간과 노력을 절약할 수 있습니다. 이 접근 방식의 경우, 여러 DB 인스턴스에 대한 자격 증명을 보관하고 관리할 수 있는 중앙 집중식 공간이 있습니다. 디렉터리를 사용하면 전체 보안 프로필을 향상할 수도 있습니다.

## 리전 및 버전 사용 가능 여부
<a name="mysql-kerberos-setting-up.RegionVersionAvailability"></a>

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. Kerberos 인증을 사용하는 Amazon RDS의 버전 및 리전 가용성에 대한 자세한 내용은 [Amazon RDS에서 Kerberos 인증을 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.md) 단원을 참조하세요.

## MySQL DB 인스턴스에 대해 Kerberos 인증 설정 개요
<a name="mysql-kerberos-setting-up-overview"></a>

 MySQL DB 인스턴스에 대해 Kerberos 인증을 설정하려면 다음과 같은 일반적인 단계를 완료하십시오(이후에 자세히 설명).

1.  AWS Managed Microsoft AD를 사용하여 AWS Managed Microsoft AD 디렉터리를 생성합니다. AWS Management Console, AWS CLI 또는 Directory Service를 사용하여 디렉터리를 생성할 수 있습니다. 이에 대한 자세한 내용은 *AWS Directory Service 관리 가이드*의 [AWS Managed Microsoft AD 디렉터리 생성](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html)을 참조하세요.

1.  관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 이 역할을 사용하여 Amazon RDS에서 디렉터리를 호출할 수 있습니다.

    역할이 액세스를 허용하려면 AWS 리전에서 AWS 계정의 AWS Security Token Service(AWS STS) 엔드포인트를 활성화해야 합니다. AWS STS 엔드포인트는 기본적으로 모든 AWS 리전에서 활성화되어 있으므로 별도의 조치 없이 사용할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 리전에서 AWS STS 활성화 및 비활성화](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate)를 참조하세요.

1.  Microsoft Active Directory 도구를 사용하여 AWS Managed Microsoft AD 디렉터리에서 사용자를 만들고 구성합니다. Active Directory에서 사용자를 생성하는 방법에 대한 자세한 내용은 *AWS Directory Service 관리 안내서*의 [AWS 관리형 Microsoft AD에서 사용자 및 그룹 관리](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)를 참조하세요.

1.  MySQL DB 인스턴스를 생성 또는 수정합니다. 생성 요청에 CLI 또는 RDS API를 사용하는 경우 `Domain` 파라미터를 사용해 도메인 식별자를 지정합니다. 디렉터리를 만들 때 생성된 `d-*` 식별자와 생성한 역할의 이름을 사용합니다.

    Kerberos 인증을 사용하도록 기존 MySQL DB 인스턴스를 수정하는 경우 DB 인스턴스에 대해 도메인 및 IAM 역할 파라미터를 설정합니다. 도메인 디렉터리와 동일한 VPC에서 DB 인스턴스를 찾습니다.

1.  Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. `CREATE USER` 절 `IDENTIFIED WITH 'auth_pam'`을 사용하여 MySQL에서 사용자를 생성합니다. 이 방법으로 생성한 사용자는 Kerberos 인증을 사용하여 MySQL DB 인스턴스에 로그인할 수 있습니다.

## MySQL DB 인스턴스에 대해 Kerberos 인증 설정
<a name="mysql-kerberos-setting-up"></a>

 AWS Managed Microsoft AD를 사용하여 MySQL DB 인스턴스에 대해 Kerberos 인증을 설정합니다. Kerberos 인증을 설정하려면 다음 단계를 수행하십시오.

### 1단계: AWS Managed Microsoft AD를 사용하여 디렉터리 생성
<a name="mysql-kerberos-setting-up.create-directory"></a>

 Directory Service는 AWS 클라우드에서 완전 관리형 Microsoft Active Directory를 생성합니다. AWS Managed Microsoft AD 디렉터리를 생성할 때 Directory Service에서 두 개의 도메인 컨트롤러 및 Domain Name System(DNS) 서버가 자동으로 생성됩니다. 디렉터리 서버는 VPC 내 다른 서브넷에서 생성됩니다. 이러한 중복으로 인해 장애가 발생해도 디렉터리에 액세스할 수 있습니다.

 AWS Managed Microsoft AD 디렉터리를 생성하는 경우 Directory Service에서 다음 작업이 자동으로 수행됩니다.
+  VPC 내에서 Active Directory를 설정합니다.
+  사용자 이름 Admin과 지정된 암호를 사용하여 디렉터리 관리자 계정을 생성합니다. 이 계정을 사용하여 디렉터리를 관리할 수 있습니다.
**참고**  
 이 암호를 저장하십시오. Directory Service에서는 저장되지 않습니다. 재설정은 가능하지만 검색은 불가능합니다.
+  디렉터리 컨트롤러에 대한 보안 그룹을 만듭니다.

 AWS Managed Microsoft AD를 시작하면 AWS에서 모든 디렉터리의 객체를 포함하는 OU(조직 단위)를 생성합니다. 이 OU는 디렉터리를 생성할 때 입력한 NetBIOS 이름을 가지고 있으며, 도메인 루트에 위치합니다. 도메인 루트는 AWS에서 소유하고 관리합니다.

 AWS Managed Microsoft AD 디렉터리를 사용해 생성한 관리자 계정은 OU의 가장 일반적인 관리 활동에 대한 권한을 갖습니다.
+  사용자 생성, 업데이트 또는 삭제 
+  도메인(예: 파일 또는 인쇄 서버)에 리소스를 추가한 다음 OU 내의 사용자에 해당 리소스에 대한 권한 할당 
+  추가 OU 및 컨테이너 생성 
+  권한 위임 
+  Active Directory 휴지통에서 삭제된 객체 복원 
+  Active Directory 웹 서비스에서 AD 및 DNS Windows PowerShell 모듈 실행 

 또한 admin 계정은 다음과 같은 도메인 차원 활동을 수행할 권한이 있습니다.
+  DNS 구성 관리(레코드, 영역 및 전달자 추가, 제거 또는 업데이트) 
+  DNS 이벤트 로그 보기 
+  보안 이벤트 로그 보기 

**AWS Managed Microsoft AD으로 디렉터리를 생성하려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/directoryservicev2/](https://console.aws.amazon.com/directoryservicev2/)에서 Directory Service 콘솔을 엽니다.

1.  탐색 창에서 **디렉터리**를 선택한 후 **디렉터리 설정**을 선택합니다.

1.  **AWS Managed Microsoft AD**를 선택합니다. AWS Managed Microsoft AD는 현재 Amazon RDS와 함께 사용할 수 있는 유일한 옵션입니다.

1.  다음 정보를 입력합니다.  
**디렉터리 DNS 이름**  
 디렉터리를 위한 정규화된 이름(예: **corp.example.com**)입니다.  
**디렉터리 NetBIOS 이름**  
 디렉터리의 짧은 이름(예: **CORP**)입니다.  
**디렉터리 설명**  
 (선택 사항) 디렉터리에 대한 설명입니다.  
**관리자 암호**  
 디렉터리 관리자의 암호입니다. 디렉터리 생성 프로세스에서는 사용자 이름 Admin과 이 암호를 사용하여 관리자 계정을 생성합니다.  
 디렉터리 관리자 암호는 "admin"이라는 단어를 포함할 수 없습니다. 암호는 대소문자를 구분하며 길이가 8\$164자 사이여야 합니다. 또한 다음 네 범주 중 세 개에 해당하는 문자를 1자 이상 포함해야 합니다.  
   +  소문자(a–z) 
   +  대문자(A–Z) 
   +  숫자(0–9) 
   +  영숫자 외의 특수 문자(\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**[Confirm Password]**  
 관리자 암호를 다시 입력했습니다.

1. **다음**을 선택합니다.

1.  **네트워킹** 섹션에 다음 정보를 입력하고 **다음**을 선택합니다.  
**VPC**  
 디렉터리에 대한 VPC입니다. 동일한 VPC에서 MySQL DB 인스턴스를 생성합니다.  
**서브넷**  
 디렉터리 서버에 대한 서브넷입니다. 두 서브넷이 서로 다른 가용 영역에 있어야 합니다.

1.  디렉터리 정보를 검토하고 필요한 사항을 변경합니다. 정보가 올바르면 **디렉터리 생성**을 선택합니다.  
![\[Directory Service 콘솔에서 디렉터리를 생성하는 동안 나타나는 검토 및 생성 창.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

 디렉터리를 생성하는 데 몇 분 정도 걸립니다. 디렉터리가 성공적으로 생성되면 **상태** 값이 **활성**으로 변경됩니다.

 디렉터리에 대한 정보를 보려면 디렉터리 목록에서 해당 디렉터리 이름을 선택합니다. MySQL DB 인스턴스를 생성하거나 수정할 때 이 값이 필요하므로 **디렉터리 ID** 값을 기록해 두십시오.

![\[디렉터리 ID가 있는 Directory Service 콘솔의 디렉터리 세부 정보 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


### 2단계: Amazon RDS에 사용할 IAM 역할 생성
<a name="mysql-kerberos-setting-up.CreateIAMRole"></a>

Amazon RDS에서 Directory Service를 호출하려면 관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 IAM 역할이 필요합니다. 이 역할을 사용하여 Amazon RDS에서 Directory Service를 호출할 수 있습니다.

AWS Management Console을 사용하여 DB 인스턴스를 생성할 때 콘솔 사용자에게 `iam:CreateRole` 권한이 있으면 콘솔에서 이 역할을 자동으로 생성합니다. 이 경우 역할 이름은 `rds-directoryservice-kerberos-access-role`입니다. 그렇지 않으면 IAM 역할을 수동으로 생성해야 합니다. 이 IAM 역할을 생성할 때 `Directory Service`를 선택하고 여기에 AWS 관리형 정책인 `AmazonRDSDirectoryServiceAccess`를 연결합니다.

서비스에 대한 IAM 역할 생성에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

**참고**  
RDS for SQL Server에 대한 Windows 인증에 사용되는 IAM 역할은 RDS for MySQL에 사용할 수 없습니다.

선택 사항으로 관리형 IAM 정책인 `AmazonRDSDirectoryServiceAccess`를 사용하는 대신 필요한 권한으로 정책을 생성할 수 있습니다. 이 경우 IAM 역할에 다음과 같은 IAM 신뢰 정책이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "directoryservice.rds.amazonaws.com",
          "rds.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

또한 역할에는 다음과 같은 IAM 역할 정책도 있어야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ds:DescribeDirectories",
        "ds:AuthorizeApplication",
        "ds:UnauthorizeApplication",
        "ds:GetAuthorizedApplicationDetails"
      ],
    "Effect": "Allow",
    "Resource": "*"
    }
  ]
}
```

------

### 3단계: 사용자 생성 및 구성
<a name="mysql-kerberos-setting-up.create-users"></a>

 Active Directory Users and Computers 도구를 사용하여 사용자를 생성할 수 있습니다. 이 도구는 Active Directory Domain Services 및 Active Directory Lightweight Directory Services 도구에 포함되어 있습니다. 사용자는 디렉터리에 액세스할 수 있는 개별 사용자 또는 개체를 나타냅니다.

 Directory Service 디렉터리에서 사용자를 생성하려면 Microsoft Windows를 기반으로 Amazon EC2 인스턴스에 연결해야 합니다. 이 인스턴스는 Directory Service 디렉터리의 멤버여야 하며 사용자를 생성할 수 있는 권한을 가진 사용자로 로그인해야 합니다. 자세한 내용은 *AWS Managed Microsoft AD Directory Service 관리 가이드*에서 [AWS의 사용자 및 그룹 관리](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/creating_ad_users_and_groups.html)를 참조하세요.

### 4단계: MySQL DB 인스턴스 생성 또는 수정
<a name="mysql-kerberos-setting-up.create-modify"></a>

디렉터리에서 사용할 MySQL DB 인스턴스를 생성하거나 수정합니다. 콘솔, CLI 또는 RDS API를 사용하여 DB 인스턴스를 디렉터리에 연결할 수 있습니다. 이 작업을 다음 중 한 가지 방법으로 수행할 수 있습니다.
+ 콘솔, [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 명령 또는 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 작업을 사용하여 새 MySQL DB 인스턴스를 생성합니다.

  지침은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
+ 콘솔, [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 명령 또는 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 작업을 사용하여 기존 MySQL DB 인스턴스를 수정합니다.

  지침은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+ 콘솔, [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 명령 또는 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 작업을 사용하여 DB 스냅샷에서 MySQL DB 인스턴스를 복원합니다.

  지침은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.
+ 콘솔, [restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 명령 또는 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 작업을 사용하여 MySQL DB 인스턴스를 특정 시점으로 복원합니다.

  지침은 [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md) 섹션을 참조하세요.

Kerberos 인증은 VPC의 MySQL DB 인스턴스에 대해서만 지원됩니다. DB 인스턴스는 디렉터리와 동일한 VPC 또는 다른 VPC에 있을 수 있습니다. DB 인스턴스가 디렉터리와 통신할 수 있도록 DB 인스턴스는 디렉터리의 VPC 내 송신을 허용하는 보안 그룹을 사용해야 합니다.

콘솔을 사용하여 DB 인스턴스를 생성, 수정 또는 복원하는 경우 **데이터베이스 인증** 섹션에서 **암호 및 Kerberos 인증**을 선택합니다. **디렉터리 찾아보기**를 선택한 다음 디렉터리를 선택하거나 **새 디렉터리 생성**을 선택합니다.

![\[암호 및 Kerberos 인증이 선택되어 있는 Amazon RDS 콘솔의 데이터베이스 인증 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/kerberos-authentication.png)


AWS CLI 또는 RDS API를 사용할 경우 DB 인스턴스를 디렉터리에 연결합니다. DB 인스턴스에서 생성된 도메인 디렉터리를 사용하려면 다음과 같은 파라미터가 필요합니다.
+ `--domain` 파라미터의 경우 디렉터리를 만들 때 생성된 도메인 식별자("d-\$1" 식별자)를 사용하세요.
+ `--domain-iam-role-name` 파라미터의 경우 귀하가 생성한, 관리형 IAM 정책 `AmazonRDSDirectoryServiceAccess`를 사용하는 역할을 사용하십시오.

 예를 들어 다음 CLI 명령에서는 디렉터리를 사용하도록 DB 인스턴스를 수정합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --domain d-ID \
    --domain-iam-role-name role-name
```

Windows의 경우:

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --domain d-ID ^
    --domain-iam-role-name role-name
```

**중요**  
DB 인스턴스를 수정하여 Kerberos 인증을 활성화하는 경우에는 변경 후 DB 인스턴스를 재부팅하세요.

### 5단계: Kerberos 인증 MySQL 로그인 생성
<a name="mysql-kerberos-setting-up.create-logins"></a>

 다른 DB 인스턴스의 경우와 마찬가지로 Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. DB 인스턴스는 AWS Managed Microsoft AD 도메인에 조인됩니다. 따라서 도메인 내 Microsoft Active Directory 사용자에서 MySQL 로그인 및 사용자를 프로비저닝할 수 있습니다. 데이터베이스 권한은 이러한 로그인에서 부여 및 취소되는 표준 MySQL 권한을 통해 관리됩니다.

 Active Directory 사용자가 MySQL에서 인증을 하도록 허용할 수 있습니다. 이렇게 하려면 먼저 다른 DB 인스턴스의 경우와 마찬가지로 Amazon RDS 마스터 사용자 자격 증명을 사용하여 MySQL DB 인스턴스에 연결합니다. 로그인한 후에는 다음 명령을 실행하여 MySQL에서 플러그형 인증 모듈(PAM)을 사용하여 외부에서 인증된 사용자를 생성합니다. `testuser`를 사용자 이름으로 바꿉니다.

```
CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';
```

 이제 도메인의 사용자(사람 및 애플리케이션)는 Kerberos 인증을 사용하여 도메인이 조인된 클라이언트 머신에서 DB 인스턴스에 연결할 수 있습니다.

**중요**  
PAM 인증을 사용할 때는 클라이언트가 SSL/TLS 연결을 사용하는 것이 좋습니다. SSL/TLS 연결을 사용하지 않는 경우 암호가 일반 텍스트로 전송될 수도 있습니다. AD 사용자의 SSL/TLS 암호화된 연결을 사용하려면 다음 명령을 실행하고 `testuser`를 사용자 이름으로 교체합니다.  

```
ALTER USER 'testuser'@'%' REQUIRE SSL;
```
자세한 내용은 [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md) 섹션을 참조하세요.

## 도메인에서 DB 인스턴스 관리
<a name="mysql-kerberos-managing"></a>

 CLI 또는 RDS API를 사용하여 DB 인스턴스 및 DB 인스턴스와 관리형 Active Directory의 관계를 관리할 수 있습니다. 예를 들어 Active Directory를 연결하여 Kerberos 인증을 활성화하고 Active Directory의 연결을 해제하여 Kerberos 인증을 비활성화할 수 있습니다. 또한 한 Active Directory에서 외부 인증할 DB 인스턴스를 다른 도메인으로 이동시킬 수 있습니다.

 예를 들어 Amazon RDS API를 사용하여 다음을 수행할 수 있습니다.
+  실패한 멤버십에 대해 Kerberos 인증 활성화를 다시 시도하려면 `ModifyDBInstance` API 작업을 사용하여 현재 멤버십의 디렉터리 ID를 지정합니다.
+  멤버십에 대한 IAM 역할 이름을 업데이트하려면 `ModifyDBInstance` API 작업을 사용하고 현재 멤버십의 디렉터리 ID 및 새 IAM 역할을 지정합니다.
+  DB 인스턴스에서 Kerberos 인증을 비활성화하려면 `ModifyDBInstance` API 작업을 사용하여 `none`을 도메인 파라미터로 지정합니다.
+  한 도메인에서 다른 도메인으로 DB 인스턴스를 이동하려면 `ModifyDBInstance` API 작업을 사용하여 새 도메인의 도메인 식별자를 도메인 파라미터로 지정합니다.
+  각 DB 인스턴스의 멤버십을 나열하려면 `DescribeDBInstances` API 작업을 사용합니다.

### 도메인 멤버십 이해
<a name="mysql-kerberos-managing.understanding"></a>

 DB 인스턴스를 생성하거나 수정하고 나면 해당 인스턴스는 도메인의 멤버가 됩니다. [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI 명령을 실행하여 DB 인스턴스에 대한 도메인 멤버십의 상태를 확인할 수 있습니다. DB 인스턴스의 상태는 다음 중 한 가지가 될 수 있습니다.
+  `kerberos-enabled` - DB 인스턴스에 Kerberos 인증이 활성화되어 있습니다.
+  `enabling-kerberos` - AWS에서 이 DB 인스턴스에 대한 Kerberos 인증 활성화를 진행 중입니다.
+  `pending-enable-kerberos` – 이 DB 인스턴스에 대한 Kerberos 인증 활성화가 보류 중입니다.
+  `pending-maintenance-enable-kerberos` - AWS에서 예약된 다음 유지 관리 기간에 DB 인스턴스에 대한 Kerberos 인증을 활성화하려 합니다.
+  `pending-disable-kerberos` – 이 DB 인스턴스에 대한 Kerberos 인증 비활성화가 보류 중입니다.
+  `pending-maintenance-disable-kerberos` - AWS에서 예약된 다음 유지 관리 기간에 DB 인스턴스에 대한 Kerberos 인증을 비활성화하려 합니다.
+  `enable-kerberos-failed` - 구성 문제로 인해 AWS에서 DB 인스턴스에 대해 Kerberos 인증을 활성화하지 못했습니다. DB 인스턴스 modify 명령을 다시 발행하기 전에 구성을 확인하고 수정합니다.
+  `disabling-kerberos` - AWS에서 이 DB 인스턴스에 대한 Kerberos 인증 비활성화를 진행 중입니다.

 네트워크 연결 문제 또는 잘못된 IAM 역할로 인해 Kerberos 인증 활성화 요청이 실패할 수 있습니다. 예를 들어 DB 인스턴스를 생성하거나 기존 DB 인스턴스를 수정하는데 Kerberos 인증을 활성화하려는 시도가 실패한다고 가정합니다. 이 경우 modify 명령을 다시 발행하거나 새로 생성된 DB 인스턴스를 수정하여 도메인에 조인합니다.

## Kerberos 인증을 사용하여 MySQL에 연결
<a name="mysql-kerberos-connecting"></a>

 Kerberos 인증을 사용하여 MySQL에 연결하려면 Kerberos 인증 유형을 사용하여 로그인을 해야 합니다.

 Kerberos 인증을 사용하여 연결할 수 있는 데이터베이스 사용자를 생성하려면 `IDENTIFIED WITH` 문에서 `CREATE USER` 절을 사용합니다. 지침은 [5단계: Kerberos 인증 MySQL 로그인 생성](#mysql-kerberos-setting-up.create-logins) 섹션을 참조하세요.

오류를 방지하려면 MariaDB `mysql` 클라이언트를 사용합니다. MariaDB 소프트웨어는 [https://downloads.mariadb.org/](https://downloads.mariadb.org/)에서 다운로드할 수 있습니다.

명령 프롬프트에서 MySQL DB 인스턴스와 연결된 엔드포인트 중 하나에 연결합니다. [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md)의 일반 절차를 따르십시오. 암호를 입력하라는 메시지가 표시되면 해당 사용자 이름과 연결된 Kerberos 암호를 입력합니다.

## MySQL DB 인스턴스 복원 및 도메인에 추가
<a name="mysql-kerberos-restoring"></a>

 MySQL DB 인스턴스에서 DB 스냅샷을 복원하거나 특정 시점으로 복원을 수행한 후 이를 도메인에 추가할 수 있습니다. DB 인스턴스가 복원된 후 [4단계: MySQL DB 인스턴스 생성 또는 수정](#mysql-kerberos-setting-up.create-modify)에 설명된 프로세스를 사용하여 DB 인스턴스를 도메인에 추가하도록 인스턴스를 수정합니다.

## Kerberos 인증 MySQL 제한 사항
<a name="mysql-kerberos.limitations"></a>

 MySQL용 Kerberos 인증에는 다음과 같은 제한이 적용됩니다.
+ AWS Managed Microsoft AD만 지원됩니다. 하지만 RDS for MySQL DB 인스턴스에 가입하여 동일한 AWS 리전의 서로 다른 계정이 소유한 Managed Microsoft AD 도메인을 공유할 수 있습니다.
+  기능을 활성화한 후에는 DB 인스턴스를 재부팅해야 합니다.
+  도메인 이름 길이는 61자를 초과할 수 없습니다.
+  Kerberos 인증과 IAM 인증을 동시에 활성화할 수 없습니다. MySQL DB 인스턴스에 대해 하나의 인증 방법을 선택하거나 다른 방법을 선택합니다.
+  기능을 활성화한 후에는 DB 인스턴스 포트를 수정하지 마십시오.
+  읽기 전용 복제본에는 Kerberos 인증을 사용하지 마십시오.
+ Kerberos 인증을 사용하는 MySQL DB 인스턴스에 대해 자동 마이너 버전 업그레이드를 설정한 경우 Kerberos 인증을 해제했다가 자동 업그레이드 후 다시 설정해야 합니다. 자동 마이너 버전 업그레이드에 대한 자세한 내용은 [RDS for MySQL 마이너 버전 자동 업그레이드](USER_UpgradeDBInstance.MySQL.Minor.md) 섹션을 참조하세요.
+  이 기능이 활성화된 DB 인스턴스를 삭제하려면 먼저 이 기능을 비활성화합니다. 이렇게 하려면 DB 인스턴스에 대해 `modify-db-instance` CLI 명령을 사용하고 `--domain` 파라미터에 대해 `none`을 지정합니다.

   CLI 또는 RDS API를 사용하여 이 기능이 활성화된 DB 인스턴스를 삭제하는 경우 지연이 발생할 수 있습니다.
+ RDS for MySQL은 온프레미스 또는 자체 호스팅 AD와 AWS Managed Microsoft AD 간의 포리스트 신뢰 관계에서 Kerberos 인증을 지원하지 않습니다.

# Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선
<a name="rds-optimized-reads"></a>

Amazon RDS Optimized Reads로 RDS for MySQL의 쿼리 처리 속도를 높일 수 있습니다. RDS Optimized Reads를 사용하는 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터는 이를 사용하지 않는 DB 인스턴스 또는 클러스터에 비해 쿼리 처리 속도가 최대 2배 더 빠릅니다.

**Topics**
+ [

## RDS Optimized Reads 개요
](#rds-optimized-reads-overview)
+ [

## RDS Optimized Reads 사용 사례
](#rds-optimized-reads-use-cases)
+ [

## RDS Optimized Reads 모범 사례
](#rds-optimized-reads-best-practices)
+ [

## RDS Optimized Reads 사용
](#rds-optimized-reads-using)
+ [

## RDS Optimized Reads를 사용하는 DB 인스턴스 모니터링
](#rds-optimized-reads-monitoring)
+ [

## RDS Optimized Reads 제한 사항
](#rds-optimized-reads-limitations)

## RDS Optimized Reads 개요
<a name="rds-optimized-reads-overview"></a>

RDS Optimized Reads가 켜져 있는 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 사용하면 인스턴스 스토어를 사용하여 더 빠른 쿼리 성능을 얻을 수 있습니다. *인스턴스 스토어*는 DB 인스턴스 또는 다중 AZ DB 클러스터에 블록 수준의 임시 스토리지를 제공합니다. 스토리지는 호스트 서버에 물리적으로 연결된 NVMe(Non-Volatile Memory Express) 솔리드 스테이트 드라이브(SSD)에 있습니다. 이 스토리지는 짧은 지연 시간, 높은 임의 I/O 성능, 높은 순차 읽기 처리량(throughput)에 최적화되어 있습니다.

RDS Optimized Reads는 DB 인스턴스 또는 다중 AZ DB 클러스터가 db.m5d 또는 db.m6gd 같은 DB 인스턴스 클래스를 인스턴스 스토어와 함께 사용할 때 기본적으로 켜집니다. RDS Optimized Reads를 사용하면 일부 임시 객체가 인스턴스 스토어에 저장됩니다. 이러한 임시 객체에는 내부 임시 파일, 내부 온디스크 임시 테이블, 메모리 맵 파일, 이진 로그(binlog) 캐시 파일이 포함됩니다. 인스턴스 스토어 유형에 대한 자세한 내용은 *Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서*의 [Amazon EC2 인스턴스 스토어](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) 섹션을 참조하세요.

쿼리 처리를 위해 MySQL에서 임시 객체를 생성하는 워크로드는 인스턴스 스토어를 활용하여 쿼리를 더 빠르게 처리할 수 있습니다. 이러한 유형의 워크로드에는 정렬, 해시 집계, 고부하 조인, CTE(Common Table Expression) 및 인덱싱되지 않은 열에 대한 쿼리가 포함됩니다. 이러한 인스턴스 스토어 볼륨은 영구 Amazon EBS 스토리지에 사용되는 스토리지 구성과 관계없이 더 높은 IOPS와 성능을 제공합니다. RDS Optimized Reads는 임시 객체에 대한 작업을 인스턴스 스토어로 오프로드하므로 이제 영구 객체에 대한 작업에 영구 스토리지(Amazon EBS)의 초당 입출력 작업 처리량(IOPS) 또는 처리량(throughput)을 사용할 수 있습니다. 이러한 작업에는 일반 데이터 파일 읽기 및 쓰기와 플러싱 및 버퍼 병합 삽입과 같은 백그라운드 엔진 작업이 포함됩니다.

**참고**  
수동 및 자동 RDS 스냅샷에는 영구 객체를 위한 엔진 파일만 포함됩니다. 인스턴스 스토어에서 생성된 임시 객체는 RDS 스냅샷에 포함되지 않습니다.

## RDS Optimized Reads 사용 사례
<a name="rds-optimized-reads-use-cases"></a>

쿼리 실행을 위해 내부 테이블이나 파일 같은 임시 객체에 크게 의존하는 워크로드가 있는 경우 RDS Optimized Reads를 켜는 것이 좋습니다. RDS Optimized Reads의 사용 사례는 다음과 같습니다.
+ 복잡한 CTE(Common Table Expression), 파생된 테이블, 그룹화 작업을 사용하여 분석 쿼리를 실행하는 애플리케이션
+ 최적화되지 않은 쿼리로 많은 읽기 트래픽을 처리하는 읽기 전용 복제본
+ `GROUP BY` 및 `ORDER BY` 절이 있는 쿼리와 같이 복잡한 작업이 필요한 온디맨드 또는 동적 보고 쿼리를 실행하는 애플리케이션
+ 쿼리 처리를 위해 내부 임시 테이블을 사용하는 워크로드

  엔진 상태 변수 `created_tmp_disk_tables`를 모니터링하여 DB 인스턴스에 생성된 디스크 기반 임시 테이블의 수를 확인할 수 있습니다.
+ 직접 또는 절차에 따라 대형 임시 테이블을 생성하여 중간 결과를 저장하는 애플리케이션
+ 인덱싱되지 않은 열에서 그룹화 또는 정렬 작업을 수행하는 데이터베이스 쿼리

## RDS Optimized Reads 모범 사례
<a name="rds-optimized-reads-best-practices"></a>

RDS Optimized Reads에 대한 다음 모범 사례를 따릅니다.
+ 실행 중 인스턴스 스토어가 가득 차서 쿼리가 실패하는 경우에 대비하여 읽기 전용 쿼리의 재시도 로직을 추가합니다.
+ CloudWatch 지표 `FreeLocalStorage`를 사용하여 인스턴스 스토어에서 사용 가능한 스토리지 공간을 모니터링합니다. DB 인스턴스의 워크로드로 인해 인스턴스 스토어가 한도에 도달하면 더 큰 DB 인스턴스 클래스를 사용하도록 DB 인스턴스를 수정하세요.
+ DB 인스턴스 또는 다중 AZ DB 클러스터의 메모리가 충분하지만 여전히 인스턴스 스토어의 스토리지 한도에 도달하면 `binlog_cache_size` 값을 늘려 세션별 binlog 항목을 메모리에 유지합니다. 이 구성은 binlog 항목을 디스크의 임시 binlog 캐시 파일에 쓰는 것을 방지합니다.

  `binlog_cache_size` 파라미터는 세션별로 다릅니다. 새 세션마다 값을 변경할 수 있습니다. 이 파라미터를 설정하면 피크 워크로드 중에 DB 인스턴스의 메모리 사용률을 높일 수 있습니다. 따라서 애플리케이션의 워크로드 패턴과 DB 인스턴스의 가용 메모리를 기반으로 파라미터 값을 높이는 것을 고려해 보세요.
+ MySQL 8.0 버전 이하에서는 `binlog_format` 파라미터에 기본값인 `MIXED`를 사용합니다. 트랜잭션 크기에 따라 `binlog_format`을 `ROW`로 설정하면 인스턴스 스토어에 큰 binlog 캐시 파일이 생성될 수 있습니다. MySQL 8.4 이상의 경우 `binlog_format` 파라미터에 기본값인 `ROW`를 사용합니다.
+ [internal\$1tmp\$1mem\$1storage\$1engine](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_internal_tmp_mem_storage_engine) 파라미터를 `TempTable`로 설정하고, [temptable\$1max\$1mmap](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_temptable_max_mmap) 파라미터를 인스턴스 스토어의 사용 가능한 스토리지 크기에 맞게 설정합니다.
+ 단일 트랜잭션에서 대량 변경을 수행하지 마세요. 이러한 유형의 트랜잭션은 인스턴스 스토어에 대용량 binlog 캐시 파일을 생성할 수 있으며, 인스턴스 스토어가 가득 차면 문제가 발생할 수 있습니다. binlog 캐시 파일의 스토리지 사용을 최소화하려면 쓰기를 여러 개의 작은 트랜잭션으로 분할하는 것이 좋습니다.
+ `ABORT_SERVER` 파라미터에 기본값 `binlog_error_action`를 사용합니다. 이렇게 하면 백업이 활성화된 DB 인스턴스에서 이진 로깅 문제를 방지할 수 있습니다.

## RDS Optimized Reads 사용
<a name="rds-optimized-reads-using"></a>

단일 AZ DB 인스턴스 배포, 다중 AZ DB 인스턴스 배포 또는 다중 AZ DB 클러스터 배포에서 다음 DB 인스턴스 클래스 중 하나를 사용하여 RDS for MySQL DB 인스턴스를 프로비저닝하면 DB 인스턴스는 자동으로 RDS Optimized Reads를 사용합니다.

RDS Optimized Read를 켜려면 다음 중 하나를 수행합니다.
+ 이러한 DB 인스턴스 클래스 중 하나를 사용하여 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 생성합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 단원을 참조하십시오.
+ 이러한 DB 인스턴스 클래스 중 하나를 사용하여 기존 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 수정합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

RDS Optimized Reads는 로컬 NVMe SSD 스토리지가 있는 DB 인스턴스 클래스 중 하나 이상이 지원되는 모든 AWS 리전 RDS에서 사용 가능합니다. DB 인스턴스 클래스에 대한 자세한 내용은 [DB 인스턴스 클래스](Concepts.DBInstanceClass.md) 섹션을 참조하세요.

DB 인스턴스 클래스 가용성은 AWS 리전에 따라 다릅니다. 특정 AWS 리전 클래스에서 DB 인스턴스 클래스가 지원되는지 여부를 확인하려면 [AWS 리전에서 DB 인스턴스 클래스 지원 확인](Concepts.DBInstanceClass.RegionSupport.md)를 참조하세요.

RDS Optimized Reads를 사용하지 않으려면 기능을 지원하는 DB 인스턴스 클래스를 사용하지 않도록 DB 인스턴스 또는 다중 AZ DB 클러스터를 수정하세요.

## RDS Optimized Reads를 사용하는 DB 인스턴스 모니터링
<a name="rds-optimized-reads-monitoring"></a>

다음 CloudWatch 지표를 사용하여 RDS Optimized Reads를 사용하는 DB 인스턴스를 모니터링할 수 있습니다.
+ `FreeLocalStorage`
+ `ReadIOPSLocalStorage`
+ `ReadLatencyLocalStorage`
+ `ReadThroughputLocalStorage`
+ `WriteIOPSLocalStorage`
+ `WriteLatencyLocalStorage`
+ `WriteThroughputLocalStorage`

이러한 지표는 사용 가능한 인스턴스 스토어 스토리지, IOPS 및 처리량(throughput)에 대한 데이터를 제공합니다. 이러한 지표에 대한 자세한 내용은 [Amazon RDS에 대한 Amazon CloudWatch 지표](rds-metrics.md#rds-cw-metrics-instance) 섹션을 참조하세요.

## RDS Optimized Reads 제한 사항
<a name="rds-optimized-reads-limitations"></a>

RDS Optimized Reads에는 다음과 같은 제한 사항이 적용됩니다.
+ RDS Optimized Reads는 다음 버전에서 지원됩니다.
  + RDS for MySQL 8.0.28 이상 메이저 및 마이너 버전

  RDS for MySQL 버전에 대한 자세한 내용은 [Amazon RDS의 MySQL 버전](MySQL.Concepts.VersionMgmt.md) 섹션을 참조하세요.
+ RDS Optimized Reads를 지원하는 DB 인스턴스 클래스에서는 임시 객체의 위치를 영구 스토리지(Amazon EBS)로 변경할 수 없습니다.
+ DB 인스턴스에서 이진 로깅이 활성화된 경우 최대 트랜잭션 크기는 인스턴스 스토어의 크기에 의해 제한됩니다. MySQL에서 `binlog_cache_size` 값보다 더 많은 스토리지가 필요한 세션은 인스턴스 스토어에 생성된 임시 binlog 캐시 파일에 트랜잭션 변경 사항을 기록합니다.
+ 인스턴스 스토어가 가득 차면 트랜잭션이 실패할 수 있습니다.

# RDS Optimized Writes for MySQL을 통한 쓰기 성능 개선
<a name="rds-optimized-writes"></a>

RDS Optimized Writes for MySQL을 사용하여 쓰기 트랜잭션의 성능을 개선할 수 있습니다. RDS for MySQL 데이터베이스에서 RDS Optimized Writes를 사용하는 경우 쓰기 트랜잭션 처리량(throughput)을 최대 2배까지 높일 수 있습니다.

**Topics**
+ [

## RDS Optimized Writes 개요
](#rds-optimized-writes-overview)
+ [

## RDS Optimized Writes 사용
](#rds-optimized-writes-using)
+ [

## 기존 데이터베이스에서 RDS 최적화된 쓰기 활성화
](#rds-optimized-writes-modify-enable)
+ [

## RDS Optimized Writes 제한 사항
](#rds-optimized-writes-limitations)

## RDS Optimized Writes 개요
<a name="rds-optimized-writes-overview"></a>

RDS 최적화된 쓰기를 켜면 이중 쓰기 버퍼를 사용할 필요 없이 내구성이 뛰어난 스토리지로 데이터를 플러싱할 때 RDS for MySQL 데이터베이스가 데이터를 한 번만 씁니다. 데이터베이스는 향상된 성능과 함께 안정적인 데이터베이스 트랜잭션을 위한 ACID 속성 보호를 지속적으로 제공합니다.

MySQL 같은 관계형 데이터베이스는 신뢰할 수 있는 데이터베이스 트랜잭션을 위한 *ACID(원자성, 일관성, 격리, 내구성) 속성*을 제공합니다. 이러한 속성을 제공하기 위해 MySQL은 *이중 쓰기 버퍼*라는 데이터 스토리지 영역을 사용하여 부분 페이지 쓰기 오류를 방지합니다. 이러한 오류는 정전의 경우처럼 데이터베이스에서 페이지를 업데이트하는 동안 하드웨어 장애가 있을 때 발생합니다. MySQL 데이터베이스는 부분 페이지 쓰기를 감지하고 이중 쓰기 버퍼에 있는 페이지 복사본으로 복구할 수 있습니다. 이 기술은 보호 기능을 제공하지만 추가 쓰기 작업도 초래합니다. MySQL 이중 쓰기 버퍼에 대한 자세한 내용은 MySQL 설명서의 [Doublewrite Buffer](https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html)를 참조하세요.

Amazon RDS Optimized Writes를 켜면 이중 쓰기 버퍼를 사용하지 않고 내구성이 뛰어난 스토리지로 데이터를 플러싱할 때 RDS for MySQL 데이터베이스가 데이터를 한 번만 씁니다. RDS Optimized Writes는 RDS for MySQL 데이터베이스에서 쓰기가 많은 워크로드를 실행하는 경우에 유용합니다. 쓰기 작업이 많은 데이터베이스의 예로는 디지털 결제, 금융 거래, 게임 애플리케이션을 지원하는 데이터베이스가 있습니다.

이러한 데이터베이스는 AWS Nitro System을 사용하는 DB 인스턴스 클래스에서 실행됩니다. 이러한 시스템의 하드웨어 구성으로 인해 데이터베이스는 한 단계로 안정적이고 내구성 있게 16KiB 페이지를 데이터 파일에 직접 쓸 수 있습니다. AWS Nitro 시스템은 RDS Optimized Writes를 가능하게 합니다.

새 데이터베이스 매개 변수 `rds.optimized_writes`를 설정하여 RDS for MySQL 데이터베이스의 RDS Optimized Writes 기능을 제어할 수 있습니다. RDS for MySQL 버전 8.0 및 RDS for MySQL 버전 8.4의 DB 파라미터 그룹에서 이 파라미터에 액세스하세요. 다음 값을 사용하여 파라미터를 설정합니다.
+ `AUTO` - 데이터베이스에서 지원하는 경우 RDS Optimized Writes를 켭니다. 데이터베이스에서 지원하지 않는 경우 RDS Optimized Writes를 해제합니다. 이 설정이 기본값입니다.
+ `OFF` - 데이터베이스에서 지원하더라도 RDS Optimized Writes를 해제합니다.

엔진 버전, DB 인스턴스 클래스 및/또는 파일 시스템 형식이 RDS 최적화된 쓰기를 지원하지 않는 기존 데이터베이스가 있는 경우 블루/그린 배포를 생성하여 이 기능을 활성화할 수 있습니다. 자세한 내용은 [기존 데이터베이스에서 RDS 최적화된 쓰기 활성화](#rds-optimized-writes-modify-enable) 섹션을 참조하세요.

RDS Optimized Writes를 사용하도록 구성된 RDS for MySQL 데이터베이스를 해당 기능을 지원하지 않는 DB 인스턴스 클래스로 마이그레이션하는 경우, RDS는 데이터베이스의 RDS Optimized Writes를 자동으로 해제합니다.

RDS Optimized Writes가 해제된 경우 데이터베이스는 MySQL 이중 쓰기 버퍼를 사용합니다.

RDS for MySQL 데이터베이스에서 RDS Optimized Writes를 사용하고 있는지 확인하려면 데이터베이스 `innodb_doublewrite` 파라미터의 현재 값을 확인하세요. 데이터베이스에서 RDS Optimized Writes를 사용 중인 경우 이 파라미터는 `FALSE`(`0`)로 설정됩니다.

## RDS Optimized Writes 사용
<a name="rds-optimized-writes-using"></a>

RDS 콘솔, AWS CLI 또는 RDS API를 사용하여 RDS for MySQL 데이터베이스를 생성할 때 RDS Optimized Writes를 켤 수 있습니다. 데이터베이스 생성 중에 다음 두 가지 조건이 모두 적용되는 경우 RDS Optimized Writes가 자동으로 켜집니다.
+ RDS Optimized Writes를 지원하는 DB 엔진 버전과 DB 인스턴스 클래스를 지정합니다.
  + RDS Optimized Writes는 RDS for MySQL 버전 8.0.30 이상에서 지원됩니다. RDS for MySQL 버전에 대한 자세한 내용은 [Amazon RDS의 MySQL 버전](MySQL.Concepts.VersionMgmt.md) 섹션을 참조하세요.
  + RDS Optimized Writes는 다음 DB 인스턴스 클래스를 사용하는 RDS for MySQL 데이터베이스에서 지원됩니다.
    + db.m7i
    + db.m7g
    + db.m6g
    + db.m6gd
    + db.m6i
    + db.m5
    + db.m5d
    + db.r7i
    + db.r7g
    + db.r6g
    + db.r6gd
    + db.r6i
    + db.r5
    + db.r5b
    + db.r5d
    + db.x2idn
    + db.x2iedn

    DB 인스턴스 클래스에 대한 자세한 내용은 [DB 인스턴스 클래스](Concepts.DBInstanceClass.md) 섹션을 참조하세요.

    DB 인스턴스 클래스 가용성은 AWS 리전에 따라 다릅니다. 특정 AWS 리전 클래스에서 DB 인스턴스 클래스가 지원되는지 여부를 확인하려면 [AWS 리전에서 DB 인스턴스 클래스 지원 확인](Concepts.DBInstanceClass.RegionSupport.md)를 참조하세요.

    RDS 최적화된 쓰기를 지원하는 DB 인스턴스 클래스로 데이터베이스를 업그레이드하려면 블루/그린 배포를 생성하면 됩니다. 자세한 내용은 [기존 데이터베이스에서 RDS 최적화된 쓰기 활성화](#rds-optimized-writes-modify-enable) 섹션을 참조하세요.
+ 데이터베이스에 연결된 파라미터 그룹에서는 `rds.optimized_writes` 파라미터가 `AUTO`로 설정됩니다. 기본 파라미터 그룹에서는 이 파라미터가 항상 `AUTO`로 설정됩니다.

RDS Optimized Writes를 지원하는 DB 엔진 버전과 DB 인스턴스 클래스를 사용하고 싶지만 이 기능은 사용하고 싶지 않을 경우, 데이터베이스를 생성할 때 사용자 지정 파라미터 그룹을 지정하세요. 이 파라미터 그룹에서 `rds.optimized_writes` 파라미터를 `OFF`로 설정합니다. 나중에 데이터베이스에서 RDS Optimized Writes를 사용하도록 하려면 파라미터를 `AUTO`로 설정하여 켤 수 있습니다. 사용자 지정 파라미터 그룹 및 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 섹션을 참조하세요.

DB 인스턴스 생성에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.

### 콘솔
<a name="rds-optimized-writes-using-console"></a>

RDS 콘솔을 사용하여 RDS for MySQL 데이터베이스를 생성할 때 RDS Optimized Writes를 지원하는 DB 엔진 버전 및 DB 인스턴스 클래스를 필터링할 수 있습니다. 필터를 켜면 사용 가능한 DB 엔진 버전 및 DB 인스턴스 클래스 중에서 선택할 수 있습니다.

RDS Optimized Writes를 지원하는 DB 엔진 버전을 선택하려면 **엔진 버전**에서 이를 지원하는 RDS for MySQL DB 엔진 버전을 필터링한 다음 버전을 선택합니다.

![\[엔진 버전에 대해 Amazon RDS 최적화된 쓰기 필터가 켜져 있는 엔진 옵션 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-version-filter.png)


**인스턴스 구성** 섹션에서 RDS Optimized Writes를 지원하는 DB 인스턴스 클래스를 필터링한 다음 DB 인스턴스 클래스를 선택합니다.

![\[DB 인스턴스 클래스에 대해 Amazon RDS 최적화된 쓰기 필터가 켜져 있는 인스턴스 구성 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-class-filter.png)


이러한 선택을 완료한 후 요구 사항에 맞는 다른 설정을 선택하고 콘솔을 사용하여 RDS for MySQL 데이터베이스 생성을 완료할 수 있습니다.

### AWS CLI
<a name="rds-optimized-writes-using-cli"></a>

AWS CLI를 사용하여 DB 인스턴스를 만들려면 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 명령을 실행합니다. `--engine-version` 및 `--db-instance-class` 값이 RDS Optimized Writes를 지원하는지 확인하세요. 또한 DB 인스턴스에 연결된 파라미터 그룹에서 `rds.optimized_writes` 파라미터가 `AUTO`로 설정되어 있는지 확인합니다. 다음 예제에서는 기본 파라미터 그룹을 DB 인스턴스와 연결합니다.

**Example RDS Optimized Writes를 사용하는 DB 인스턴스 생성**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mysql \
4.     --engine-version 8.0.30 \
5.     --db-instance-class db.r5b.large \
6.     --manage-master-user-password \
7.     --master-username admin \
8.     --allocated-storage 200
```
Windows의 경우:  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mysql ^
4.     --engine-version 8.0.30 ^
5.     --db-instance-class db.r5b.large ^
6.     --manage-master-user-password ^
7.     --master-username admin ^
8.     --allocated-storage 200
```

### RDS API
<a name="rds-optimized-writes-using-api"></a>

[CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 작업을 사용하여 DB 인스턴스를 생성할 수 있습니다. 이 작업을 사용할 경우 `EngineVersion` 및 `DBInstanceClass` 값이 RDS Optimized Writes를 지원하는지 확인하세요. 또한 DB 인스턴스에 연결된 파라미터 그룹에서 `rds.optimized_writes` 파라미터가 `AUTO`로 설정되어 있는지 확인합니다.

## 기존 데이터베이스에서 RDS 최적화된 쓰기 활성화
<a name="rds-optimized-writes-modify-enable"></a>

RDS 최적화된 쓰기를 켜도록 기존 RDS for MySQL 데이터베이스를 수정하려면 지원되는 DB 엔진 버전 및 DB 인스턴스 클래스로 데이터베이스가 생성된 상태여야 합니다. 또한 RDS 최적화된 쓰기가 출시된 2022년 11월 27일 **이후에 생성한 데이터베이스여야 합니다. 필요한 기본 파일 시스템 구성이 릴리스 전에 생성된 데이터베이스의 구성과 호환되지 않기 때문입니다. 이러한 조건이 충족되면 `rds.optimized_writes` 파라미터를 `AUTO`로 설정하여 RDS 최적화된 쓰기를 활성화할 수 있습니다.

지원되는 엔진 버전, 인스턴스 클래스 또는 파일 시스템 구성으로 데이터베이스를 **생성하지 않은 경우 RDS 블루/그린 배포를 사용하여 지원되는 구성으로 마이그레이션할 수 있습니다. 블루/그린 배포를 생성하는 동안 다음을 수행하세요.
+ **그린 데이터베이스에서 Optimized Writes 활성화**를 선택하고 RDS 최적화된 쓰기를 지원하는 엔진 버전과 DB 인스턴스 클래스를 지정합니다. 지원되는 엔진 버전과 인스턴스 클래스의 목록은 [RDS Optimized Writes 사용](#rds-optimized-writes-using) 섹션을 참조하세요.
+ **스토리지**에서 **스토리지 파일 시스템 구성 업그레이드**를 선택합니다. 이 옵션은 데이터베이스를 호환 가능한 기본 파일 시스템 구성으로 업그레이드합니다.

블루/그린 배포를 생성하는 도중 `rds.optimized_writes` 파라미터가 `AUTO`로 설정된 경우 그린 환경에서 RDS 최적화된 쓰기가 자동으로 활성화됩니다. 그런 다음 블루/그린 배포를 전환하여 그린 환경을 새로운 프로덕션 환경으로 승격합니다.

자세한 내용은 [Amazon RDS에서 블루/그린 배포 생성](blue-green-deployments-creating.md) 섹션을 참조하세요.

## RDS Optimized Writes 제한 사항
<a name="rds-optimized-writes-limitations"></a>

스냅샷에서 RDS for MySQL 데이터베이스를 복원할 때는 다음 조건이 모두 적용되는 경우에만 데이터베이스의 RDS 최적화된 쓰기를 켤 수 있습니다.
+ RDS Optimized Writes를 지원하는 데이터베이스에서 스냅샷이 생성되었습니다.
+ RDS Optimized Writes가 릴리스된 *이후에* 생성한 데이터베이스에서 스냅샷이 생성되었습니다.
+ RDS Optimized Writes를 지원하는 데이터베이스로 스냅샷이 복원됩니다.
+ 복원된 데이터베이스는 `rds.optimized_writes` 파라미터가 `AUTO`로 설정된 파라미터 그룹에 연결됩니다.

# RDS for MySQL DB 엔진 업그레이드
<a name="USER_UpgradeDBInstance.MySQL"></a>

Amazon RDS에서 새 데이터베이스 엔진 버전을 지원하는 경우, DB 인스턴스를 새 버전으로 업그레이드할 수 있습니다. MySQL 데이터베이스의 업그레이드에는 메이저 버전 업그레이드와 마이너 버전 업그레이드라는 2가지 종류가 있습니다.

**메이저 버전 업그레이드**  
*메이저 버전 업그레이드*에는 기존 애플리케이션과 호환되지 않는 데이터베이스 변경 사항이 포함될 수 있습니다. 따라서 DB 인스턴스의 메이저 버전 업그레이드를 수동으로 수행해야 합니다. DB 인스턴스를 수정하여 메이저 버전 업그레이드를 시작할 수 있습니다. 메이저 버전 업그레이드를 수행하기 전에 [RDS for MySQL 메이저 버전 업그레이드](USER_UpgradeDBInstance.MySQL.Major.md)의 지침을 따르는 것이 좋습니다.  
다중 AZ DB 인스턴스 배포의 메이저 버전 업그레이드인 경우 Amazon RDS는 기본 복제본과 대기 복제본을 동시에 업그레이드합니다. 업그레이드가 완료될 때까지 DB 인스턴스를 사용할 수 없습니다. 다중 AZ DB 클러스터 배포의 메이저 버전 업그레이드인 경우 Amazon RDS는 클러스터 멤버 인스턴스를 한 번에 하나씩 업그레이드합니다.  
블루/그린 배포를 사용하면 메이저 버전 업그레이드에 필요한 다운타임을 최소화할 수 있습니다. 자세한 내용은 [데이터베이스 업데이트에 Amazon RDS 블루/그린 배포 사용](blue-green-deployments.md) 섹션을 참조하세요.

**마이너 버전 업그레이드**  
마이너 버전 업그레이드에는 기존 애플리케이션과 호환되는 변경 사항만 포함됩니다.** DB 인스턴스를 수정하여 마이너 버전 업그레이드를 수동으로 시작할 수 있습니다. 또는 DB 인스턴스를 생성하거나 수정할 때 **마이너 버전 자동 업그레이드** 옵션을 활성화할 수 있습니다. 이렇게 하면 Amazon RDS에서 새 버전을 테스트 및 승인한 후 DB 인스턴스가 자동으로 업그레이드됩니다. 업그레이드 수행에 대한 자세한 내용은 [DB 인스턴스 엔진 버전 업그레이드](USER_UpgradeDBInstance.Upgrading.md) 섹션을 참조하세요.  
다중 AZ DB 클러스터의 마이너 버전 업그레이드를 수행하면 Amazon RDS는 리더 DB 인스턴스를 한 번에 하나씩 업그레이드합니다. 그러면 리더 DB 인스턴스가 새 라이터 DB 인스턴스로 전환됩니다. 그러면 Amazon RDS가 이전 라이터 인스턴스(현재는 리더 인스턴스)를 업그레이드합니다.  
다중 AZ DB 인스턴스 배포의 마이너 버전 업그레이드로 인한 다운타임은 몇 분 동안 지속될 수 있습니다.** 다중 AZ DB 클러스터는 일반적으로 마이너 버전 업그레이드의 가동 중지 시간을 약 35초로 줄입니다. RDS 프록시와 함께 사용하면 다운타임을 1초 이하로 더 줄일 수 있습니다. 자세한 내용은 [ Amazon RDS Proxy](rds-proxy.md) 섹션을 참조하세요. 또는 [ProxySQL](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/), [PgBouncer](https://aws.amazon.com/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 또는 [AWS 고급 JDBC 래퍼 드라이버](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)와 같은 오픈 소스 데이터베이스 프록시를 사용할 수 있습니다.

또한 Amazon RDS는 업그레이드 롤아웃 정책을 지원하여 여러 데이터베이스 리소스 및 AWS 계정에서 자동 마이너 버전 업그레이드를 관리합니다. 자세한 내용은 [자동 마이너 버전 AWS Organizations 업그레이드에 업그레이드 롤아웃 정책 사용](RDS.Maintenance.AMVU.UpgradeRollout.md) 섹션을 참조하세요.

MySQL DB 인스턴스가 읽기 복제본을 사용하는 경우 소스 인스턴스를 업그레이드하기 전에 읽기 복제본을 모두 업그레이드해야 합니다.

**Topics**
+ [

## MySQL 업그레이드 고려 사항
](#USER_UpgradeDBInstance.MySQL.Considerations)
+ [

## 유효한 업그레이드 대상 찾기
](#USER_UpgradeDBInstance.MySQL.FindingTargets)
+ [

# MySQL 버전 번호
](USER_UpgradeDBInstance.MySQL.VersionID.md)
+ [

# RDS for MySQL의 RDS 버전 번호
](USER_UpgradeDBInstance.MySQL.rds.version.md)
+ [

# RDS for MySQL 메이저 버전 업그레이드
](USER_UpgradeDBInstance.MySQL.Major.md)
+ [

# RDS for MySQL 업그레이드 테스트
](USER_UpgradeDBInstance.MySQL.UpgradeTesting.md)
+ [

## MySQL DB 인스턴스 업그레이드
](#USER_UpgradeDBInstance.MySQL.Upgrading)
+ [

# RDS for MySQL 마이너 버전 자동 업그레이드
](USER_UpgradeDBInstance.MySQL.Minor.md)
+ [

# RDS for MySQL 데이터베이스 업그레이드 시 읽기 전용 복제본을 사용하여 가동 중지 시간 단축
](USER_UpgradeDBInstance.MySQL.ReducedDowntime.md)
+ [

# 이벤트를 사용하여 RDS for MySQL 엔진 업그레이드 모니터링
](USER_UpgradeDBInstance.MySQL.Monitoring.md)

## MySQL 업그레이드 고려 사항
<a name="USER_UpgradeDBInstance.MySQL.Considerations"></a>

Amazon RDS는 업그레이드 프로세스 중에 DB 스냅샷을 2개 이상 캡처합니다. Amazon RDS는 업그레이드를 변경하기 *전에* DB 인스턴스의 스냅샷을 최대 2개까지 캡처합니다. 업그레이드가 데이터베이스에 맞지 않는 경우에는 이 스냅샷을 복구하여 이전 버전을 실행하는 DB 인스턴스를 생성할 수 있습니다. Amazon RDS는 업그레이드가 완료되면 DB 인스턴스의 또 다른 스냅샷을 캡처합니다. Amazon RDS는 AWS Backup에서 DB 인스턴스의 백업을 관리하는지 여부에 관계없이 이러한 스냅샷을 생성합니다.

**참고**  
DB 인스턴스에 대한 백업 보존 기간을 0보다 큰 수로 설정하면 Amazon RDS는 DB 스냅샷만 캡처합니다. 백업 보존 기간을 변경하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

업그레이드가 완료되면 이전 버전의 데이터베이스 엔진으로 되돌릴 수 없습니다. 이때 이전 버전으로 되돌리려면 첫 번째로 캡처한 DB 스냅샷을 복구하여 새로운 DB 인스턴스를 생성해야 합니다.

DB 인스턴스를 Amazon RDS가 지원하는 새 버전으로 업그레이드하는 시기는 사용자가 직접 관리합니다. 이러한 관리 수준은 특정 데이터베이스 버전과 호환성을 유지하거나 프로덕션 환경에 배포하기 전에 애플리케이션을 이용해 새 버전을 테스트하는 데 효과적입니다. 모든 준비를 마치면 일정에 가장 적합한 시기에 버전 업그레이드를 실행할 수 있습니다.

DB 인스턴스가 읽기 복제본을 사용하는 경우 소스 인스턴스를 업그레이드하기 전에 읽기 복제본부터 모두 업그레이드해야 합니다.

## 유효한 업그레이드 대상 찾기
<a name="USER_UpgradeDBInstance.MySQL.FindingTargets"></a>

AWS Management Console을 사용하여 DB 인스턴스를 업그레이드하면 DB 인스턴스의 유효한 업그레이드 대상이 표시됩니다. 다음 AWS CLI 명령을 실행하여 DB 인스턴스의 유효한 업그레이드 대상을 식별할 수도 있습니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version version_number \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

Windows의 경우:

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version version_number ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

예를 들어 MySQL 버전 8.0.28 DB 인스턴스의 유효한 업그레이드 대상을 식별하려면 다음 AWS CLI 명령을 실행합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version 8.0.28 \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

Windows의 경우:

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version 8.0.28 ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

# MySQL 버전 번호
<a name="USER_UpgradeDBInstance.MySQL.VersionID"></a>

RDS for MySQL용 데이터베이스 엔진의 버전 번호 지정 시퀀스는 major.minor.patch.YYYYMMDD 또는 major.minor.patch 형식(예: 8.0.33.R2.20231201 또는 5.7.44)입니다.**** 사용된 형식은 MySQL 엔진 버전에 따라 다릅니다. RDS 추가 지원 버전 번호 지정에 대한 자세한 내용은 [Amazon RDS 추가 지원 버전 명명 규칙](extended-support-versions.md#extended-support-naming) 섹션을 참조하세요.

**메이저**  
버전 번호의 정수 부분과 첫 번째 소수 부분 모두가 메이저 버전 번호입니다(예: 8.0). 메이저 버전 업그레이드는 버전 번호의 메이저 부분이 증가합니다. 예를 들어 5.7.44에서 8.0.33으로 업그레이드하는 것은 메이저 버전 업그레이드입니다. 여기서 5.7과 8.0이 메이저 버전 번호입니다.******

**마이너**  
버전 번호의 세 번째 부분이 마이너 버전 번호입니다(예: 8.0.33의 33).

**패치**  
패치는 버전 번호의 네 번째 부분입니다(예: 8.0.33.R2의 R2). RDS 패치 버전에는 릴리스 후 마이너 버전에 추가된 중요한 버그 수정이 포함되어 있습니다.

**YYYYMMDD(날짜)**  
날짜는 버전 번호의 다섯 번째 부분입니다(예: 8.0.33.R2.20231201의 20231201). RDS 날짜 버전은 보안 패치로 릴리스 후 마이너 버전에 추가된 중요한 보안 수정이 포함되어 있습니다. 엔진 동작을 변경할 수 있는 수정 사항은 포함되지 않습니다.

다음 표에서는 RDS for MySQL 버전 8.4의 이름 지정 체계를 설명합니다.


| 8.4 마이너 버전 | 이름 지정 체계 | 
| --- | --- | 
|  ≥ 3  |  새 DB 인스턴스는 *major.minor.patch.YYMMDD*를 사용합니다(예: 8.4.3.R2.20241201). 기존 DB 인스턴스는 다음 메이저 또는 마이너 버전 업그레이드 전까지 *major.minor.patch*(예: 8.4.3.R2)를 사용할 수 있습니다. | 

다음 표에서는 RDS for MariaDB 버전 8.0의 이름 지정 체계를 설명합니다.


| 8.0 마이너 버전 | 이름 지정 체계 | 
| --- | --- | 
|  33 이상  |  새 DB 인스턴스는 major.minor.patch.YYMMDD를 사용합니다(예: 8.0.33.R2.20231201).** 기존 DB 인스턴스는 다음 메이저 또는 마이너 버전 업그레이드 전까지 major.minor.patch(예: 8.0.33.R2)를 사용할 수 있습니다.**  | 
|  33 미만  |  기존 DB 인스턴스는 major.minor.patch를 사용합니다(예: 8.0.32.R2).**  | 

다음 표에서는 RDS for MariaDB 버전 5.7의 이름 지정 체계를 설명합니다.


| 5.7 마이너 버전 | 이름 지정 체계 | 
| --- | --- | 
|  42 이상  |  새 DB 인스턴스는 major.minor.patch.YYMMDD를 사용합니다(예: 5.7.42.R2.20231201).** 기존 DB 인스턴스는 다음 메이저 또는 마이너 버전 업그레이드 전까지 major.minor.patch(예: 5.7.42.R2)를 사용할 수 있습니다.**  | 

# RDS for MySQL의 RDS 버전 번호
<a name="USER_UpgradeDBInstance.MySQL.rds.version"></a>

RDS 버전 번호는 `major.minor.patch` 또는 `major.minor.patch.YYYYMMDD` 명명 체계를 사용합니다. Amazon RDS 확장 지원 버전은 *minor-RDS.YYYYMMDD* 마이너 버전 이름 지정 체계를 사용합니다.

RDS 패치 버전에는 릴리스 후 마이너 버전에 추가된 중요한 버그 수정이 포함되어 있습니다. RDS 날짜 버전(*YYYYMMDD*)은 보안 패치입니다. 보안 패치에는 엔진 동작을 변경할 수 있는 수정 사항은 포함되지 않습니다. RDS 추가 지원 버전 번호 지정에 대한 자세한 내용은 [Amazon RDS 추가 지원 버전 명명 규칙](extended-support-versions.md#extended-support-naming) 섹션을 참조하세요.

다음 SQL 쿼리를 사용하여 RDS for MySQL 데이터베이스의 RDS 버전 번호를 확인할 수 있습니다.

```
mysql> select mysql.rds_version();
```

예를 들어 RDS for MySQL 8.0.34 데이터베이스를 쿼리하면 다음 아웃풋이 반환됩니다.

```
+---------------------+
| mysql.rds_version() |
+---------------------+
| 8.0.34.R2.20231201  |
+---------------------+
1 row in set (0.01 sec)
```

# RDS for MySQL 메이저 버전 업그레이드
<a name="USER_UpgradeDBInstance.MySQL.Major"></a>

Amazon RDS는 MySQL 데이터베이스 엔진의 다음과 같은 메이저 버전 업그레이드를 지원합니다.
+ MySQL 5.7에서 MySQL 8.0으로
+ MySQL 8.0에서 MySQL 8.4로

**참고**  
최신 세대 및 현재 세대의 DB 인스턴스 클래스로만 MySQL 버전 5.7, 8.0, 8.4 DB 인스턴스를 만들 수 있습니다.  
경우에 따라, 이전 세대의 DB 인스턴스 클래스에서 실행되는 DB 인스턴스를 더 높은 버전의 MySQL 엔진 버전을 사용하는 DB 인스턴스로 업그레이드하고 싶을 수 있습니다. 이러한 경우 먼저 DB 인스턴스를 수정하여 최신 세대 또는 현재 세대 DB 인스턴스 클래스를 사용합니다. 이렇게 한 다음 DB 인스턴스를 수정하여 더 높은 MySQL 데이터베이스 엔진 버전을 사용하도록 할 수 있습니다. Amazon RDS DB 인스턴스 클래스에 대한 자세한 내용은 [DB 인스턴스 클래스](Concepts.DBInstanceClass.md) 단원을 참조하십시오.

**Topics**
+ [

## MySQL 메이저 버전 업그레이드 개요
](#USER_UpgradeDBInstance.MySQL.Major.Overview)
+ [

## 업그레이드 사전 점검
](#USER_UpgradeDBInstance.MySQL.Prechecks)
+ [

## 업그레이드 실패 후 롤백
](#USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure)

## MySQL 메이저 버전 업그레이드 개요
<a name="USER_UpgradeDBInstance.MySQL.Major.Overview"></a>

메이저 버전 업그레이드에는 기존 애플리케이션과 호환되지 않는 데이터베이스 변경 사항이 포함될 수 있습니다. 결과적으로 Amazon RDS에서는 메이저 버전 업그레이드가 자동으로 적용되지 않으므로 DB 인스턴스를 수동으로 변경해야 합니다. 모든 업그레이드는 프로덕션 환경의 인스턴스에 적용하기 전에 반드시 철저하게 테스트하는 것이 좋습니다.

메이저 버전 업그레이드를 수행하려면 먼저 사용 가능한 OS 업데이트를 수행합니다. OS 업데이트가 완료된 후 각 메이저 버전으로 업그레이드합니다. 예를 들어, 5.7을 8.0로 업그레이드한 후 8.0을 8.4로 업그레이드합니다. RDS for MySQL 다중 AZ DB 클러스터 업그레이드에 대한 자세한 내용은 [Amazon RDS에서 다중 AZ DB 클러스터의 엔진 버전 업그레이드](multi-az-db-clusters-upgrading.md) 섹션을 참조하세요. 2014년 4월 24일 이전에 생성한 MySQL DB 인스턴스에는 업데이트가 적용될 때까지 사용 가능한 OS 업데이트가 표시됩니다. OS 업데이트에 대한 자세한 내용은 [DB 인스턴스 에 업데이트 적용](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.OSUpgrades) 단원을 참조하십시오.

MySQL의 메이저 버전 업그레이드 중에는 필요하다면 Amazon RDS가 MySQL 바이너리 `mysql_upgrade`를 실행하여 테이블을 업그레이드합니다. 또한 Amazon RDS는 메이저 버전 업그레이드 도중 `slow_log` 및 `general_log` 테이블을 비웁니다. 로그 정보를 보존하려면 메이저 버전 업그레이드에 앞서 로그 내용을 저장하십시오.

MySQL 메이저 버전 업그레이드는 일반적으로 약 10분 정도 걸립니다. DB 인스턴스 클래스 크기 때문에 또는 인스턴스가 [Amazon RDS의 모범 사례](CHAP_BestPractices.md)의 특정 작업 지침에 따르지 않는 탓에 일부 업그레이드는 시간이 더 걸릴 수도 있습니다. Amazon RDS 콘솔에서 DB 인스턴스를 업그레이드하는 경우, DB 인스턴스 상태를 보고 업그레이드 완료 시간을 알 수 있습니다. AWS Command Line Interface(AWS CLI)를 사용하여 업그레이드하는 경우, [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령을 사용하여 `Status` 값을 확인합니다.

## 업그레이드 사전 점검
<a name="USER_UpgradeDBInstance.MySQL.Prechecks"></a>

Amazon RDS는 비호환성을 확인하기 위해 업그레이드하기 전에 사전 점검을 실행합니다. 이러한 비호환성은 업그레이드한 후의 MySQL 버전에 따라 다릅니다.

사전 점검에는 MySQL에 포함된 내용과 Amazon RDS 팀에서 생성한 내용이 포함됩니다. MySQL에서 제공하는 사전 점검에 대한 자세한 내용은 [업그레이드 확인 프로그램 유틸리티](https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utilities-upgrade.html)를 참조하십시오.

사전 점검은 업그레이드를 위해 DB 인스턴스가 중지되기 전에 실행됩니다. 즉, 점검을 실행해도 가동 중지를 일으키지 않습니다. 사전 점검에서 비호환성이 발견되면 Amazon RDS는 DB 인스턴스가 중지되기 전에 자동으로 업그레이드를 취소합니다. 또한 Amazon RDS는 비호환성에 대한 이벤트를 생성합니다. Amazon RDS 이벤트에 대한 자세한 내용은 [Amazon RDS 이벤트 알림 작업](USER_Events.md) 단원을 참조하십시오.

Amazon RDS는 각 비호환성에 대한 자세한 정보를 로그 파일 `PrePatchCompatibility.log`에 기록합니다. 대부분의 경우 로그 항목에는 비호환성 문제를 해결하기 위한 MySQL 설명서 링크가 포함되어 있습니다. 로그 파일 보기에 대한 자세한 내용은 [데이터베이스 로그 파일 보기 및 나열](USER_LogAccess.Procedural.Viewing.md) 단원을 참조하십시오.

사전 점검의 특성으로 인해 데이터베이스의 객체를 분석합니다. 이 분석은 리소스를 소비하고 업그레이드가 완료되는 시간을 늘립니다.

**Topics**
+ [

### MySQL 8.0에서 8.4로 업그레이드하기 위한 사전 점검
](#USER_UpgradeDBInstance.MySQL.80to84Prechecks)
+ [

### MySQL 5.7에서 8.0으로 업그레이드하기 위한 사전 점검
](#USER_UpgradeDBInstance.MySQL.57to80Prechecks)

### MySQL 8.0에서 8.4로 업그레이드하기 위한 사전 점검
<a name="USER_UpgradeDBInstance.MySQL.80to84Prechecks"></a>

MySQL 8.4에는 MySQL 8.0과 상당한 비호환성이 포함되어 있습니다. 이러한 비호환성으로 인해 MySQL 8.0에서 MySQL 8.4로 업그레이드하는 동안 문제가 발생할 수 있습니다. 따라서 업그레이드가 성공하려면 데이터베이스에 몇 가지 준비가 필요할 수 있습니다. 다음은 이러한 비호환성을 나열한 전체 목록입니다.
+ 사용되지 않는 데이터 형식이나 함수를 사용하는 테이블이 없어야 합니다.
+ 트리거에는 누락되었거나 빈 definer 또는 잘못된 생성 컨텍스트가 없어야 합니다.
+ 키워드 또는 예약된 단어 위반이 없어야 합니다. 이전에 예약되지 않은 일부 키워드는 MySQL 8.4에서 예약할 수 있습니다.

  자세한 내용은 MySQL 설명서의 [키워드 및 예약어](https://dev.mysql.com/doc/refman/8.4/en/keywords.html)를 참조하십시오.
+ MySQL 8.0 `mysql` 시스템 데이터베이스에는 MySQL 8.4 데이터 딕셔너리가 사용하는 테이블과 동일한 이름의 테이블이 없어야 합니다.
+ `sql_mode` 시스템 변수 설정에 정의된 사용되지 않는 SQL 모드가 없어야 합니다.
+ 255자 또는 1020바이트 길이를 초과하는 개별 `ENUM` 또는 `SET` 열 요소가 있는 테이블이나 저장 프로시저가 없어야 합니다.
+ MySQL 8.0 설치는 MySQL 8.4에 지원되지 않는 기능을 사용해서는 안 됩니다.

  자세한 내용은 MySQL 설명서의 [Features removed in MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html#mysql-nutshell-removals)를 참조하세요.
+ 64자를 초과하는 외래 키 제약 조건 이름이 없어야 합니다.
+ 향상된 유니코드 지원을 위해 다음 정보를 검토하세요.
  + `utf8mb3` charset을 사용하는 객체가 `utf8mb4` charset을 사용하도록 변환하는 것을 고려하세요. `utf8mb3` 문자 집합은 사용되지 않습니다.
  + 현재 `utf8`은 `utf8mb3` charset의 별칭이므로 `utf8` 대신 문자 집합 참조를 위한 `utf8mb4` 사용을 고려하세요. 가능하면 먼저 `utf8`을 `utf8mb4`로 변경한 다음 데이터베이스를 업그레이드합니다.
  + 이전 클라이언트는 `utf8mb3`에 대해 알 수 없는 문자 집합 오류를 수신할 수 있으므로 데이터베이스를 업그레이드하기 전에 데이터베이스 클라이언트를 업그레이드하세요.

  자세한 내용은 MySQL 설명서의 [utf8mb3 문자 집합(3바이트 UTF-8 유니코드 인코딩)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)을 참조하십시오.

  문자 집합을 변경하려는 경우 데이터베이스의 백업, 복원 및 복제를 수동으로 수행할 수 있습니다. 또는 Amazon RDS 블루/그린 배포를 사용할 수 있습니다. 자세한 내용은 [데이터베이스 업데이트에 Amazon RDS 블루/그린 배포 사용](blue-green-deployments.md) 섹션을 참조하세요.

MySQL 8.0에서 8.4로 업그레이드를 시작하면 Amazon RDS가 자동으로 사전 점검을 실행하여 이러한 비호환성을 찾아냅니다. MySQL 8.4로 업그레이드하는 방법은 MySQL 설명서에서 [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.4/en/upgrading.html)을 참조하세요.

이러한 사전 점검은 필수입니다. 건너뛸 수 없습니다. 사전 점검은 다음과 같은 이점을 제공합니다.
+ 이를 통해 업그레이드 중 예기치 않은 가동 중단을 피할 수 있습니다.
+ 비호환성이 있는 경우 Amazon RDS가 업그레이드를 차단하고 이에 대해 알 수 있는 로그를 제공합니다. 그러면 로그를 사용해 비호환성을 제거함으로써 MySQL 8.4로 업그레이드하기 위한 데이터베이스 준비를 마칠 수 있습니다. 비호환성 문제를 제거하는 방법에 대한 자세한 내용은 MySQL 설명서의 [Preparing your installation for upgrade](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)를 참조하세요.

### MySQL 5.7에서 8.0으로 업그레이드하기 위한 사전 점검
<a name="USER_UpgradeDBInstance.MySQL.57to80Prechecks"></a>

MySQL 8.0에는 MySQL 5.7과 상당한 비호환성이 포함되어 있습니다. 이러한 비호환성으로 인해 MySQL 5.7에서 MySQL 8.0으로 업그레이드하는 동안 문제가 발생할 수 있습니다. 따라서 업그레이드가 성공하려면 데이터베이스에 몇 가지 준비가 필요할 수 있습니다. 다음은 이러한 비호환성을 나열한 전체 목록입니다.
+ 사용되지 않는 데이터 형식이나 함수를 사용하는 테이블이 없어야 합니다.
+ orphan \$1.frm 파일이 없어야 합니다.
+ 트리거에는 누락되었거나 빈 definer 또는 잘못된 생성 컨텍스트가 없어야 합니다.
+ 기본 파티셔닝 지원이 없는 스토리지 엔진을 사용하는 분할된 테이블이 없어야 합니다.
+ 키워드 또는 예약된 단어 위반이 없어야 합니다. 이전에 예약되지 않은 일부 키워드는 MySQL 8.0에서 예약할 수 있습니다.

  자세한 내용은 MySQL 설명서의 [키워드 및 예약어](https://dev.mysql.com/doc/refman/8.0/en/keywords.html)를 참조하십시오.
+ MySQL 5.7 `mysql` 시스템 데이터베이스에는 MySQL 8.0 데이터 딕셔너리가 사용하는 테이블과 동일한 이름의 테이블이 없어야 합니다.
+ `sql_mode` 시스템 변수 설정에 정의된 사용되지 않는 SQL 모드가 없어야 합니다.
+ 255자 또는 1020바이트 길이를 초과하는 개별 `ENUM` 또는 `SET` 열 요소가 있는 테이블이나 저장 프로시저가 없어야 합니다.
+ MySQL 8.0.13 이상으로 업그레이드하기 전에 공유 InnoDB 테이블스페이스에 있는 테이블 파티션이 없어야 합니다.
+ `ASC` 절에 사용하는 `DESC` 또는 `GROUP BY` 한정자를 사용하는 MySQL 8.0.12 이하의 쿼리 및 저장 프로그램 정의가 없어야 합니다.
+ MySQL 5.7 설치는 MySQL 8.0에 지원되지 않는 기능을 사용해서는 안 됩니다.

  자세한 내용은 MySQL 설명서의 [MySQL 8.0에서 제거된 기능](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals)을 참조하십시오.
+ 64자를 초과하는 외래 키 제약 조건 이름이 없어야 합니다.
+ 향상된 유니코드 지원을 위해 다음 정보를 검토하세요.
  + `utf8mb3` charset을 사용하는 객체가 `utf8mb4` charset을 사용하도록 변환하는 것을 고려하세요. `utf8mb3` 문자 집합은 사용되지 않습니다.
  + 현재 `utf8`은 `utf8mb3` charset의 별칭이므로 `utf8` 대신 문자 집합 참조를 위한 `utf8mb4` 사용을 고려하세요. 가능하면 먼저 `utf8`을 `utf8mb4`로 변경한 다음 데이터베이스를 업그레이드합니다.
  + 이전 클라이언트는 `utf8mb3`에 대해 알 수 없는 문자 집합 오류를 수신할 수 있으므로 데이터베이스를 업그레이드하기 전에 데이터베이스 클라이언트를 업그레이드하세요.

  자세한 내용은 MySQL 설명서의 [utf8mb3 문자 집합(3바이트 UTF-8 유니코드 인코딩)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)을 참조하십시오.

  문자 집합을 변경하려는 경우 데이터베이스의 백업, 복원 및 복제를 수동으로 수행할 수 있습니다. 또는 Amazon RDS 블루/그린 배포를 사용할 수 있습니다. 자세한 내용은 [데이터베이스 업데이트에 Amazon RDS 블루/그린 배포 사용](blue-green-deployments.md) 섹션을 참조하세요.

MySQL 5.7에서 8.0으로 업그레이드를 시작하면 Amazon RDS가 자동으로 사전 점검을 실행하여 이러한 비호환성을 찾아냅니다. MySQL 8.0으로 업그레이드하는 방법은 MySQL 설명서에서 [MySQL 업그레이드](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html)를 참조하십시오.

이러한 사전 점검은 필수입니다. 건너뛸 수 없습니다. 사전 점검은 다음과 같은 이점을 제공합니다.
+ 이를 통해 업그레이드 중 예기치 않은 가동 중단을 피할 수 있습니다.
+ 비호환성이 있는 경우 Amazon RDS가 업그레이드를 차단하고 이에 대해 알 수 있는 로그를 제공합니다. 그러면 로그를 사용해 비호환성을 제거함으로써 MySQL 8.0으로 업그레이드하기 위한 데이터베이스 준비를 마칠 수 있습니다. 비호환성 문제를 제거하는 방법에 대한 자세한 내용은 MySQL 설명서의 [ 업그레이드를 위한 설치 준비](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) 및 MySQL Server 블로그의 [ MySQL 8.0으로 업그레이드할 때 알아야 할 내용](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)을 참조하세요.

## 업그레이드 실패 후 롤백
<a name="USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure"></a>

DB 인스턴스를 MySQL 버전 5.7에서 MySQL 버전 8.0으로 또는 MySQL 8.0에서 8.4로 업그레이드하면 업그레이드가 실패할 수 있습니다. 특히 데이터 딕셔너리에 사전 검사에서 캡처되지 않은 비호환성 문제가 포함되어 있는 경우 실패할 수 있습니다. 이 경우 데이터베이스가 새 MySQL 8.0 또는 8.4 버전에서 성공적으로 시작되지 않습니다. 이때 Amazon RDS는 업그레이드를 위해 수행된 변경 사항을 롤백합니다. 롤백 후 MySQL DB 인스턴스는 원래 버전을 실행합니다.
+ MySQL 버전 8.0(MySQL 8.4에서 롤백하는 경우)
+ MySQL 버전 5.7(MySQL 8.0에서 롤백하는 경우)

업그레이드가 실패하고 롤백되면 Amazon RDS는 이벤트 ID가 ID RDS-EVENT-0188인 이벤트를 생성합니다.

일반적으로, DB 인스턴스의 데이터베이스와 대상 MySQL 버전 간에 메타데이터가 호환되지 않기 때문에 업그레이드가 실패합니다. 업그레이드가 실패한 경우 이러한 비호환성에 대한 세부 정보를 `upgradeFailure.log` 파일에서 확인할 수 있습니다. 업그레이드를 다시 시도하기 전에 비호환성을 해결하세요.

업그레이드 시도 및 롤백이 실패하는 과정에서 DB 인스턴스가 다시 시작됩니다. 보류 중인 파라미터 변경 사항은 재시작 중에 적용되고 롤백 후에도 유지됩니다.

MySQL 8.0으로 업그레이드하는 방법에 대한 자세한 내용은 MySQL 설명서의 다음 항목을 참조하세요.
+ [업그레이드를 위한 설치 준비](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)
+ [MySQL 8.0으로 업그레이드 하시겠습니까? 알아야 할 내용.](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)..

MySQL 8.4로 업그레이드하는 방법에 대한 자세한 내용은 MySQL 설명서에서 [Preparing Your Installation for Upgrade](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)를 참조하세요.

# RDS for MySQL 업그레이드 테스트
<a name="USER_UpgradeDBInstance.MySQL.UpgradeTesting"></a>

DB 인스턴스에 대한 메이저 버전 업그레이드를 수행하기 전에 데이터베이스가 새 버전과 호환되는지 여부를 철저하게 테스트합니다. 또한 새 버전과의 호환성을 위해 데이터베이스에 액세스하는 모든 애플리케이션을 철저히 테스트합니다. 다음 절차를 참조하는 것이 좋습니다.

**메이저 버전 업그레이드를 테스트하려면**

1. 다음과 같이 새 버전의 데이터베이스 엔진에 대한 업그레이드 문서를 검토하여 데이터베이스나 애플리케이션에 영향을 끼칠 수도 있는 호환성 문제가 있는지 살펴봅니다.
   +  [MySQL 5.7의 변경 사항](http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html) 
   +  [MySQL 8.0의 변경 사항](http://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) 
   + [MySQL 8.4의 변경 사항](http://dev.mysql.com/doc/refman/8.4/en/upgrading-from-previous-series.html) 

1. DB 인스턴스가 사용자 정의 DB 파라미터 그룹의 구성원인 경우에는 기존 설정을 이용해 새로운 메이저 버전과 호환되는 새로운 DB 파라미터 그룹을 생성합니다. 테스트 인스턴스를 업그레이드할 때는 새로운 DB 파라미터 그룹을 지정해야만 업그레이드 테스트가 올바로 진행될 수 있습니다. DB 파라미터 그룹을 생성하는 것에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

1. 업그레이드할 DB 인스턴스의 DB 스냅샷을 생성합니다. 자세한 내용은 [Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성](USER_CreateSnapshot.md) 섹션을 참조하세요.

1. DB 스냅샷을 복구하여 새로운 테스트 DB 인스턴스를 생성합니다. 자세한 내용은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.

1. 이후 이어지는 세부적인 방법 중 한 가지를 사용하여 이 새로운 테스트 DB 인스턴스를 변경하고 새로운 버전으로 업그레이드합니다. 2단계에서 새로운 파라미터 그룹을 생성하였다면 이 파라미터 그룹을 지정합니다.

1. 업그레이드한 인스턴스에서 사용할 스토리지를 평가하여 업그레이드 시 추가 스토리지의 필요 여부를 결정합니다.

1. 업그레이드한 DB 인스턴스와 관련하여 데이터베이스 및 애플리케이션과 새로운 버전의 호환성을 보장하는 데 필요하다면 최대한 많은 수의 품질 보증 테스트를 실행합니다. 또한 1단계에서 발견된 호환성 문제의 영향을 평가하는 데 필요한 새로운 테스트도 모두 실행합니다. 저장된 프로시저와 함수를 모두 테스트합니다. 업그레이드한 DB 인스턴스에 대해 애플리케이션의 테스트 버전을 실행합니다.

1. 모든 테스트가 통과되면 프로덕션 환경의 DB 인스턴스에도 업그레이드를 실행합니다. 단, 모든 기능이 정상 작동하는 것을 확인할 때까지 쓰기 작업은 DB 인스턴스에 실행하지 않는 것이 좋습니다.

## MySQL DB 인스턴스 업그레이드
<a name="USER_UpgradeDBInstance.MySQL.Upgrading"></a>

MySQL DB 인스턴스의 수동 또는 자동 업그레이드에 대한 자세한 내용은 [DB 인스턴스 엔진 버전 업그레이드](USER_UpgradeDBInstance.Upgrading.md) 섹션을 참조하세요.

# RDS for MySQL 마이너 버전 자동 업그레이드
<a name="USER_UpgradeDBInstance.MySQL.Minor"></a>

DB 인스턴스를 생성하거나 수정할 때 다음 설정을 지정하면 DB 인스턴스가 자동으로 업그레이드되도록 할 수 있습니다.
+ **마이너 버전 자동 업그레이드(Auto minor version upgrade)** 설정을 활성화되어 있습니다.
+ **백업 보존 기간(Backup retention period)** 설정이 0보다 큽니다.

AWS Management Console에서 이 설정은 **추가 구성(Additional configuration)**에 있습니다. 다음 이미지는 **자동 마이너 버전 업그레이드(Auto minor version upgrade)** 설정을 보여줍니다.

![\[마이너 버전 자동 업그레이드 사용이 선택되어 있는 Amazon RDS 콘솔의 유지 관리 섹션.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/amvu.png)


이러한 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_ModifyInstance.Settings.md) 섹션을 참조하세요.

일부 AWS 리전의 특정 RDS for MySQL 메이저 버전의 경우 RDS에서 하나의 마이너 버전을 자동 업그레이드 버전으로 지정합니다. Amazon RDS가 마이너 버전을 테스트하고 승인하면 유지 관리 기간 중에 자동으로 마이너 버전 업그레이드가 실행됩니다. RDS는 자동으로 새로 릴리스된 마이너 버전을 자동 업그레이드 버전으로 설정하지 않습니다. RDS가 더 새로운 자동 업그레이드 버전을 지정하기 전에 다음과 같은 여러 기준이 고려됩니다.
+ 알려진 보안 문제
+ MySQL 커뮤니티 버전의 버그
+ 마이너 버전 릴리스 이후 전반적인 플릿 안정성

다음 AWS CLI 명령을 실행하여 특정 AWS 리전의 지정된 MySQL 마이너 버전에 대한 현재의 자동 마이너 업그레이드 대상 버전을 확인할 수 있습니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-db-engine-versions \
--engine mysql \
--engine-version minor_version \
--region region \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output text
```

Windows의 경우:

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--engine-version minor_version ^
--region region ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output text
```

예를 들어, 다음 AWS CLI 명령은 미국 동부(오하이오) AWS 리전(us-east-2)의 MySQL 마이너 버전 8.0.11에 대한 자동 마이너 업그레이드 대상을 안내합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-db-engine-versions \
--engine mysql \
--engine-version 8.0.11 \
--region us-east-2 \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output table
```

Windows의 경우:

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--engine-version 8.0.11 ^
--region us-east-2 ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output table
```

다음과 같은 출력이 표시됩니다.

```
----------------------------------
|    DescribeDBEngineVersions    |
+--------------+-----------------+
|  AutoUpgrade |  EngineVersion  |
+--------------+-----------------+
|  False       |  8.0.15         |
|  False       |  8.0.16         |
|  False       |  8.0.17         |
|  False       |  8.0.19         |
|  False       |  8.0.20         |
|  False       |  8.0.21         |
|  True        |  8.0.23         |
|  False       |  8.0.25         |
+--------------+-----------------+
```

이 예제에서 `AutoUpgrade` 값은 MySQL 버전 8.0.23의 경우 `True`입니다. 따라서 자동 마이너 업그레이드 대상은 출력에서 강조 표시된 MySQL 버전 8.0.23입니다.

MySQL DB 인스턴스는 다음 기준이 충족되면 유지 관리 기간 중에 자동으로 업그레이드됩니다.
+ **마이너 버전 자동 업그레이드(Auto minor version upgrade)** 설정을 활성화되어 있습니다.
+ **백업 보존 기간(Backup retention period)** 설정이 0보다 큽니다.
+ DB 인스턴스가 현재 자동 업그레이드 마이너 버전보다 낮은 DB 엔진 버전을 실행 중입니다.

자세한 내용은 [마이너 엔진 버전 자동 업그레이드](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades) 섹션을 참조하세요.

# RDS for MySQL 데이터베이스 업그레이드 시 읽기 전용 복제본을 사용하여 가동 중지 시간 단축
<a name="USER_UpgradeDBInstance.MySQL.ReducedDowntime"></a>

대부분의 경우 블루/그린 배포는 MySQL DB 인스턴스를 업그레이드할 때 다운타임을 줄이는 가장 좋은 방법입니다. 자세한 내용은 [데이터베이스 업데이트에 Amazon RDS 블루/그린 배포 사용](blue-green-deployments.md) 단원을 참조하십시오.

블루/그린 배포를 사용할 수 없으며 현재 프로덕션 애플리케이션에 MySQL 데이터베이스 인스턴스를 사용 중인 경우, 다음 절차를 사용하여 DB 인스턴스의 데이터베이스 버전을 업그레이드할 수 있습니다. 이 절차는 애플리케이션의 가동 중지 시간을 줄일 수 있습니다.

읽기 전용 복제본을 사용하면 대부분의 유지 관리 단계를 미리 수행하고 실제 운영 중단 중에 필요한 변경 사항을 최소화할 수 있습니다. 이 기법을 사용하면 기존 DB 인스턴스를 변경하지 않으면서 새 DB 인스턴스를 테스트하고 준비할 수 있습니다.

이 절차는 MySQL 버전 5.5를 MySQL 버전 7.6으로 업그레이드하는 예를 보여줍니다. 동일한 일반 절차를 사용하여 다른 메이저 버전으로 업그레이드할 수 있습니다. 동일한 일반 절차를 사용하여 다른 메이저 버전으로 업그레이드할 수 있습니다.

**참고**  
MySQL 버전 5.7에서 MySQL 버전 8.0으로 업그레이드하거나 MySQL 버전 8.0에서 MySQL 버전 8.4로 업그레이드하는 경우 업그레이드를 수행하기 전에 사전 점검을 완료합니다. 자세한 내용은 [MySQL 5.7에서 8.0으로 업그레이드하기 위한 사전 점검](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.57to80Prechecks) 및 [MySQL 8.0에서 8.4로 업그레이드하기 위한 사전 점검](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.80to84Prechecks) 단원을 참조하세요.

**DB 인스턴스를 사용하면서 MySQL 데이터베이스를 업그레이드하는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. MySQL 5.7 DB 인스턴스의 읽기 전용 복제본을 생성합니다. 이 프로세스에서 업그레이드 가능한 데이터베이스 사본이 만들어집니다. DB 인스턴스의 다른 읽기 전용 복제본도 존재할 수 있습니다.

   1. 콘솔에서 **데이터베이스(Databases)**와 업그레이드하려는 DB 인스턴스를 차례로 선택합니다.

   1. **작업**에서 **읽기 전용 복제본 만들기**를 선택합니다.

   1. 읽기 전용 복제본의 **DB 인스턴스 식별자(DB instance identifier)** 값을 제공하고 **DB 인스턴스 클래스(DB instance class)** 및 기타 설정이 MySQL 5.7 DB 인스턴스와 일치하는지 확인합니다.

   1. [**Create read replica**]를 선택합니다.

1. (선택 사항) 읽기 전용 복제본이 생성되고 **상태(Status)**가 **사용 가능(Available)**으로 표시되면 읽기 전용 복제본을 다중 AZ 배포로 변환하고 백업을 활성화합니다.

   기본적으로 읽기 전용 복제본은 백업이 비활성화된 상태로 생성됩니다. 읽기 전용 복제본은 궁극적으로 프로덕션 DB 인스턴스가 되기 때문에 다중 AZ 배포를 구성하고 백업을 활성화하는 것이 가장 좋습니다.

   1. 콘솔에서 **데이터베이스(Databases)**와 방금 생성한 읽기 전용 복제본을 차례로 선택합니다.

   1. **수정**을 선택합니다.

   1. **다중 AZ 배포(Multi-AZ deployment)**에서 **대기 인스턴스 생성(Create a standby instance)**을 선택합니다.

   1. **Backup Retention Period**(백업 보존 기간)로 0이 아닌 양수 값(예: 3일)을 선택한 후 **Continue**(계속)를 선택합니다.

   1. **수정 사항 예약**에 대해 **즉시 적용**을 선택합니다.

   1. **DB 인스턴스 수정**을 선택합니다.

1. 읽기 전용 복제본 **상태(Status)**가 **사용 가능(Available)**으로 표시되면 읽기 전용 복제본을 MySQL 8.0으로 업그레이드합니다.

   1. 콘솔에서 **데이터베이스(Databases)**와 방금 생성한 읽기 전용 복제본을 차례로 선택합니다.

   1. **수정**을 선택합니다.

   1. **DB 엔진 버전(DB engine version)**에서 업그레이드할 MySQL 8.0 버전을 선택한 후 **계속(Continue)**을 선택합니다.

   1. **수정 사항 예약**에 대해 **즉시 적용**을 선택합니다.

   1. [**Modify DB instance**]를 선택하여 업그레이드를 시작합니다.

1. 업그레이드가 완료되고 **상태(Status)**가 **사용 가능(Available)**으로 표시되면 업그레이드한 읽기 전용 복제본이 소스 MySQL 5.7 DB 인스턴스로 업데이트되는지 확인합니다. 확인하려면 읽기 전용 복제본에 연결하고 `SHOW REPLICA STATUS` 명령을 실행합니다. `Seconds_Behind_Master` 필드가 `0`이면 복제본이 최신 상태입니다.
**참고**  
이전 버전의 MySQL에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

1. (선택 사항) 읽기 전용 복제본의 읽기 전용 복제본을 생성합니다.

   DB 인스턴스가 독립형 DB 인스턴스로 승격된 후 읽기 전용 복제본을 갖도록 하려면 지금 읽기 전용 복제본을 생성하면 됩니다.

   1. 콘솔에서 **데이터베이스(Databases)**와 방금 업그레이드한 읽기 전용 복제본을 차례로 선택합니다.

   1. **작업**에서 **읽기 전용 복제본 만들기**를 선택합니다.

   1. 읽기 전용 복제본의 **DB 인스턴스 식별자(DB instance identifier)** 값을 제공하고 **DB 인스턴스 클래스(DB instance class)** 및 기타 설정이 MySQL 5.7 DB 인스턴스와 일치하는지 확인합니다.

   1. [**Create read replica**]를 선택합니다.

1. (선택 사항) 읽기 전용 복제본에 대한 사용자 지정 DB 파라미터 그룹을 구성합니다.

   DB 인스턴스가 독립형 DB 인스턴스로 승격된 후 사용자 지정 파라미터 그룹을 사용하도록 하려면 지금 DB 파라미터 그룹을 생성하여 읽기 전용 복제본과 연결하면 됩니다.

   1. MySQL 8.0에 대한 사용자 지정 DB 파라미터 그룹을 생성합니다. 지침은 [Amazon RDS에서 DB 파라미터 그룹 생성](USER_WorkingWithParamGroups.Creating.md) 섹션을 참조하세요.

   1. 방금 생성한 DB 파라미터 그룹에서 변경하려는 파라미터를 수정합니다. 지침은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

   1. 콘솔에서 **데이터베이스(Databases)**와 읽기 전용 복제본을 차례로 선택합니다.

   1. **수정**을 선택합니다.

   1. **DB 파라미터 그룹(DB parameter group)**에서 방금 생성한 MySQL 8.0 DB 파라미터 그룹을 선택한 후 **계속(Continue)**을 선택합니다.

   1. **수정 사항 예약**에 대해 **즉시 적용**을 선택합니다.

   1. [**Modify DB instance**]를 선택하여 업그레이드를 시작합니다.

1. MySQL 8.0 읽기 전용 복제본을 독립형 DB 인스턴스로 만듭니다.
**중요**  
MySQL 8.0 읽기 전용 복제본을 독립형 DB 인스턴스로 승격하면 더 이상 MySQL 5.7 DB 인스턴스의 복제본이 아닙니다. 원본 MySQL 5.7 DB 인스턴스가 읽기 전용 모드이고, 모든 쓰기 작업이 일시 중단되는 유지 관리 기간 동안 MySQL 8.0 읽기 전용 복제본을 승격하는 것이 좋습니다. 승격이 완료되면 쓰기 작업을 MySQL 8.0 DB 인스턴스에서 실행하여 쓰기 작업이 손실되는 것을 막을 수 있습니다.  
그 밖에도 MySQL 8.0 읽기 전용 복제본을 승격하기 전에 MySQL 8.0 읽기 전용 복제본에서 필요한 모든 DDL(데이터 정의 언어) 작업을 수행하는 것이 좋습니다. 인덱스 생성을 예로 들 수 있습니다. 그러면 승격 후에도 MySQL 8.0 읽기 전용 복제본의 성능에 미치는 부정적인 영향을 방지할 수 있습니다. 읽기 전용 복제본을 승격하려면 다음 절차를 사용하십시오.

   1. 콘솔에서 **데이터베이스(Databases)**와 방금 업그레이드한 읽기 전용 복제본을 차례로 선택합니다.

   1. **작업**에서 **Promote(승격)**를 선택합니다.

   1. 읽기 전용 복제본 인스턴스에 대해 자동 백업을 활성화하려면 **예**를 선택합니다. 자세한 내용은 [백업 소개](USER_WorkingWithAutomatedBackups.md) 섹션을 참조하세요.

   1. [**Continue**]를 선택합니다.

   1. [**Promote Read Replica**]를 선택합니다.

1. 이제 MySQL 데이터베이스 버전이 업그레이드되었습니다. 이제 애플리케이션을 새로운 MySQL 8.0 DB 인스턴스로 리디렉션할 수 있습니다.

# 이벤트를 사용하여 RDS for MySQL 엔진 업그레이드 모니터링
<a name="USER_UpgradeDBInstance.MySQL.Monitoring"></a>

RDS for MySQL 데이터베이스의 엔진 버전을 업그레이드하면 Amazon RDS는 프로세스의 각 단계에서 특정 이벤트를 내보냅니다. 업그레이드 진행 상황을 추적하기 위해 이러한 이벤트를 보거나 구독할 수 있습니다.

 RDS 이벤트에 대한 자세한 내용은 [Amazon RDS 이벤트 모니터링](working-with-events.md) 섹션을 참조하세요.

엔진 업그레이드 중에 발생하는 특정 Amazon RDS 이벤트에 대한 자세한 내용은 [Amazon RDS 이벤트 카테고리 및 이벤트 메시지](USER_Events.Messages.md) 섹션을 참조하세요.

# MySQL DB 스냅샷 엔진 버전 업그레이드
<a name="mysql-upgrade-snapshot"></a>

Amazon RDS를 사용하여 MySQL DB 인스턴스의 스토리지 볼륨 DB 스냅샷을 생성할 수 있습니다. DB 스냅샷 생성 시, 생성되는 스냅샷은 DB 인스턴스에서 사용하는 엔진 버전에 기반합니다. DB 스냅샷의 엔진 버전을 업그레이드할 수 있습니다.

RDS for MySQL 버전의 경우 버전 5.7 스냅샷을 버전 8.0으로 업그레이드하거나 버전 8.0 스냅샷을 버전 8.4로 업그레이드할 수 있습니다. 암호화되거나 암호화되지 않은 DB 스냅샷을 업그레이드할 수 있습니다.

RDS for MySQL DB 스냅샷에 사용 가능한 엔진 버전을 보려면 다음 AWS CLI 예제를 사용합니다.

```
aws rds describe-db-engine-versions --engine mysql --include-all --engine-version example-engine-version --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

스냅샷에 대한 결과가 표시되지 않으면 엔진 버전이 더 이상 사용되지 않을 수 있습니다. 엔진 버전이 더 이상 지원되지 않는 경우 최신 메이저 버전 업그레이드 대상 또는 해당 버전에 대해 사용 가능한 다른 업그레이드 대상 중 하나로 업그레이드하는 것이 좋습니다. 자세한 내용은 [RDS for MySQL에서 지원되지 않는 엔진 버전이 있는 DB 스냅샷에 대한 업그레이드 옵션](mysql-upgrade-snapshot.upgrade-options.md) 섹션을 참조하세요.

새 엔진 버전으로 업그레이드된 DB 스냅샷을 복원한 후에는 업그레이드가 성공적이었는지 테스트해야 합니다. 메이저 버전 업그레이드에 대한 자세한 내용은 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md) 단원을 참조하십시오. DB 스냅샷을 복원하는 방법은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 단원을 참조하십시오.

**참고**  
자동 백업 과정에서 생성된 자동 DB 스냅샷은 업그레이드할 수 없습니다.

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷을 업그레이드할 수 있습니다.

------
#### [ Console ]

AWS Management Console을 사용하여 DB 스냅샷 엔진 버전을 업그레이드하려면 다음 절차를 사용합니다.

**DB 스냅샷을 업그레이드하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 탐색 창에서 [**Snapshots**]를 선택합니다.

1. 업그레이드할 스냅샷을 선택합니다.

1. **작업**에서 **Upgrade snapshot(스냅샷 업그레이드)**을 선택합니다. **Upgrade snapshot(스냅샷 업그레이드)** 페이지가 표시됩니다.

1. 업그레이드할 **New engine version(새 엔진 버전)**을 선택합니다.

1. 스냅샷을 업그레이드하려면 **변경 내용 저장**을 선택합니다.

   업그레이드 중에는 이 DB 스냅샷의 모든 스냅샷 작업이 비활성화됩니다. 또한 DB 스냅샷 상태가 **사용 가능**에서 **업그레이드 중**으로 바뀐 다음 완료되면 **활성**으로 바뀝니다 스냅샷 손상 문제로 인해 DB 스냅샷을 업그레이드할 수 없는 경우, 상태가 **사용할 수 없음**으로 바뀝니다. 이 상태로부터 스냅샷을 복구할 수는 없습니다.
**참고**  
DB 스냅샷 업그레이드에 실패하면 스냅샷이 원래 버전의 원래 상태로 롤백됩니다.

------
#### [ AWS CLI ]

DB 스냅샷을 새 데이터베이스 엔진 버전으로 업그레이드하려면 AWS CLI [modify-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-snapshot.html) 명령을 실행합니다.

**옵션**
+ `--db-snapshot-identifier` – 업그레이드할 DB 스냅샷의 식별자입니다. 식별자는 고유의 Amazon 리소스 이름(ARN)이어야 합니다. 자세한 내용은 [Amazon RDS의 Amazon 리소스 이름(ARN)](USER_Tagging.ARN.md) 섹션을 참조하세요.
+ `--engine-version` – DB 스냅샷을 업그레이드할 엔진 버전입니다.

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
1. aws rds modify-db-snapshot \
2. 
3.     --db-snapshot-identifier my_db_snapshot \
4.     --engine-version new_version
```
Windows의 경우:  

```
1. aws rds modify-db-snapshot ^
2.     --db-snapshot-identifier my_db_snapshot ^
3.     --engine-version new_version
```

------
#### [ Amazon RDS API ]

DB 스냅샷을 새 데이터베이스 엔진 버전으로 업그레이드하려면 RDS API [ModifyDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBSnapshot.html) 작업을 직접 호출하세요.

**파라미터**
+ `DBSnapshotIdentifier` – 업그레이드할 DB 스냅샷의 식별자입니다. 식별자는 고유의 Amazon 리소스 이름(ARN)이어야 합니다. 자세한 내용은 [Amazon RDS의 Amazon 리소스 이름(ARN)](USER_Tagging.ARN.md) 섹션을 참조하세요.
+ `EngineVersion` – DB 스냅샷을 업그레이드할 엔진 버전입니다.

------

# RDS for MySQL에서 지원되지 않는 엔진 버전이 있는 DB 스냅샷에 대한 업그레이드 옵션
<a name="mysql-upgrade-snapshot.upgrade-options"></a>

다음 표에는 RDS for MySQL DB 스냅샷에 대해 지원되지 않는 엔진 버전에서 업그레이드할 수 있는 엔진 버전이 나와 있습니다.

**참고**  
선택한 엔진 버전으로 업그레이드하려면 DB 스냅샷을 두 번 이상 업그레이드해야 할 수 있습니다.


| DB 스냅샷 엔진 버전 | 업그레이드 가능한 엔진 버전 | 
| --- | --- | 
| 5.5.8 |  5.5.62, 5.6.51  | 
| 5.5.12 |   5.5.62, 5.6.51  | 
| 5.5.20 |  5.5.62, 5.6.51  | 
| 5.5.23 |  5.5.62, 5.6.51  | 
| 5.5.25a |  5.5.62, 5.6.51  | 
| 5.5.27 |  5.5.62, 5.6.51  | 
| 5.5.31 |  5.5.62, 5.6.51  | 
| 5.5.33 |  5.5.62, 5.6.51  | 
| 5.5.37 |  5.5.62, 5.6.51  | 
| 5.5.38 |  5.5.62, 5.6.51  | 
| 5.5.40 |  5.5.62, 5.6.51  | 
| 5.5.40a |  5.5.62, 5.6.51  | 
| 5.5.40b |  5.5.62, 5.6.51  | 
| 5.5.41 |  5.5.62, 5.6.51  | 
| 5.5.42 |  5.5.62, 5.6.51  | 
| 5.5.59 |  5.5.62, 5.6.51  | 
| 5.6.12 |  5.6.51, 5.7.44  | 
| 5.6.13 |  5.6.51, 5.7.44  | 
| 5.6.17 |  5.6.51, 5.7.44  | 
| 5.6.19 |  5.6.51, 5.7.44  | 
| 5.6.19a |  5.6.51, 5.7.44  | 
| 5.6.19b |  5.6.51, 5.7.44  | 
| 5.6.21 |  5.6.51, 5.7.44  | 
| 5.6.21b |  5.6.51, 5.7.44  | 
| 5.6.22 |  5.6.51, 5.7.44  | 
| 5.6.23 |  5.6.51, 5.7.44  | 
| 5.6.27 |  5.6.51, 5.7.44  | 
| 5.6.27a |  5.6.51, 5.7.44  | 
| 5.7.10 |  5.7.44, 5.7.44-rds.20240408, 5.7.44-rds.20240529, 5.7.44-rds.20250103, 5.7.44-rds.20250213, 8.0.32, 8.0.33, 8.0.34, 8.0.35, 8.0.36, 8.0.37, 8.0.39, 8.0.40, 8.0.41  | 
| 5.7.11 |  5.7.44, 5.7.44-rds.20240408, 5.7.44-rds.20240529, 5.7.44-rds.20250103, 5.7.44-rds.20250213, 8.0.32, 8.0.33, 8.0.34, 8.0.35, 8.0.36, 8.0.37, 8.0.39, 8.0.40, 8.0.41  | 
| 5.7.12 |  5.7.44, 5.7.44-rds.20240408, 5.7.44-rds.20240529, 5.7.44-rds.20250103, 5.7.44-rds.20250213, 8.0.32, 8.0.33, 8.0.34, 8.0.35, 8.0.36, 8.0.37, 8.0.39, 8.0.40, 8.0.41  | 

# Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기
<a name="MySQL.Procedural.Importing.Other"></a>

MySQL DB 인스턴스용 RDS로 데이터를 가져오는 기법에는 몇 가지가 있습니다. 가장 좋은 방법은 다음과 같은 여러 요인에 따라 달라집니다.
+ 데이터 원본
+ 데이터 분량
+ 일회성 혹은 지속적
+ 가동 중지 시간 길이

 데이터와 함께 애플리케이션을 마이그레이션하는 경우라면 감당할 수 있는 가동 중지 시간도 고려해야 합니다.

다음 표에는 RDS for MySQL DB 인스턴스로 데이터를 가져오는 기법이 나와 있습니다.


| 소스 | 데이터 분량 | 일회성 혹은 지속적 | 애플리케이션 가동 중지 | 기술 | 추가 정보 | 
| --- | --- | --- | --- | --- | --- | 
|  온프레미스 또는 Amazon EC2에 있는 기존 MySQL 데이터베이스  |  모두 선택  |  한 번만  |  약간  |  온프레미스 데이터베이스의 백업을 만들어서 Amazon S3에 저장한 다음 MySQL을 실행하여 새로운 Amazon RDS DB 인스턴스에 백업 파일을 복원하십시오.  |  [Amazon RDS for MySQL DB 인스턴스로 백업 복원](MySQL.Procedural.Importing.md)  | 
|  온프레미스 또는 Amazon EC2에 있는 기존 MySQL 데이터베이스  |  모두 선택  |  지속적  |  최소화  |  기존 MySQL 데이터베이스가 복제 소스가 되도록 복제본을 구성합니다.  |  [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) [가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기](mysql-importing-data-reduced-downtime.md)  | 
|  기존의 모든 데이터베이스  |  모두 선택  |  일회성 혹은 지속적  |  최소화  |  AWS Database Migration Service을 사용하면 가동 중지 시간을 최소화하면서 데이터베이스를 마이그레이션할 수 있으며 대부분의 DB 엔진에서는 지속적으로 복제를 계속할 수 있습니다.  |  [AWS Database Migration Service란?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 및 *AWS Database Migration Service 사용 설명서*의 [AWS DMS에서 MySQL 호환 데이터베이스를 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)   | 
|  기존 MySQL DB 인스턴스  |  모두 선택  |  일회성 혹은 지속적  |  최소화  |  지속적인 복제를 위한 읽기 전용 복제본을 생성합니다. 새 DB 인스턴스를 한 번만 생성하도록 읽기 전용 복제본을 승격시킵니다.  |  [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md)  | 
|  기존 MySQL 데이터베이스  |  스몰  |  한 번만  |  약간  | 명령줄 유틸리티를 사용하여 MySQL DB 인스턴스에 바로 데이터를 복제합니다. |  [외부 MySQL 데이터베이스에서 Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기](mysql-importing-data-external-database.md)  | 
|  기존 데이터베이스에 저장되지 않은 데이터  |  Medium  |  한 번만  |  약간  | 플랫 파일을 만들고 MySQL LOAD DATA LOCAL INFILE 문을 이용하여 가져옵니다. |  [원하는 소스에서 Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기](mysql-importing-data-any-source.md)  | 

**참고**  
`mysql` 시스템 데이터베이스에는 DB 인스턴스에 로그인하고 데이터에 액세스하는 데 필요한 인증 및 권한 부여 정보가 포함되어 있습니다. DB 인스턴스에 있는 `mysql` 데이터베이스의 각종 테이블, 데이터 또는 기타 콘텐츠를 삭제하거나 변경하거나 이름을 바꾸거나 자르면 오류가 발생하여 DB 인스턴스와 데이터에 액세스할 수 없게 될 수 있습니다. 이 문제가 발생할 경우 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) 명령을 사용하여 DB 인스턴스를 스냅샷에서 복원할 수 있습니다. AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) 명령을 사용하여 DB 인스턴스를 복원할 수 있습니다.

# MySQL에 대한 데이터 가져오기 고려 사항
<a name="MySQL.Procedural.Importing.Advanced"></a>

다음 내용에는 MySQL로 데이터를 로드하는 것과 관련된 기술 정보가 포함되어 있습니다. 이 콘텐츠는 MySQL 서버 아키텍처에 익숙한 사용자를 대상으로 합니다.

## 이진 로깅
<a name="MySQL.Procedural.Importing.Advanced.Log"></a>

이진 로깅을 활성화하면 로깅을 비활성화했을 때와 비교해 데이터 로드 성능이 저하되고 최대 4배의 추가 디스크 공간이 필요합니다. 데이터를 로드하는 데 사용되는 트랜잭션 크기는 시스템 성능 및 디스크 공간 요구 사항에 직접적인 영향을 미칩니다. 트랜잭션이 클수록 더 많은 리소스가 필요합니다.

## 트랜잭션 크기
<a name="MySQL.Procedural.Importing.Advanced.Size"></a>

트랜잭션 크기는 MySQL 데이터 로드의 다음 측면에 영향을 미칩니다.
+ 리소스 소비
+ 디스크 공간 사용률
+ 프로세스 재개
+ 복구 시간
+ 입력 형식(플랫 파일 또는 SQL)

이 섹션에서는 트랜잭션 크기가 이진 로깅에 미치는 영향을 설명하고 큰 데이터를 로드하는 중에 이진 로깅을 비활성화하는 이유를 논증합니다. Amazon RDS 자동 백업 보존 기간을 설정하여 이진 로깅을 활성화 및 비활성화할 수 있습니다. 0이 아닌 값으로 설정하면 이진 로깅이 활성화되고 0으로 설정하면 비활성화됩니다. 자세한 내용은 [백업 보존 기간](USER_WorkingWithAutomatedBackups.BackupRetention.md) 섹션을 참조하세요.

이 섹션에서는 대규모 트랜잭션이 InnoDB에 미치는 영향과 트랜잭션 크기를 작게 유지하는 것이 중요한 이유도 설명합니다.

### 작은 트랜잭션
<a name="MySQL.Procedural.Importing.Advanced.Log.Small"></a>

작은 트랜잭션의 경우, 이진 로깅을 사용하면 데이터 로드에 필요한 디스크 쓰기 작업 수가 배가됩니다. 이 결과 다른 데이터베이스 세션의 성능이 심각하게 저하되고 데이터 로딩 시간이 증가할 수 있습니다. 발생하는 성능 저하는 부분적으로 다음 요인에 따라 달라집니다.
+ 업로드 속도
+ 로드 중에 발생하는 기타 데이터베이스 활동
+ Amazon RDS DB 인스턴스의 용량

또한, 이진 로그는 로그가 백업 및 제거될 때까지 로드된 데이터의 양과 대략적으로 같은 양의 디스크 공간을 사용합니다. Amazon RDS는 이진 로그를 자주 백업하고 제거하는 방법으로 이 문제를 최소화합니다.

### 대규모 트랜잭션
<a name="MySQL.Procedural.Importing.Advanced.Log.Large"></a>

대규모 트랜잭션의 경우 다음과 같은 이유로 이진 로깅이 사용하는 IOPS 및 디스크가 3배로 늘어납니다.
+ 이진 로그 캐시는 트랜잭션 데이터를 일시적으로 디스크에 저장합니다.
+ 이 캐시는 디스크 공간을 소비하는 트랜잭션 크기에 따라 증가합니다.
+ 트랜잭션(커밋 또는 롤백)이 완료되면 시스템은 캐시를 이진 로그에 복사합니다.

이 프로세스는 다음과 같은 데이터 복사본 세 개를 만듭니다.
+ 원본 데이터
+ 디스크의 캐시
+ 최종 이진 로그 항목

각 쓰기 작업에는 추가 IO가 발생하여 성능에 더욱 영향을 미칩니다.

따라서 이진 로깅에는 로깅을 비활성화했을 때에 비해 디스크 공간이 3배 필요합니다. 예를 들어 10GiB의 데이터를 단일 트랜잭션으로 로드하면 다음과 같은 세 개의 복사본이 만들어집니다.
+ 테이블 데이터 10GiB
+ 이진 로그 캐시 10GiB
+ 이진 로그 파일 10GiB

필요한 총 임시 디스크 공간은 30GiB입니다.

중요한 디스크 공간 고려 사항:
+ 캐시 파일은 세션이 종료되거나 새 트랜잭션이 다른 캐시를 만들 때까지 유지됩니다.
+ 이진 로그는 백업될 때까지 유지되며, 잠재적으로 20GiB(캐시 및 로그)를 장기간 차지할 수 있습니다.

`LOAD DATA LOCAL INFILE`을 사용하여 데이터를 로드하는 경우 데이터 복구는 로드 전에 수행된 백업에서 데이터베이스를 복구해야 하는 경우를 대비하여 네 번째 복사본을 만듭니다. 복원 중에 MySQL이 이진 로그에서 플랫 파일로 데이터를 추출합니다. 그런 다음 MySQL은 `LOAD DATA LOCAL INFILE`을 실행합니다. 이전 예시의 내용을 바탕으로 봤을 때, 이 복구를 수행하려면 테이블, 캐시, 로그 및 로컬 파일에 대해 각각 10GiB씩 총 40GiB의 임시 디스크 공간이 필요합니다. 최소 40GiB의 여유 디스크 공간이 없으면 복구가 실패합니다.

### 대규모 데이터 로드 최적화
<a name="MySQL.Procedural.Importing.AnySource.Advanced.Disable"></a>

대규모 데이터 로드의 경우 이진 로깅을 비활성화하여 오버헤드 및 디스크 공간 요구 사항을 줄입니다. 백업 보존 기간을 0으로 설정하여 이진 로깅을 비활성화할 수 있습니다. 로드가 완료되면 백업 보존 기간을 0이 아닌 적절한 값으로 복원합니다. 자세한 정보는 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 및 설정 표의 [백업 보존 기간](USER_ModifyInstance.Settings.md)을 참조하세요.

**참고**  
DB 인스턴스가 읽기 전용 복제본의 원본 DB 인스턴스인 경우에는 백업 보존 기간을 0으로 설정할 수 없습니다.

데이터를 로드하기 전에 DB 스냅샷을 만드는 것이 좋습니다. 자세한 내용은 [수동 백업 관리](USER_ManagingManualBackups.md) 섹션을 참조하세요.

## InnoDB
<a name="MySQL.Procedural.Importing.Advanced.InnoDB"></a>

실행 취소 로깅 및 복구 옵션에 대한 다음 정보는 데이터베이스 성능을 최적화하기 위해 InnoDB 트랜잭션을 작게 유지하는 데 도움이 됩니다.

### InnoDB 실행 취소 로깅 이해
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Undo"></a>

실행 취소는 트랜잭션 롤백을 활성화하고 다중 버전 동시성 제어(MVCC)를 지원하는 로깅 메커니즘입니다.

MySQL 5.7 이하 버전의 경우 실행 취소 로그는 InnoDB 시스템 테이블스페이스(일반적으로 ibdata1)에 저장되며 제거 스레드가 로그를 제거할 때까지 유지됩니다. 따라서 대규모 데이터 로드 트랜잭션은 시스템 테이블스페이스가 상당히 커지는 원인이 될 수 있고, 이때 사용되는 디스크 공간은 데이터베이스를 다시 만들어야 회수할 수 있습니다.

모든 MySQL 버전에서 제거 스레드는 가장 오래된 활성 트랜잭션이 커밋되거나 롤백될 때까지 실행 취소 로그를 제거할 수 없습니다. 데이터베이스가 로드 중에 다른 트랜잭션을 처리 중인 경우, 이들 트랜잭션의 실행 취소 로그 역시 누적되며 트랜잭션이 커밋되고 MVCC에 대해 실행 취소 로그가 필요한 다른 트랜잭션이 없더라도 실행 취소 로그를 제거할 수 없습니다. 이 경우 읽기 전용 트랜잭션을 포함한 모든 트랜잭션이 느려집니다. 이 속도 저하는 로드 트랜잭션뿐만 아니라 모든 트랜잭션이 변경하는 모든 행에 모든 트랜잭션이 액세스하기 때문에 발생합니다. 실제로 트랜잭션은 장기 실행 로드 트랜잭션으로 인해 실행 취소 로그 정리 중에 제거되지 않는 실행 취소 로그를 검사해야 합니다. 이는 수정된 행에 액세스하는 모든 작업의 성능에 영향을 줍니다.

### InnoDB 트랜잭션 복구 옵션
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Rollback"></a>

InnoDB는 커밋 작업을 최적화하지만 대규모 트랜잭션 롤백은 느립니다. 더 빠른 복구를 위해 시점 복구를 수행하거나 DB 스냅샷을 복원합니다. 자세한 내용은 [시점 복구](USER_PIT.md) 및 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md)(을)를 참조하세요.

## 데이터 가져오기 형식
<a name="MySQL.Procedural.Importing.Advanced.InputFormat"></a>

MySQL은 플랫 파일과 SQL이라는 두 가지 데이터 가져오기 형식을 지원합니다. 각 형식에 대한 정보를 검토하여 요구 사항에 가장 적합한 옵션을 결정합니다.

### 플랫 파일
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.FlatFiles"></a>

소규모 트랜잭션의 경우 `LOAD DATA LOCAL INFILE`을 사용하여 플랫 파일을 로드합니다. 이 데이터 가져오기 형식은 SQL 사용에 비해 다음과 같은 이점을 제공할 수 있습니다.
+ 더 낮은 네트워크 트래픽
+ 데이터 전송 비용 절감
+ 데이터베이스 처리 오버헤드 감소
+ 더 빠른 처리

`LOAD DATA LOCAL INFILE`은 전체 플랫 파일을 하나의 트랜잭션으로 로드합니다. 다음과 같은 이점을 위해 개별 파일의 크기를 작게 유지합니다.
+ **재개 기능** – 로드된 파일을 추적할 수 있습니다. 로드 중에 문제가 발생하면 중단된 부분부터 다시 시작할 수 있습니다. 일부 데이터를 Amazon RDS로 다시 전송해야 할 수도 있지만, 파일이 작으면 재전송되는 양이 최소화됩니다.
+ **병렬 데이터 로드** - 단일 파일 로드에 충분한 IOPS와 네트워크 대역폭이 있는 경우 병렬로 로드하면 시간이 절약될 수 있습니다.
+ **로드 속도 제어** - 데이터 로드가 다른 프로세스에 부정적인 영향을 미치는 경우 파일 간 간격을 늘려 로드 속도를 제어할 수 있습니다.

대규모 트랜잭션은 `LOAD DATA LOCAL INFILE`을 사용하여 데이터를 가져올 때의 이점을 줄입니다. 대량의 데이터를 더 작은 파일로 나눌 수 없는 경우 SQL을 사용하는 것을 고려하세요.

### SQL
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.SQL"></a>

SQL은 플랫 파일에 비해 한 가지 중요한 장점이 있는데, 그것은 바로 트랜잭션 크기를 작게 유지하기 쉽다는 점입니다. 그러나 SQL은 플랫 파일보다 로드하는 데 훨씬 더 오래 걸릴 수 있습니다. 또한 장애 발생 후 재개 위치를 결정하기 어려울 수 있으며, mysqldump 파일을 다시 시작할 수 없습니다. mysqldump 파일을 로드하는 동안 오류가 발생하는 경우 이 파일을 수정하거나 바꾸어야 로드를 재개할 수 있습니다. 또는 장애의 원인을 수정한 후 파일을 로드하고 재전송하기 전의 특정 시점으로 복원할 수 있습니다. 자세한 내용은 [시점 복구](USER_PIT.md) 섹션을 참조하세요.

## 데이터베이스 체크포인트에 Amazon RDS DB 스냅샷 사용
<a name="MySQL.Procedural.Importing.Advanced.Checkpoints"></a>

이진 로깅 없이 몇 시간 또는 며칠 등의 긴 기간 동안 데이터를 로드하는 경우 DB 스냅샷을 사용하여 데이터 안전을 위한 주기적 체크포인트를 제공하세요. 각 DB 스냅샷은 시스템 장애 또는 데이터 손상 이벤트 중에 복구 시점 역할을 하는 데이터베이스 인스턴스의 일관된 사본을 만듭니다. DB 스냅샷은 빠르기 때문에 체크포인트를 자주 제공해도 로드 성능에 미치는 영향이 최소화됩니다. 데이터베이스 내구성이나 복구 기능에 영향을 주지 않고 이전 DB 스냅샷을 삭제할 수 있습니다. DB 스냅샷에 대한 자세한 내용은 [수동 백업 관리](USER_ManagingManualBackups.md) 섹션을 참조하세요.

## 데이터베이스 로드 시간 단축
<a name="MySQL.Procedural.Importing.Advanced.LoadTime"></a>

다음 항목은 로드 시간을 줄이기 위한 추가 팁입니다.
+ MySQL 데이터베이스로 데이터를 로드하기 전에 모든 보조 인덱스를 만듭니다. 다른 데이터베이스 시스템과 달리 MySQL은 보조 인덱스를 추가하거나 수정할 때 전체 테이블을 다시 빌드합니다. 이 프로세스는 인덱스 변경 사항이 있는 새 테이블을 만들고, 모든 데이터를 복사하고, 원본 테이블을 삭제합니다.
+ 프라이머리 키 순서로 데이터를 로드합니다. InnoDB 테이블의 경우 이렇게 하면 로드 시간을 75%\$180% 줄이고 데이터 파일 크기를 50% 줄일 수 있습니다.
+ `foreign_key_checks`를 `0`으로 설정하여 외래 키 제약 조건을 비활성화합니다. `LOAD DATA LOCAL INFILE`을 통해 로드되는 플랫 파일의 경우 이 단계는 많은 경우에 필수입니다. 모든 로드에서 외래 키 검사를 비활성화하면 데이터 로드가 가속화됩니다. 로드가 완료된 후 `foreign_key_checks`를 `1`로 설정하고 데이터를 확인하여 제약 조건을 다시 활성화합니다.
+ 리소스 한도가 가까워지지 않은 한 데이터를 병렬로 로드합니다. 여러 테이블 세그먼트에서 동시 로드를 활성화하기 위해 적절한 경우 파티셔닝된 테이블을 사용합니다.
+ SQL 실행 오버헤드를 줄이려면 여러 `INSERT` 문을 단일 다중 값 `INSERT` 작업으로 결합합니다.`mysqldump`는 이 최적화를 자동으로 구현합니다.
+ `innodb_flush_log_at_trx_commit`을 `0`으로 설정하여 InnoDB 로그 IO 작업을 줄입니다. 로드가 완료되면 `innodb_flush_log_at_trx_commit`을 `1`로 복원합니다.
**주의**  
`innodb_flush_log_at_trx_commit`을 `0`으로 설정하면 InnoDB가 커밋이 발생할 때마다가 아닌 1초마다 로그를 플러시합니다. 이 설정은 성능을 높이지만 시스템 장애 발생 시 트랜잭션이 손실될 위험이 있습니다.
+ 읽기 전용 복제본이 없는 DB 인스턴스로 데이터를 로드하는 경우 `sync_binlog`를 `0`으로 설정합니다. 로드가 완료되면 `sync_binlog parameter`를 `1`로 복원합니다.
+ DB 인스턴스를 다중 AZ 배포로 변환하기 전에 단일 AZ DB 인스턴스로 데이터를 로드합니다. DB 인스턴스가 이미 다중 AZ 배포를 사용하는 경우 데이터 로드를 위해 단일 AZ 배포로 전환하지 않는 것이 좋습니다. 이렇게 해도 아주 작은 부분만이 개선됩니다.

# Amazon RDS for MySQL DB 인스턴스로 백업 복원
<a name="MySQL.Procedural.Importing"></a>

Amazon RDS는 백업 파일을 사용한 MySQL 데이터베이스 가져오기를 지원합니다. 데이터베이스의 백업을 만들어 Amazon S3에 저장한 다음 MySQL을 실행하는 새로운 Amazon RDS DB 인스턴스에 백업 파일을 복원할 수 있습니다. Amazon RDS는 모든 AWS 리전의 Amazon S3에서 백업 파일 가져오기를 지원합니다.

이 단원에서 설명하는 시나리오는 온프레미스 데이터베이스의 백업을 복원합니다. 데이터베이스에 액세스할 수 있는 한, 이 기법을 다른 위치(예: Amazon EC2 또는 다른 클라우드 서비스)의 데이터베이스에 사용할 수 있습니다.

다음 다이어그램은 지원되는 시나리오를 보여 줍니다.

![\[S3에서 백업 파일을 가져오는 MySQL.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MySQL-bak-file.png)


백업 파일을 만들고, 복사하고, 복원하는 동안 온프레미스 데이터베이스를 오프라인 상태로 둘 수 있다면 백업 파일을 사용하여 데이터베이스를 Amazon RDS로 가져오는 것이 좋습니다. 데이터베이스를 오프라인으로 둘 수 없는 경우 다음 방법 중 하나를 사용할 수 있습니다.
+ **이진 로그** - 먼저 이 주제에 설명된 대로 Amazon S3에서 Amazon RDS로 백업 파일을 가져옵니다. 그런 다음 이진 로그(binlog) 복제를 사용하여 데이터베이스를 업데이트합니다. 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 섹션을 참조하세요.
+ **AWS Database Migration Service** - AWS Database Migration Service를 사용하여 데이터베이스를 Amazon RDS로 마이그레이션합니다. 자세한 내용은 [AWS Database Migration Service란 무엇입니까?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하세요.

## Amazon S3에서 Amazon RDS로 백업 파일을 가져오는 설정 개요
<a name="MySQL.Procedural.Importing.Enabling"></a>

Amazon S3에서 Amazon RDS로 백업 파일을 가져오려면 다음 구성 요소가 필요합니다.
+ 백업 파일을 저장할 Amazon S3 버킷.

  Amazon S3 버킷이 이미 있다면 해당 버킷을 사용할 수 있습니다. Amazon S3 버킷이 없는 경우에는 새 버킷을 만들 수 있습니다. 자세한 내용은 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html) 섹션을 참조하세요.
+ Percona XtraBackup이 생성한 온프레미스 데이터베이스 백업.

  자세한 내용은 [데이터베이스 백업 생성](#MySQL.Procedural.Importing.Backup) 섹션을 참조하세요.
+ Amazon RDS가 S3 버킷에 액세스할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 역할입니다.

  이미 IAM 역할이 있는 경우 해당 역할을 사용하고 신뢰 및 권한 정책을 연결할 수 있습니다. 자세한 내용은 [수동으로 IAM 역할 만들기](#MySQL.Procedural.Importing.Enabling.IAM) 섹션을 참조하세요.

  IAM 역할이 없는 경우 다음의 두 가지 옵션이 있습니다.
  + 새 IAM 역할을 수동으로 만들 수 있습니다. 자세한 내용은 [수동으로 IAM 역할 만들기](#MySQL.Procedural.Importing.Enabling.IAM) 섹션을 참조하세요.
  + Amazon RDS에서 새 IAM 역할을 만들도록 선택할 수 있습니다. Amazon RDS에서 새 IAM 역할을 만들도록 하려면 [Amazon S3에서 새 MySQL DB 인스턴스로 데이터 가져오기](#MySQL.Procedural.Importing.PerformingImport) 섹션에서 AWS Management Console을 사용하는 절차를 따르세요.

## 데이터베이스 백업 생성
<a name="MySQL.Procedural.Importing.Backup"></a>

백업을 생성하려면 Percona XtraBackup 소프트웨어를 사용하십시오. 최신 버전의 Percona XtraBackup을 사용하는 것이 좋습니다. Percona XtraBackup은 Percona 웹 사이트의 [Software Downloads](https://www.percona.com/downloads/)에서 설치할 수 있습니다.

**주의**  
데이터베이스 백업을 만들 때 Xtrabackup은 xtrabackup\$1info 파일에 자격 증명을 저장할 수 있습니다. xtrabackup\$1info 파일의 `tool_command` 설정에 민감한 정보가 포함되어 있지 않은지 확인합니다.

사용하는 Percona XtraBackup 버전은 백업하는 MySQL 버전에 따라 다릅니다.
+ **MySQL 8.4** - Percona XtraBackup 버전 8.4를 사용합니다.
+ **MySQL 8.0** - Percona XtraBackup 버전 8.0을 사용합니다.
**참고**  
Percona XtraBackup 8.0.12 이상 버전은 모든 MySQL 8.0 버전의 마이그레이션을 지원합니다. RDS for MySQL 8.0.32 이상으로 마이그레이션하는 경우, Percona XtraBackup 8.0.12 이상을 사용해야 합니다.
+ **MySQL 5.7** - Percona XtraBackup 버전 2.4를 사용합니다.

Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일의 전체 백업을 생성할 수 있습니다. 또는 이미 Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일을 백업 중인 경우 기존의 전체 및 증분 백업 디렉터리 및 파일을 업로드할 수 있습니다.

Percona XtraBackup을 사용한 데이터베이스 백업에 관한 자세한 내용은 Percona 웹 사이트의 [Percona XtraBackup - Documentation](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)을 참조하세요.

### Percona XtraBackup을 사용한 전체 백업 생성
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full"></a>

Amazon RDS가 Amazon S3에서 복원할 수 있는 MySQL 데이터베이스 파일의 전체 백업을 만들려면 Percona XtraBackup 유틸리티(`xtrabackup`)를 사용합니다.

예를 들어, 다음 명령을 실행하면 MySQL 데이터베이스 백업을 만들고 `/on-premises/s3-restore/backup` 폴더에 파일을 저장합니다.

```
xtrabackup --backup --user=myuser --password=password --target-dir=/on-premises/s3-restore/backup
```

백업을 파일 하나로 압축하려는 경우(필요한 경우 나중에 여러 파일로 분할할 수 있음) MySQL 버전에 따라 다음 형식 중 하나로 백업을 저장할 수 있습니다.
+ **Gzip(.gz)** - MySQL 5.7 이하 버전의 경우
+ **tar(.tar)** - MySQL 5.7 이하 버전의 경우
+ **Percona xbstream(.xbstream) **- 모든 MySQL 버전의 경우

**참고**  
Percona XtraBackup 8.0 이상은 압축에 Percona xbstream만 지원합니다.

**MySQL 5.7 이하 버전**

다음 명령을 실행하면 Gzip 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다. 값을 실제 정보로 바꿉니다.

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | gzip - | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar.gz
```

**MySQL 5.7 이하 버전**

다음 명령을 실행하면 tar 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다. 값을 실제 정보로 바꿉니다.

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar
```

**모든 MySQL 버전**

다음 명령을 실행하면 xbstream 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다. 값을 실제 정보로 바꿉니다.

```
xtrabackup --backup --user=myuser --password=password --stream=xbstream \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.xbstream
```

**참고**  
다음 오류가 표시되는 경우 명령에서 파일 형식이 혼합된 것이 원인일 수 있습니다.  

```
ERROR:/bin/tar: This does not look like a tar archive
```

### Percona XtraBackup을 사용한 증분 백업 사용
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr"></a>

이미 Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일의 전체 및 증분 백업을 수행 중인 경우 전체 백업을 만들고 백업 파일을 Amazon S3로 업로드할 필요가 없습니다. 대신, 기존 백업 디렉터리 및 파일을 Amazon S3 버킷으로 복사하여 시간을 절약할 수 있습니다. Percona XtraBackup을 사용한 증분 백업 만들기에 대한 자세한 내용은 Percona 웹 사이트의 [Create an incremental backup](https://docs.percona.com/percona-xtrabackup/LATEST/create-incremental-backup.html)을 참조하세요.

기존의 전체 및 증분 백업 파일을 Amazon S3 버킷으로 복사할 때 기본 디렉터리의 콘텐츠를 반복적으로 복사해야 합니다. 이러한 콘텐츠에는 전체 백업과 모든 증분 백업 디렉터리 및 파일이 모두 포함됩니다. 이 복사본은 Amazon S3 버킷의 디렉터리 구조를 보존해야 합니다. Amazon RDS는 모든 파일과 디렉터리를 반복합니다. Amazon RDS는 각 증분 백업에 포함된 `xtrabackup-checkpoints` 파일을 사용하여 기본 디렉터리를 식별하고 로그 시퀀스 번호(LSN) 범위별로 증분 백업을 정렬합니다.

### Percona XtraBackup의 백업 고려 사항
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations"></a>

Amazon RDS은 파일 이름을 기준으로 백업 파일을 사용합니다. 파일 형식에 따라 적절한 파일 확장명으로 백업 파일의 이름을 지정합니다. 예를 들어 Percona xbstream 형식을 사용하여 저장된 파일에 `.xbstream`을 사용합니다.

Amazon RDS는 알파벳 순서뿐 아니라 자연수 순서로도 백업 파일을 사용합니다. `xtrabackup` 명령을 실행할 때는 `split` 옵션을 사용하여 적절한 순서로 백업 파일을 쓰고 이름을 지정해야 합니다.

Amazon RDS는 Percona XtraBackup을 사용하여 생성되는 부분 백업을 지원하지 않습니다. 데이터베이스의 소스 파일을 백업할 때 다음 옵션을 사용하여 부분 백업을 만들 수 없습니다.
+ `--tables`
+ `--tables-exclude`
+ `--tables-file`
+ `--databases`
+ `--databases-exclude`
+ `--databases-file`

## 수동으로 IAM 역할 만들기
<a name="MySQL.Procedural.Importing.Enabling.IAM"></a>

IAM 역할이 없는 경우에는 수동으로 새 역할을 만들 수 있습니다. 그러나 AWS Management Console를 사용하여 데이터베이스를 복원하는 경우에는 Amazon RDS가 이 새 IAM 역할을 만들도록 선택하는 것이 좋습니다. Amazon RDS에서 이 역할을 자동으로 생성하도록 하려면 [Amazon S3에서 새 MySQL DB 인스턴스로 데이터 가져오기](#MySQL.Procedural.Importing.PerformingImport) 섹션의 절차를 따릅니다.

Amazon S3에서 데이터베이스를 가져오기 위해 새 IAM 역할을 수동으로 만들려면 Amazon RDS에서 Amazon S3 버킷으로 권한을 위임하기 위한 역할을 만듭니다. IAM 역할을 만들 때 신뢰 및 권한 정책을 연결합니다. Amazon S3에서 백업 파일을 가져오려는 경우 다음 예제와 비슷한 신뢰 및 권한 정책을 사용합니다. 역할을 만드는 방법에 대한 자세한 내용은 [AWS 서비스에 대한 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)을 참조하세요.

신뢰 및 권한 정책에 따라 ARN(Amazon 리소스 이름)을 제공해야 합니다. ARN 형식에 대한 자세한 내용은 [ARN(Amazon 리소스 이름) 및 AWS 서비스 네임스페이스](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)를 참조하세요.

**Example Amazon S3에서 가져오기 위한 신뢰 정책**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AssumeRoleForBackup",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**Example Amazon S3에서 가져오기 위한 권한 정책 - IAM 사용자 권한**  
다음 예제에서는 *iam\$1user\$1id*를 자신의 값으로 바꿉니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3AccessRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/S3Access"
        }
    ]
}
```

**Example Amazon S3에서 가져오기 위한 권한 정책 - 역할 권한**  
다음 예제에서는 *amzn-s3-demo-bucket*과 *접두사*를 고유한 값으로 바꿉니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObject"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix*"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "kms:Decrypt"
            ],
        "Resource": [
            "arn:aws:kms:us-east-1:111122223333:key/key_id*"
            ]
        }
    ]
}
```
파일 이름 접두사를 포함하는 경우 접두사 다음에 별표(\$1)를 포함합니다. 접두사를 지정하지 않으려면 별표만 지정하면 됩니다.

## Amazon S3에서 새 MySQL DB 인스턴스로 데이터 가져오기
<a name="MySQL.Procedural.Importing.PerformingImport"></a>

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 새로운 MySQL DB 인스턴스로 Amazon S3의 데이터를 가져올 수 있습니다.

### 콘솔
<a name="MySQL.Procedural.Importing.Console"></a>

**Amazon S3에서 새 MySQL DB 인스턴스로 데이터를 가져오려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 만들려는 AWS 리전을 선택합니다. 데이터베이스 백업이 포함된 Amazon S3 버킷과 동일한 AWS 리전을 선택합니다.

1. 탐색 창에서 **Databases**(데이터베이스)를 선택합니다.

1. **S3에서 복원(Restore from S3)**을 선택합니다.

   **S3에서 복원하여 데이터베이스 생성(Create database by restoring from S3)** 페이지가 나타납니다.  
![\[S3에서 DB 인스턴스를 복원하기 위한 세부 정보를 지정하는 S3에서 복원하여 데이터베이스 생성 페이지.\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/mys-s3-ingestion.png)

1. **S3 소스**에서 다음을 수행합니다.

   1. 백업이 포함된 **S3 버킷**을 선택합니다.

   1. (선택 사항) **S3 접두사**에 Amazon S3 버킷에 저장되는 파일의 파일 경로 접두사를 입력합니다.

      접두사를 지정하지 않는 경우, Amazon RDS는 S3 버킷의 루트 폴더에 있는 모든 파일과 폴더를 사용하여 DB 인스턴스를 만듭니다. 접두사를 지정하는 경우 Amazon RDS는 파일의 경로가 지정된 접두사로 시작하는 S3 버킷의 파일과 폴더를 사용하여 DB 인스턴스를 만듭니다.

      예를 들어 이름이 backups인 S3의 하위 폴더의 백업 파일을 저장했고 여러 세트의 백업 파일이 각각 자체 디렉터리(gzip\$1backup1, gzip\$1backup2 등)에 들어 있다고 가정해봅시다. 이 경우 gzip\$1backup1 폴더의 파일에서 복원하려면 backups/gzip\$1backup1의 접두사를 지정합니다.

1. **엔진 옵션(Engine options)**에서 다음을 수행합니다.

   1. **엔진 유형(Engine type)**에서 **MySQL**을 선택합니다.

   1. **소스 엔진 버전(Source engine version)**에서 소스 데이터베이스의 MySQL 메이저 버전을 선택합니다.

   1. **엔진 버전**의 경우 AWS 리전에서 MySQL 메이저 버전의 기본 마이너 버전을 선택합니다.

      AWS Management Console에서 기본 마이너 버전만 사용할 수 있습니다. 가져오기가 완료되면 DB 인스턴스를 업그레이드할 수 있습니다.

1. **IAM 역할**의 경우, Amazon RDS가 Amazon S3 버킷에 액세스할 수 있도록 허용하는 필수 신뢰 정책 및 권한 정책으로 IAM 역할을 만들거나 선택합니다. 다음 조치 중 하나를 취하세요.
   + (권장) **새 역할 생성**을 선택하고 **IAM 역할 이름**을 입력합니다. 이 옵션을 사용하면 Amazon RDS가 자동으로 신뢰 정책 및 사용 권한 정책을 사용하여 역할을 만듭니다.
   + 기존 IAM 역할을 선택합니다. 이 역할이 [수동으로 IAM 역할 만들기](#MySQL.Procedural.Importing.Enabling.IAM)의 모든 기준을 충족하는지 확인하세요.

1. DB 인스턴스 정보를 지정합니다. 각 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 섹션을 참조하십시오.
**참고**  
새 DB 인스턴스에 충분한 스토리지를 할당해야 복원 작업이 성공할 수 있습니다.  
향후 자동 확장을 허용하려면 **추가 스토리지 구성**에서 **스토리지 자동 조정 활성화**를 선택합니다.

1. 필요에 따라 추가 설정을 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

### AWS CLI
<a name="MySQL.Procedural.Importing.CLI"></a>

AWS CLI를 사용하여 Amazon S3에서 데이터를 새 MySQL DB 인스턴스로 가져오려면 다음 옵션을 사용하여 [restore-db-instance-from-s3](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html) 명령을 실행합니다. 각 설정에 대한 자세한 내용은 [DB 인스턴스에 대한 설정](USER_CreateDBInstance.Settings.md) 섹션을 참조하세요.

**참고**  
새 DB 인스턴스에 충분한 스토리지를 할당해야 복원 작업이 성공할 수 있습니다.  
스토리지 자동 크기 조정을 활성화하고 향후 자동 확장을 허용하려면 또한 `--max-allocated-storage` 옵션을 사용합니다.
+ `--allocated-storage`
+ `--db-instance-identifier`
+ `--db-instance-class`
+ `--engine`
+ `--master-username`
+ `--manage-master-user-password`
+ `--s3-bucket-name`
+ `--s3-ingestion-role-arn`
+ `--s3-prefix`
+ `--source-engine`
+ `--source-engine-version`

**Example**  
대상 LinuxmacOS, 또는Unix:  

```
 1. aws rds restore-db-instance-from-s3 \
 2.     --allocated-storage 250 \
 3.     --db-instance-identifier my_identifier \
 4.     --db-instance-class db.m5.large \
 5.     --engine mysql \
 6.     --master-username admin \
 7.     --manage-master-user-password \
 8.     --s3-bucket-name amzn-s3-demo-bucket \
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \
10.     --s3-prefix bucket_prefix \
11.     --source-engine my_sql \
12.     --source-engine-version 8.0.32 \
13.     --max-allocated-storage 1000
```
Windows의 경우:  

```
 1. aws rds restore-db-instance-from-s3 ^
 2.     --allocated-storage 250 ^
 3.     --db-instance-identifier my_identifier ^
 4.     --db-instance-class db.m5.large ^
 5.     --engine mysql ^
 6.     --master-username admin ^
 7.     --manage-master-user-password ^
 8.     --s3-bucket-name amzn-s3-demo-bucket ^
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^
10.     --s3-prefix bucket_prefix ^
11.     --source-engine mysql ^
12.     --source-engine-version 8.0.32 ^
13.     --max-allocated-storage 1000
```

### RDS API
<a name="MySQL.Procedural.Importing.API"></a>

Amazon RDS API를 사용하여 Amazon S3에서 새 MySQL DB 인스턴스로 데이터를 가져오려면 [RestoreDBInstanceFromS3](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html) 작업을 호출하세요.

## Amazon S3에서 Amazon RDS로 백업 파일 가져오기에 대한 제한 및 고려 사항
<a name="MySQL.Procedural.Importing.Limitations"></a>

Amazon S3에서 RDS for MySQL DB 인스턴스로 백업 파일을 가져오는 경우 다음과 같은 제한 및 고려 사항이 적용됩니다.
+ 기존 DB 인스턴스가 아닌 새 DB 인스턴스로만 데이터를 마이그레이션할 수 있습니다.
+ Percona XtraBackup을 사용하여 Amazon S3에 데이터를 백업해야 합니다. 자세한 내용은 [데이터베이스 백업 생성](#MySQL.Procedural.Importing.Backup) 섹션을 참조하세요.
+ Amazon S3 버킷과 RDS for MySQL DB 인스턴스는 같은 AWS 리전에 있어야 합니다.
+ 다음의 소스에서는 복원할 수 없습니다.
  + Amazon S3로의 DB 인스턴스 스냅샷 내보내기. DB 인스턴스 스냅샷 내보내기에서 S3 버킷으로 데이터를 마이그레이션할 수 없습니다.
  + 암호화된 소스 데이터베이스. 그러나 마이그레이션 중인 데이터를 암호화할 수 있습니다. 또한 데이터를 마이그레이션 프로세스 동안 암호화하지 않은 상태로 유지할 수도 있습니다.
  + MySQL 5.5 또는 5.6 데이터베이스.
+ Percona Server for MySQL은 `mysql schema`에 `compression_dictionary*` 테이블을 포함할 수 있으므로 RDS for MySQL은 소스 데이터베이스로 이를 지원하지 않습니다.
+ RDS for MySQL은 메이저 버전 또는 마이너 버전에서 역방향 마이그레이션을 지원하지 않습니다. 예를 들어, MySQL 버전 8.0에서 RDS for MySQL 5.7로 마이그레이션할 수 없으며, MySQL 버전 8.0.32에서 RDS for MySQL 버전 8.0.26으로 마이그레이션할 수 없습니다.
+ Amazon RDS는 db.t2.micro DB 인스턴스 클래스에서 Amazon S3로부터의 가져오기를 지원하지 않습니다. 그러나 다른 DB 인스턴스 클래스로 복원한 다음 나중에 DB 인스턴스 클래스를 변경할 수 있습니다. 인스턴스 클래스에 대한 자세한 내용은 [ DB 인스턴스 클래스의 하드웨어 사양](Concepts.DBInstanceClass.Summary.md) 섹션을 참조하십시오.
+ Amazon S3는 Amazon S3 버킷에 업로드되는 파일 크기를 5TB로 제한합니다. 백업 파일이 5TB를 초과하면 해당 백업 파일을 더 작은 크기의 파일들로 나누어야 합니다.
+ Amazon RDS는 Amazon S3 버킷에 업로드되는 파일을 100만 개로 제한합니다. 모든 전체 및 증분 백업을 포함하여 데이터베이스에 대한 백업 데이터가 100만 개의 파일을 초과하는 경우 Gzip(.gz), tar(.tar.gz) 또는 Percona xbstream(.xbstream) 파일을 사용하여 전체 및 증분 백업 파일을 Amazon S3 버킷에 저장합니다. Percona Xtrabackup 8.0은 압축에 Percona xbstream만 지원합니다.
+ 각 DB 인스턴스에 관리 서비스를 제공하기 위해 Amazon RDS는 DB 인스턴스를 만들 때 `rdsadmin` 사용자를 만듭니다. `rdsamin`은 Amazon RDS에서 예약된 사용자이므로 다음과 같은 제한 사항이 적용됩니다.
  + Amazon RDS는 `'rdsadmin'@'localhost'`를 정의자로 사용하는 함수, 프로시저, 뷰, 이벤트 및 트리거를 가져올 수 없습니다. 자세한 내용은 ['rdsamin'@'localhost'를 정의자로 사용하여 저장된 객체](#MySQL.Procedural.Importing.StoredObjects) 및 [마스터 사용자 계정 권한](UsingWithRDS.MasterAccounts.md)(을)를 참조하세요.
  + DB 인스턴스를 만들 때 Amazon RDS는 지원되는 최대 권한이 있는 마스터 사용자를 만듭니다. 백업에서 복원하는 동안 Amazon RDS는 가져오는 사용자에게 할당된 지원되지 않는 권한을 자동으로 제거합니다.

    이로 인해 영향을 받을 수 있는 사용자를 식별하려면 [지원되지 않는 권한을 지닌 사용자 계정](#MySQL.Migrating.ExtMySQL.Prechecks.Users) 섹션을 참조하세요. RDS for MySQL에서 지원되는 권한에 대한 자세한 내용은 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 섹션을 참조하세요.
+ Amazon RDS는 `mysql` 스키마에서 사용자가 만든 테이블을 마이그레이션하지 않습니다.
+ `innodb_data_file_path` 파라미터는 기본 데이터 파일 이름 `ibdata1:12M:autoextend`를 사용하는 데이터 파일 하나만 사용하여 구성해야 합니다. 이 방법을 사용하여 두 개의 데이터 파일이 있거나 다른 이름의 데이터 파일이 있는 데이터베이스를 마이그레이션할 수 있습니다.

  다음 예제는 Amazon RDS에서 허용하지 않는 파일 이름입니다.
  + `innodb_data_file_path=ibdata1:50M`
  + `ibdata2:50M:autoextend`
  + `innodb_data_file_path=ibdata01:50M:autoextend`
+ 기본 MySQL 데이터 디렉터리 외부에서 정의된 테이블이 있는 원본 데이터베이스에서 마이그레이션할 수 없습니다.
+ 이 방법을 사용할 때 압축되지 않은 백업에 지원되는 최대 크기는 64TiB로 제한됩니다. 압축 백업의 경우 압축되지 않은 공간 관련 요구 사항을 고려하여 이 제한 수준이 낮게 적용됩니다. 이 경우 지원되는 최대 백업 크기는 `64 TiB - compressed backup size`입니다.

  RDS for MySQL에서 지원하는 최대 데이터베이스 크기에 대한 자세한 내용은 [범용 SSD 스토리지](CHAP_Storage.md#Concepts.Storage.GeneralSSD) 및 [프로비저닝된 IOPS SSD 스토리지](CHAP_Storage.md#USER_PIOPS) 섹션을 참조하세요.
+ Amazon RDS는 MySQL 및 기타 외부 구성 요소와 플러그인 가져오기를 지원하지 않습니다.
+ Amazon RDS는 데이터베이스에서 모든 것을 복원하지 않습니다. 소스 MySQL 시스템 데이터베이스에서 다음 항목의 데이터베이스 스키마와 값을 저장한 다음, 복원한 RDS for MySQL DB 인스턴스가 만들어지면 여기에 추가하는 것이 좋습니다.
  + 사용자 계정
  + Functions
  + 저장 프로시저
  + 시간대 정보. 시간대 정보는 RDS for MySQL DB 인스턴스의 로컬 운영 체제에서 로드됩니다. 자세한 내용은 [MySQL DB 인스턴스의 현지 시간대](MySQL.Concepts.LocalTimeZone.md) 섹션을 참조하세요.

### 'rdsamin'@'localhost'를 정의자로 사용하여 저장된 객체
<a name="MySQL.Procedural.Importing.StoredObjects"></a>

Amazon RDS는 `'rdsadmin'@'localhost'`를 정의자로 사용하는 함수, 프로시저, 뷰, 이벤트 및 트리거를 가져올 수 없습니다.

소스 MySQL 데이터베이스에서 다음 SQL 스크립트를 사용하면 지원되지 않는 정의자가 있는 저장된 객체를 나열할 수 있습니다.

```
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer.

SELECT
    ROUTINE_SCHEMA,
    ROUTINE_NAME
FROM
    information_schema.routines
WHERE
    definer = 'rdsadmin@localhost';

-- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer.

SELECT
    TRIGGER_SCHEMA,
    TRIGGER_NAME,
    DEFINER
FROM
    information_schema.triggers
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists events with `rdsadmin`@`localhost` as the definer.

SELECT
    EVENT_SCHEMA,
    EVENT_NAME
FROM
    information_schema.events
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists views with `rdsadmin`@`localhost` as the definer.
SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    information_schema.views
WHERE
    DEFINER = 'rdsadmin@localhost';
```

### 지원되지 않는 권한을 지닌 사용자 계정
<a name="MySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

RDS for MySQL에서 지원되지 않는 권한을 지닌 사용자 계정의 경우, 가져올 때 지원되지 않는 권한은 제외됩니다. 지원되는 권한 목록은 [RDS for MySQL에 대한 역할 기반 권한 모델](Appendix.MySQL.CommonDBATasks.privilege-model.md) 섹션을 참조하세요.

소스 데이터베이스에서 다음 SQL 쿼리를 실행하여 지원되지 않는 권한이 있는 사용자 계정을 나열할 수 있습니다.

```
SELECT
    user,
    host
FROM
    mysql.user
WHERE
    Shutdown_priv = 'y'
    OR File_priv = 'y'
    OR Super_priv = 'y'
    OR Create_tablespace_priv = 'y';
```

# 외부 MySQL 데이터베이스에서 Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기
<a name="mysql-importing-data-external-database"></a>

기존 MySQL 데이터베이스에서 RDS for MySQL DB 인스턴스로 데이터를 가져올 수 있습니다. 이렇게 하려면 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)를 사용하여 데이터베이스를 복사하고 RDS for MySQL DB 인스턴스에 바로 파이핑합니다. `mysqldump` 명령줄 유틸리티는 한 MySQL 서버에서 다른 MySQL 또는 MariaDB 서버로 데이터를 전송하고 백업본을 만드는 데 흔히 사용됩니다. 이 유틸리티는 MySQL 클라이언트 소프트웨어와 함께 포함되어 있습니다.

**참고**  
MySQL DB 인스턴스에 많은 양의 데이터를 가져와서 내보내는 경우 `xtrabackup` 백업 파일 및 Amazon S3를 사용하여 Amazon RDS 내부 및 외부로 데이터를 더 빠르고 안정적으로 이동할 수 있습니다. 자세한 내용은 [Amazon RDS for MySQL DB 인스턴스로 백업 복원](MySQL.Procedural.Importing.md) 섹션을 참조하세요.

외부 데이터베이스에서 Amazon RDS DB 인스턴스로 데이터를 이동하는 일반적인 `mysqldump` 명령은 다음 예와 같습니다. 값을 실제 정보로 바꿉니다.

```
mysqldump -u local_user \
    --databases database_name \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mysql -u RDS_user \
        --port=port_number \
        --host=host_name \
        -pRDS_password
```

**중요**  
`-p` 옵션과 입력한 암호 사이에 공백이 없어야 합니다.  
보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

다음 권장 사항과 고려 사항을 잘 파악하고 있어야 합니다.
+ 덤프 파일에서 다음 스키마를 제외합니다.
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 유틸리티는 기본적으로 이러한 스키마를 제외합니다.
+ 사용자 및 권한을 마이그레이션해야 하는 경우 이를 다시 생성하는 데이터 제어 언어(DCL)를 생성하는 도구 사용을 고려합니다. 예를 들어 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 유틸리티가 있습니다.
+ 가져오기를 수행하려면 사용자가 DB 인스턴스에 액세스할 수 있어야 합니다. 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 섹션을 참조하세요.

사용되는 파라미터는 다음과 같습니다.
+ `-u local_user` – 사용자 이름을 지정하기 위해 사용합니다. 이 파라미터를 처음 사용할 때, 로컬 MySQL 데이터베이스에서 `--databases` 파라미터로 식별되는 사용자 계정 이름을 지정합니다.
+ `--databases database_name` – 로컬 MySQL 인스턴스에서 Amazon RDS로 가져오려는 데이터베이스 이름을 지정합니다.
+ `--single-transaction` – 로컬 데이터베이스에서 로드한 모든 데이터가 단일 시점에서 일치하는지 확인하기 위해 사용합니다. `mysqldump`가 데이터를 읽는 동안 데이터를 변경하는 다른 프로세스가 있는 경우, 이 파라미터를 사용하여 데이터 무결성을 유지합니다.
+ `--compress` – 데이터를 Amazon RDS로 전송하기 전에 로컬 데이터베이스에서 데이터를 압축하여 네트워크 대역폭 사용을 줄이기 위해 사용합니다.
+ `--order-by-primary` – 기본 키를 기준으로 각 테이블의 데이터를 정렬하여 로드 시간을 줄이기 위해 사용합니다.
+ `--routines` - 복사하려는 데이터베이스에 저장 프로시저 또는 함수와 같은 루틴이 있는 경우 사용합니다. 파라미터를 `0`으로 설정하면 가져오기 프로세스 중에 루틴이 제외됩니다. 그런 다음 나중에 Amazon RDS 데이터베이스에서 루틴을 수동으로 다시 만듭니다.
+ `--triggers` - 복사 중인 데이터베이스에 트리거가 있는 경우 사용합니다. 파라미터를 `0`으로 설정하면 가져오기 프로세스 중에 트리거가 제외됩니다. 그런 다음 Amazon RDS 데이터베이스에서 트리거를 수동으로 다시 만듭니다.
+ `--events` - 복사하려는 데이터베이스에 이벤트가 있는 경우 사용합니다. 파라미터를 `0`으로 설정하면 가져오기 프로세스 중에 이벤트가 제외됩니다. 그런 다음 Amazon RDS 데이터베이스에서 이벤트를 수동으로 다시 만듭니다.
+ `-plocal_password` – 암호를 지정하기 위해 사용합니다. 이 파라미터를 처음 사용할 때, 첫 번째 `-u` 파라미터로 식별되는 사용자 계정 암호를 지정합니다.
+ `-u RDS_user` – 사용자 이름을 지정하기 위해 사용합니다. 이 파라미터를 두 번째로 사용할 때, `--host` 파라미터로 식별되는 MySQL DB 인스턴스에 대한 기본 데이터베이스의 사용자 계정 이름을 지정합니다.
+ `--port port_number` - MySQL DB 인스턴스의 포트를 지정하기 위해 사용합니다. DB 인스턴스를 만들 때 값을 변경하지 않는 한, 기본값은 3306입니다.
+ `--host host_name` - Amazon RDS DB 인스턴스 엔드포인트의 도메인 이름 시스템(DNS) 이름을 지정하기 위해 사용합니다(예:)`myinstance.123456789012.us-east-1.rds.amazonaws.com`. Amazon RDS 콘솔의 인스턴스 세부 정보에서 엔드포인트 값을 찾을 수 있습니다.
+ `-pRDS_password` – 암호를 지정하기 위해 사용합니다. 이 파라미터를 두 번째로 사용할 때, 두 번째 `-u` 파라미터로 식별되는 사용자 계정 암호를 지정합니다.

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

**예제**

다음 예제에서는 로컬 호스트에 있는 `world` 샘플 데이터베이스를 RDS for MySQL DB 인스턴스로 복사합니다. 값을 실제 정보로 바꿉니다.

대상 LinuxmacOS, 또는Unix:

```
sudo mysqldump -u local_user \
    --databases world \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mysql -u rds_user \
        --port=3306 \
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com \
        -pRDS_password
```

Windows의 경우:

다음 명령은 Windows 프로그램 메뉴에서 **명령 프롬프트**를 마우스 오른쪽 버튼으로 클릭하고 **관리자 권한으로 실행**을 선택하여 열린 명령 프롬프트에서 실행해야 합니다. 값을 실제 정보로 바꿉니다.

```
mysqldump -u local_user ^
    --databases world ^
    --single-transaction ^
    --compress ^
    --order-by-primary  ^
    --routines=0 ^
    --triggers=0 ^
    --events=0 ^
    -plocal_password | mysql -u RDS_user ^
        --port=3306 ^
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com ^
        -pRDS_password
```

**참고**  
보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

# 가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기
<a name="mysql-importing-data-reduced-downtime"></a>

라이브 애플리케이션을 지원하는 외부 MySQL 데이터베이스에서 RDS for MySQL DB 인스턴스 또는 RDS for MySQL 다중 AZ DB 클러스터로 데이터를 가져와야 할 경우가 있습니다. 다음 절차를 통해 애플리케이션 가용성에 미치는 영향을 최소화하세요. 이 절차는 대규모 데이터베이스로 작업하는 경우에도 유용합니다. 이 절차를 통해 네트워크를 거쳐 AWS로 전달되는 데이터의 양을 줄여 가져오기 비용을 줄일 수 있습니다.

이 절차에서는 데이터베이스 데이터의 복사본을 Amazon EC2 인스턴스로 전송하고 데이터를 새 Amazon RDS 데이터베이스로 가져옵니다. 그런 다음, 애플리케이션을 Amazon RDS 데이터베이스로 리디렉션하기 전에 복제를 사용하여 Amazon RDS 데이터베이스를 라이브 외부 인스턴스에 맞춰 최신 상태로 업데이트합니다. 이진 로그 좌표를 기반으로 복제를 구성합니다.

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

다음 다이어그램은 외부 MySQL 데이터베이스를 Amazon RDS의 MySQL 데이터베이스로 가져오는 것을 보여 줍니다.

![\[외부 MySQL 데이터베이스를 Amazon RDS의 MySQL 데이터베이스로 가져오는 것을 보여 주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_1.png)


## 작업 1: 기존 데이터베이스의 복사본 만들기
<a name="mysql-importing-data-reduced-downtime-copy-database"></a>

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

다음 다이어그램은 MySQL 데이터베이스의 백업을 만드는 방법을 보여 줍니다.

![\[MySQL 데이터베이스의 백업 만드는 방법을 보여 주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_2.png)


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

또한, 로드를 위해 구분 기호로 분리된 텍스트 형식을 사용할 때의 이점에 대해 `mysqldump` 성능상의 이점을 비교 검토하는 것을 권장합니다. 구분 기호로 분리된 텍스트 형식을 사용하는 백업에서는 덤프되는 각 테이블에 대해 탭으로 구분된 텍스트 파일이 생성됩니다. 데이터베이스를 가져오는 데 필요한 시간을 줄이기 위해 `LOAD DATA LOCAL INFILE` 명령을 사용하여 이런 파일을 병렬로 로드할 수 있습니다. 자세한 내용은 모든 소스에서 데이터 가져오기 절차의 [5단계: 데이터 로드](mysql-importing-data-any-source.md#mysql-importing-data-any-source-load-data) 섹션을 참조하세요.

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

다음 권장 사항과 고려 사항을 잘 파악하고 있어야 합니다.
+ 데이터베이스의 일관된 상태를 덤프하기 때문에 `--single-transaction`와 함께 `mysqldump` 옵션을 사용하세요. 덤프 파일이 올바른지 확인하려면 `mysqldump`가 실행되는 동안 데이터 정의 언어(DDL) 문을 실행하지 마시기 바랍니다. 이러한 작업에 대한 유지 관리 기간을 예약할 수 있습니다.
+ 덤프 파일에서 다음 스키마를 제외합니다.
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 유틸리티는 기본적으로 이러한 스키마를 제외합니다.
+ 사용자 및 권한을 마이그레이션해야 하는 경우 이를 다시 생성하는 데이터 제어 언어(DCL)를 생성하는 도구 사용을 고려합니다. 예를 들어 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 유틸리티가 있습니다.

### 복제 옵션을 설정하려면
<a name="mysql-importing-data-reduced-downtime-set-replication-options"></a>

1. `my.cnf` 파일을 편집합니다. 이 파일은 보통 `/etc` 아래에 있습니다.

   ```
   sudo vi /etc/my.cnf
   ```

   `log_bin` 및 `server_id` 옵션을 `[mysqld]` 섹션에 추가합니다. `log_bin` 옵션은 이진 로그 파일에 대한 파일 이름 식별자를 제공합니다. `server_id` 옵션은 소스-복제본 관계에서 서버의 고유 식별자를 제공합니다.

   다음 예제에서는 `my.cnf` 파일의 업데이트된 `[mysqld]` 섹션을 보여줍니다.

   ```
   [mysqld]
   log-bin=mysql-bin
   server-id=1
   ```

   자세한 내용은 MySQL 설명서의 [Setting the Replication Source Configuration](https://dev.mysql.com/doc/refman/8.4/en/replication-howto-masterbaseconfig.html)을 참조하세요.

1. 다중 AZ DB 클러스터를 사용한 복제의 경우 `ENFORCE_GTID_CONSISTENCY` 및 `GTID_MODE` 파라미터를 `ON`으로 설정합니다.

   ```
   mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
   ```

   ```
   mysql> SET @@GLOBAL.GTID_MODE = ON;
   ```

   DB 인스턴스를 사용한 복제에는 이러한 설정이 필요하지 않습니다.

1. `mysql` 서비스를 다시 시작합니다.

   ```
   sudo service mysqld restart
   ```

### 기존 데이터베이스의 백업 복사본을 만들려면
<a name="mysql-importing-data-reduced-downtime-create-backup"></a>

1. SQL 또는 구분 기호로 분리된 텍스트 형식을 지정하는 `mysqldump` 유틸리티를 사용하여 데이터 백업을 만듭니다.

   MySQL 8.0.25 이하 버전에서는 서버 간 복제를 시작할 때 사용할 수 있는 백업 파일을 만들려면 `--master-data=2`를 지정합니다. MySQL 8.0.26 이상 버전에서는 서버 간 복제를 시작할 때 사용할 수 있는 백업 파일을 만들려면 `--source-data=2`를 지정합니다. 자세한 내용은 MySQL 설명서의 [mysqldump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)을 참조하세요.

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

   백업에 MySQL 시스템 데이터베이스가 포함되지 않도록 하려면 `mysqldump`에 `--all-databases` 옵션을 사용하지 마세요. 자세한 내용은 MySQL 설명서의 [Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)를 참조하세요.

   필요한 경우 `chmod`를 사용하여 백업 파일이 만들어질 디렉터리가 쓰기 가능한 디렉터리가 되도록 하세요.
**중요**  
Windows에서는 명령 창을 관리자 권한으로 실행하십시오.
   + SQL 출력을 표시하려면 다음 명령을 사용합니다.

     대상 LinuxmacOS, 또는Unix:

     ```
     sudo mysqldump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**참고**  
보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.

     Windows의 경우:

     ```
     mysqldump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**참고**  
보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.
   + 구분 기호로 분리된 텍스트 출력을 표시하려면 다음 명령을 사용합니다.

     대상 LinuxmacOS, 또는Unix:

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     Windows의 경우:

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**참고**  
보안 모범 사례로 예시에 표시된 프롬프트 이외의 자격 증명을 지정하는 것이 좋습니다.  
Amazon RDS 데이터베이스에서 저장 프로시저, 트리거, 함수 또는 이벤트를 수동으로 만들어야 합니다. 복사 중인 데이터베이스에 이런 객체가 하나라도 있는 경우에는 `mysqldump`를 실행할 때 이런 객체를 제외합니다. 이렇게 하려면 `mysqldump` 명령에 다음 인수를 포함하세요.  
`--routines=0`
`--triggers=0`
`--events=0`

     MySQL 8.0.22 이하 버전의 경우 `mysqldump`를 실행하고 구분된 텍스트 형식을 지정하면 `CHANGE MASTER TO` 설명이 반환됩니다. 이 설명에는 마스터 로그 파일 이름과 위치가 포함됩니다. MySQL 8.0.23 이상 버전의 경우 구분된 텍스트 형식을 사용하여 `mysqldump`를 실행하면 `CHANGE REPLICATION SOURCE TO` 설명이 반환됩니다. 이 설명에는 소스 로그 파일 이름과 위치가 포함됩니다. 외부 인스턴스가 MySQL 8.0.23 이상 버전인 경우 `MASTER_LOG_FILE` 및 `MASTER_LOG_POS`의 값을 기록해 둡니다. 복제를 설정할 때 이러한 값이 필요합니다.

     MySQL 8.0.22 이하 버전에 대해 다음 출력이 반환됩니다.

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

     MySQL 8.0.23 이상 버전에 대해 다음 출력이 반환됩니다.

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;
     ```

     MySQL 8.0.22 이하 버전에서 SQL 형식을 사용하는 경우 백업 파일의 `CHANGE MASTER TO` 설명에서 마스터 로그 파일 이름 및 위치를 가져올 수 있습니다. MySQL 8.0.23 이상 버전에서 SQL 형식을 사용하는 경우 백업 파일의 `CHANGE REPLICATION SOURCE TO` 설명에서 소스 로그 파일 이름 및 위치를 가져올 수 있습니다.

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

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

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## 작업 2: Amazon EC2 인스턴스 만들기 및 압축된 데이터베이스 복사
<a name="mysql-importing-data-reduced-downtime-create-ec2-copy-database"></a>

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

다음 다이어그램은 데이터베이스 백업을 Amazon EC2 인스턴스로 복사하는 것을 보여줍니다.

![\[Amazon EC2 인스턴스에 데이터베이스 백업을 복사하는 것을 보여 주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_3.png)


### Amazon EC2 인스턴스를 만들고 데이터를 복사하려면
<a name="mysql-importing-data-reduced-downtime-create-ec2"></a>

1. Amazon RDS 데이터베이스를 만들려는 AWS 리전에서 가상 프라이빗 클라우드(VPC), VPC 보안 그룹 및 VPC 서브넷을 만듭니다. VPC 보안 그룹의 인바운드 규칙에서 애플리케이션에 필요한 IP 주소가 AWS에 연결하도록 허용하는지 확인합니다. IP 주소의 범위(예: `203.0.113.0/24`) 또는 다른 VPC 보안 그룹을 지정할 수 있습니다. [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc)을 사용하여 VPC, 서브넷 및 보안 그룹을 만들고 관리할 수 있습니다. 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [Getting started with Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)를 참조하세요.

1. [Amazon EC2 콘솔](https://console.aws.amazon.com/ec2)을 열고 Amazon EC2 인스턴스와 Amazon RDS 데이터베이스를 모두 포함하는 AWS 리전을 선택합니다. 1단계에서 만든 VPC, 서브넷 및 보안 그룹을 사용하여 Amazon EC2 인스턴스를 시작합니다. 데이터베이스 백업 파일이 압축되어 있지 않을 때는 이 파일을 위한 충분한 스토리지 공간을 가진 인스턴스 유형을 선택해야 합니다. Amazon EC2 인스턴스에 관한 세부 정보는 *Amazon Elastic Compute Cloud 사용 설명서*의 [Getting started with Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)를 참조하세요.

1. Amazon EC2 인스턴스에서 Amazon RDS 데이터베이스로 연결하려면 VPC 보안 그룹을 편집하세요. EC2 인스턴스의 프라이빗 IP 주소를 지정하는 인바운드 규칙을 추가합니다. EC2 콘솔 창에 있는 **인스턴스** 창의 **세부 정보** 탭에서 프라이빗 IP 주소를 찾을 수 있습니다. VPC 보안 그룹을 편집하고 인바운드 규칙을 추가하려면 EC2 콘솔 탐색 창에서 **보안 그룹(Security Groups)**를 선택하고 보안 그룹을 선택한 다음 EC2 인스턴스의 프라이빗 IP 주소를 지정하는 MySQL 또는 Aurora에 대한 인바운드 규칙을 추가합니다. 인바운드 규칙을 VPC 보안 그룹에 추가하는 방법을 알아보려면 *Amazon Virtual Private Cloud 사용 설명서*의 [Security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)를 참조하세요.

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

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**중요**  
민감한 데이터는 반드시 보안 네트워크 전송 프로토콜을 사용하여 복사해야 합니다.

1. Amazon EC2 인스턴스에 연결하고 다음 명령을 사용하여 최신 업데이트와 MySQL 클라이언트 도구를 설치합니다.

   ```
   sudo yum update -y
   sudo yum install mysql -y
   ```

   자세한 내용은 *Amazon Elastic Compute Cloud 사용 설명서*의 [Connect to your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)를 참조하세요.
**중요**  
이 예제에서는 Amazon Linux AMI 배포의 Amazon Machine Image(AMI)에 MySQL 클라이언트를 설치합니다. 이 예제에서는 Ubuntu 또는 Red Hat Enterprise Linux 등 다른 배포에 MySQL 클라이언트를 설치하지 않습니다. MySQL 설치에 대한 자세한 내용은 MySQL 설명서의 [Installing MySQL](https://dev.mysql.com/doc/refman/8.4/en/installing.html)을 참조하세요.

1. Amazon EC2 인스턴스에 연결되어 있는 상태에서 데이터베이스 백업 파일의 압축을 풉니다. 다음 명령은 예시입니다.
   + SQL 출력을 압축 해제하려면 다음 명령을 사용합니다.

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

     ```
     tar xzvf backup.tar.gz
     ```

## 작업 3: MySQL 데이터베이스 만들기 및 Amazon EC2 인스턴스에서 데이터 가져오기
<a name="mysql-importing-data-reduced-downtime-create-database-import-data"></a>

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

다음 다이어그램은 Amazon EC2 인스턴스에서 MySQL 데이터베이스로 백업을 가져오는 것을 보여줍니다.

![\[EC2 인스턴스에서 MySQL 데이터베이스로 백업을 가져오는 것을 보여 주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_4.png)


### MySQL 데이터베이스를 만들고 데이터 가져오기
<a name="mysql-importing-data-reduced-downtime-create-database"></a>

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

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

   RDS for MySQL 다중 AZ DB 클러스터를 만들려면 [Amazon RDS용 다중 AZ DB 클러스터 생성](create-multi-az-db-cluster.md) 섹션의 지침을 따르세요.

   RDS for MySQL DB 인스턴스를 생성하려면 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md)의 지침과 다음 지침을 따르세요.
   + 소스 DB 인스턴스와 호환되는 DB 엔진 버전을 지정합니다.
   + Amazon EC2 인스턴스에서와 동일한 Virtual Private Cloud(VPC) 및 VPC 보안 그룹을 지정합니다. 이 접근 방식에서는 Amazon EC2 인스턴스와 Amazon RDS 인스턴스가 네트워크를 통해 서로를 볼 수 있습니다. DB 인스턴스가 공개적으로 액세스 가능한지 확인합니다. 다음 섹션에 설명한 대로 소스 데이터베이스를 사용하여 복제를 설정하려면 DB 인스턴스에 공개적으로 액세스할 수 있어야 합니다.
   + 데이터베이스 백업을 가져온 후에만 여러 가용 영역, 백업 보존 또는 읽기 전용 복제본을 구성해야 합니다 가져오기가 완료되면 프로덕션 인스턴스에 대해 다중 AZ 및 백업 보존을 설정할 수 있습니다.

1. Amazon RDS 데이터베이스에 대한 기본 구성 옵션을 검토합니다. 데이터베이스에 대한 기본 파라미터 그룹에 원하는 구성 옵션이 없는 경우, 원하는 구성 옵션이 있는 다른 파라미터 그룹을 찾거나 새 파라미터 그룹을 생성합니다. 파라미터 그룹을 생성하는 것에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 섹션을 참조하세요.

1. 마스터 사용자로 Amazon RDS 데이터베이스에 연결합니다. DB 인스턴스에 액세스해야 하는 서비스, 애플리케이션 및 관리자를 지원하는 데 필요한 사용자를 만듭니다. Amazon RDS 데이터베이스의 호스트 이름은 포트 번호를 포함하지 않은 DB 인스턴스의 **엔드포인트** 값입니다(예: `mysampledb.123456789012.us-west-2.rds.amazonaws.com`). Amazon RDS 콘솔의 데이터베이스 세부 정보에서 엔드포인트 값을 찾을 수 있습니다.

1. Amazon EC2 인스턴스에 연결합니다. 자세한 내용은 *Amazon Elastic Compute Cloud 사용 설명서*의 [Connect to your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)를 참조하세요.

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

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

   *host\$1name*은 Amazon RDS 데이터베이스 엔드포인트입니다.

1. `mysql` 프롬프트에서 `source` 명령을 실행하고 데이터베이스 덤프 파일의 이름을 전달합니다. 이 명령은 데이터를 Amazon RDS DB 인스턴스로 로드합니다.
   + SQL 형식인 경우 다음 명령을 사용합니다.

     ```
     mysql> source backup.sql;
     ```
   + 구분 기호로 분리된 텍스트 형식의 경우 Amazon RDS 데이터베이스를 설정할 때 만든 기본 데이터베이스가 아니라면 먼저 데이터베이스를 만듭니다.

     ```
     mysql> create database database_name;
     mysql> use database_name;
     ```

     그런 다음, 테이블을 생성합니다.

     ```
     mysql> source table1.sql
     mysql> source table2.sql
     etc...
     ```

     그런 다음, 데이터를 가져옵니다.

     ```
     mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     성능을 개선하려면 여러 연결에서 이들 작업을 병렬로 수행하여 모든 테이블이 만들어진 다음에 동시에 로드되도록 할 수 있습니다.
**참고**  
처음에 테이블을 덤프할 때 `mysqldump`와 함께 데이터 서식 옵션을 사용했다면, `LOAD DATA LOCAL INFILE`과 같은 옵션을 사용하여 데이터 파일 내용을 올바로 해석해야 합니다.

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

이 절차에 사용되는 Amazon EC2 인스턴스가 더 이상 필요하지 않은 경우 EC2 인스턴스를 종료하여 AWS 리소스 사용량을 줄여야 합니다. EC2 인스턴스를 종료하려면 *Amazon Elastic Compute Cloud 사용 설명서*의 [Terminate an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)를 참조하세요.

## 작업 4: 외부 데이터베이스에서 새 Amazon RDS 데이터베이스로 데이터 복제
<a name="mysql-importing-data-reduced-downtime-replicate-data"></a>

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

![\[외부 MySQL 데이터베이스에서 Amazon RDS의 데이터베이스로 데이터를 복제하는 것을 보여주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_5.png)


Amazon RDS 데이터베이스에서 복제를 시작하는 데 필요한 권한은 제한되고 Amazon RDS 마스터 사용자는 사용할 수 없습니다. 따라서 메이저 엔진 버전에 적합한 다음의 Amazon RDS 저장 프로시저를 사용합니다.
+ [mysql\$1rds\$1set\$1external\$1master(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\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md), 복제를 시작하려면 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)

### 복제를 시작하려면
<a name="mysql-importing-data-reduced-downtime-start-replication"></a>

작업 1에서 [복제 옵션을 설정](#mysql-importing-data-reduced-downtime-set-replication-options)할 때 이진 로깅을 활성화하고 소스 데이터베이스의 고유한 서버 ID를 설정합니다. 이제 라이브 데이터베이스를 소스 복제 인스턴스로 포함하고 있는 복제본으로서 Amazon RDS 데이터베이스를 설정할 수 있습니다.

1. Amazon RDS 콘솔에서 Amazon RDS 데이터베이스에 대한 VPC 보안 그룹에 원본 데이터베이스를 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 구성에 관한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [Configure security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)를 참조하세요.

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

   ```
   host host_name
   ```

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

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 데이터베이스를 복제본으로 만듭니다. 마스터 사용자로 Amazon RDS 데이터베이스에 연결하고 적절한 Amazon RDS 저장 프로시저를 사용하여 소스 데이터베이스를 소스 복제 인스턴스로 식별합니다.
   + [mysql\$1rds\$1set\$1external\$1master(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)

   SQL 형식 백업 파일이 있는 경우 4단계에서 확인한 마스터 로그 파일 이름과 마스터 로그 위치를 사용합니다. 구분 기호로 분리된 텍스트 형식을 사용한 경우 백업 파일을 만들 때 확인한 이름과 위치를 사용합니다. 다음 명령은 예시입니다.

   **MySQL 8.4 이상 버전**

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

   **MySQL 8.0 이하 버전**

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 보안 인증 정보를 지정하는 것이 좋습니다.

1. Amazon RDS 데이터베이스에서 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 저장 프로시저를 사용하는 다음 명령을 실행하여 복제를 시작합니다.

   ```
   CALL mysql.rds_start_replication;
   ```

1. Amazon RDS 데이터베이스에서 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 명령을 실행하여 복제본이 소스 복제 인스턴스에 맞게 최신 상태가 되는 시점을 파악합니다. `SHOW REPLICA STATUS` 명령의 결과에는 `Seconds_Behind_Master` 필드가 포함됩니다. `Seconds_Behind_Master` 필드가 0을 반환하면 복제본이 소스 복제 인스턴스에 맞게 최신 상태인 것입니다.
**참고**  
이전 버전의 MySQL에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

1. Amazon RDS 데이터베이스가 최신 상태로 업데이트된 후, 필요할 경우 그 데이터베이스를 복원할 수 있도록 자동 백업을 켭니다. [Amazon RDS 콘솔](https://console.aws.amazon.com/rds/)을 사용하여 Amazon RDS 데이터베이스에 대한 자동 백업을 켜거나 수정할 수 있습니다. 자세한 내용은 [백업 소개](USER_WorkingWithAutomatedBackups.md) 섹션을 참조하세요.

## 작업 5: 라이브 애플리케이션을 Amazon RDS 인스턴스로 리디렉션
<a name="mysql-importing-data-reduced-downtime-redirect-app"></a>

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

![\[복제를 중지하고 라이브 애플리케이션을 Amazon RDS 데이터베이스로 리디렉션하는 것을 보여주는 워크플로\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_6.png)


### 라이브 애플리케이션을 MySQL 데이터베이스로 리디렉션하고 복제 중지
<a name="mysql-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. Amazon RDS 데이터베이스에 대한 VPC 보안 그룹을 추가하려면 애플리케이션을 호스팅하는 서버의 IP 주소를 추가합니다. VPC 보안 그룹 수정에 대한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [Configure security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)를 참조하세요.

1. [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 명령 결과에서 `Seconds_Behind_Master` 필드가 0인지 확인합니다. 이는 복제본이 소스 복제 인스턴스에 맞게 최신 상태라는 의미입니다.

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

1. 트랜잭션이 완료되면 소스에 대한 모든 연결을 닫습니다.

1. Amazon RDS 데이터베이스를 사용할 수 있도록 애플리케이션을 업데이트합니다. 이 업데이트에는 일반적으로 Amazon RDS 데이터베이스의 호스트 이름과 포트, 연결할 사용자 계정과 암호, 사용할 데이터베이스를 식별하기 위해 연결 설정을 변경하는 과정이 포함됩니다.

1. DB 인스턴스에 연결합니다.

   다중 AZ DB 클러스터의 경우에는 라이터 DB 인스턴스에 연결합니다.

1. [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 저장된 프로시저를 사용하는 다음 명령을 실행하여 Amazon RDS 인스턴스에 대한 복제를 중지합니다.

   ```
   CALL mysql.rds_stop_replication;
   ```

1. Amazon RDS 데이터베이스에서 적절한 Amazon RDS 저장 프로시저를 사용하여 이 인스턴스가 더 이상 복제본으로 식별되지 않도록 복제 구성을 재설정합니다.
   +  [mysql\$1rds\$1reset\$1external\$1master(RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 
   + [mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)

   **MySQL 8.4 이상 버전**

   ```
   CALL mysql.rds_reset_external_source;
   ```

   **MySQL 8.0 이하 버전**

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. 다중 AZ 지원 및 읽기 전용 복제본과 같은 Amazon RDS 기능을 추가로 활성화합니다. 자세한 내용은 [Amazon RDS에 대한 다중 AZ 배포 구성 및 관리](Concepts.MultiAZ.md) 및 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 섹션을 참조하세요.

# 원하는 소스에서 Amazon RDS for MySQL DB 인스턴스로 데이터 가져오기
<a name="mysql-importing-data-any-source"></a>

Amazon RDS를 사용하면 기존 MySQL 데이터를 모든 소스에서 RDS for MySQL DB 인스턴스로 마이그레이션할 수 있습니다. 온프레미스 데이터베이스, 기타 클라우드 공급자 또는 기존 RDS for MySQL DB 인스턴스에서 대상 RDS for MySQL DB 인스턴스로 데이터를 전송할 수 있습니다. 이 기능을 사용하면 데이터베이스를 통합하거나, 재해 복구 솔루션을 구현하거나, 자체 관리형 데이터베이스에서 전환할 수 있습니다. 일반적인 시나리오로는 자체 호스팅 MySQL 서버에서 완전 관리형 Amazon RDS DB 인스턴스로 이동하거나, 여러 MySQL 데이터베이스를 단일 DB 인스턴스로 통합하거나, 프로덕션 데이터를 사용하여 테스트 환경을 생성하는 것이 있습니다. 다음 섹션에서는 `mysqldump`, 백업 파일 또는 복제와 같은 방법을 사용하여 MySQL 데이터를 가져오기 위한 단계별 지침을 제공합니다.

## 1단계: 로드할 데이터를 포함한 플랫 파일 만들기
<a name="mysql-importing-data-any-source-create-flat-files"></a>

쉼표로 구분된 값(CSV)과 같은 일반적인 형식을 사용하여 로드할 데이터를 저장합니다. 각 테이블에는 자체 파일이 있어야 하며, 여러 테이블에 대한 데이터를 같은 파일에 결합할 수 없습니다. 각 파일의 이름은 그에 상응하는 테이블과 같은 이름으로 지정합니다. 파일 확장명은 원하는 대로 정할 수 있습니다. 예를 들어, 테이블 이름이 `sales`인 경우 파일 이름은 `sales.csv` 또는 `sales.txt`일 수 있습니다.

가능하면 로드되는 테이블의 프라이머리 키를 기준으로 데이터를 정렬하세요. 그러면 로드 시간이 대폭 단축되고 데이터 스토리지 요구 사항이 최소화됩니다.

이 절차의 수행 속도와 효율성은 파일의 크기를 작게 유지하느냐에 좌우됩니다. 개별 파일의 압축되지 않은 크기가 1GiB보다 큰 경우에는 파일을 여러 개의 파일로 분할하고 각각 하나씩 따로 로드합니다.

Unix와 같은 시스템(Linux 포함)에서는 `split` 명령을 사용합니다. 예를 들어 다음 명령을 실행하면 `sales.csv` 파일이 1GiB 미만의 여러 파일로 분할되며, 줄 바꿈에서만 분할됩니다(-C 1024m). 새 파일의 이름에는 오름차순 숫자 접미사가 포함됩니다. 다음 명령은 `sales.part_00` 및 `sales.part_01`과 같은 이름의 파일을 생성합니다.

```
split -C 1024m -d sales.csv sales.part_ 
```

다른 운영 체제에서는 이와 유사한 유틸리티를 사용할 수 있습니다.

플랫 파일은 어디에나 저장할 수 있습니다. 그러나 [5단계](#mysql-importing-data-any-source-load-data)에서 데이터를 로드할 때는 파일이 있는 위치와 동일한 위치에서 `mysql` 쉘을 간접적으로 호출하거나 `LOAD DATA LOCAL INFILE`을 실행할 때 파일의 절대 경로를 사용해야 합니다.

## 2단계: 대상 DB 인스턴스에 액세스 중인 애플리케이션을 모두 중지
<a name="mysql-importing-data-any-source-stop-apps"></a>

대량 로드를 시작하기 전에 로드하려는 대상 DB 인스턴스에 액세스하는 모든 애플리케이션의 활동을 중단합니다. 로드 중인 테이블 혹은 참조 테이블을 다른 세션이 수정하는 경우에는 더욱 더 중단해야 합니다. 그러면 로드 중에 발생하는 제약 조건 위반의 위험이 줄어들고 로드 성능이 향상됩니다. 또한 로드에 관여하지 않는 프로세스에 의한 변경 내용이 손실되지 않고 로드 직전의 시점으로 DB 인스턴스를 복원할 수 있습니다.

물론, 이것이 가능하지 않거나 유용하지 않을 수도 있습니다. 로드 전에 애플리케이션이 DB 인스턴스에 액세스하지 못하게 막을 수 없다면, 데이터의 가용성과 무결성을 보장하기 위한 일련의 단계를 수행하세요. 필요한 구체적인 단계는 특정 사용 사례와 사이트 요구 사항에 따라 크게 달라집니다.

## 3단계: DB 스냅샷 만들기
<a name="mysql-importing-data-any-source-create-snapshot"></a>

아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 이 단계를 건너뛰어도 됩니다. 아니면 데이터 로드 전후에 대상 Amazon RDS DB 인스턴스의 DB 스냅샷을 만드는 것이 좋습니다. Amazon RDS DB 스냅샷은 DB 인스턴스를 알려진 상태로 복원하는 데 사용할 수 있는 DB 인스턴스의 완전한 백업입니다. DB 스냅샷을 시작하면 데이터베이스가 백업되는 동안 DB 인스턴스에 대한 I/O 작업이 일시 중단됩니다.

필요한 경우 로드 직전에 DB 스냅샷을 만들면 데이터베이스를 로드 이전의 상태로 복원할 수 있습니다. 로드 직후에 생성된 DB 스냅샷은 사고 발생 시 데이터를 다시 로드하지 않아도 됩니다. 또한 로드 후 DB 스냅샷을 사용하여 데이터를 새 데이터베이스 인스턴스로 가져올 수 있습니다.

아래 예시에서는 AWS CLI [create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) 명령을 실행하여 `AcmeRDS` 인스턴스의 DB 스냅샷을 만들고 DB 스냅샷에 `"preload"` 식별자를 지정합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds create-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

Windows의 경우:

```
aws rds create-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

DB 스냅샷 기능에서 복원하는 기능을 사용하여 테스트 실행을 위한 테스트 DB 인스턴스를 만들거나 로드 중의 변경 사항을 실행 취소할 수도 있습니다.

DB 스냅샷에서 데이터베이스를 복원하면 모든 DB 인스턴스와 마찬가지로 고유 식별자와 엔드포인트가 있는 새 DB 인스턴스가 생성된다는 점을 꼭 명심해야 합니다. 엔드포인트를 변경하지 않고 DB 인스턴스를 복원해야 한다면, 우선 엔드포인트를 다시 사용할 수 있도록 DB 인스턴스를 삭제해야 합니다.

예를 들어 테스트 실행 또는 다른 테스트를 위한 DB 인스턴스를 만들려면 DB 인스턴스에 고유 식별자를 지정합니다. 예제에서 `AcmeRDS-2`"는 식별자입니다. 이 예제는 `AcmeRDS-2`와 연결된 엔드포인트를 사용하여 DB 인스턴스에 연결합니다. 자세한 정보는 [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)을 참조하세요.

대상 LinuxmacOS, 또는Unix:

```
aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS-2 \
    --db-snapshot-identifier preload
```

Windows의 경우:

```
aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS-2 ^
    --db-snapshot-identifier preload
```

기존 엔드포인트를 재사용하려면 우선 DB 인스턴스를 삭제한 다음, 복원된 데이터베이스에 같은 식별자를 지정해야 합니다. 자세한 내용은 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)를 참조하세요.

다음 예제에서는 또한 DB 인스턴스의 최종 DB 스냅샷을 생성한 후에 삭제합니다. 이 단계는 선택 사항이지만 권장됩니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds delete-db-instance \
    --db-instance-identifier AcmeRDS \
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

Windows의 경우:

```
aws rds delete-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

## 4단계(선택 사항): Amazon RDS 자동 백업 끄기
<a name="mysql-importing-data-any-source-turn-off-automated-backups"></a>

**주의**  
시점 복구를 수행할 필요가 있는 경우에는 자동 백업을 끄지 마세요.

자동 백업을 끄는 것은 성능 최적화 수단이며 데이터 로드에 필수적이지는 않습니다. 자동 백업을 끄면 기존 백업이 모두 지워집니다. 따라서 자동 백업을 끈 후에는 시점 복구를 수행할 수 없습니다. 자동 백업을 비활성화해도 수동 DB 스냅샷에는 영향을 주지 않습니다. 기존의 모든 수동 DB 스냅샷을 계속 복원 작업에 사용할 수 있습니다.

자동 백업을 비활성화하면 로드 시간이 약 25% 단축되고 로드 중에 필요한 스토리지 공간의 양이 줄어듭니다. 아무런 데이터도 없는 새 DB 인스턴스로 데이터를 로드할 경우에는 백업을 비활성화하는 것이 로드 속도를 높이고 백업에 필요한 추가 스토리지의 사용을 피하는 손쉬운 방법입니다. 하지만 이미 데이터가 있는 DB 인스턴스로 로드할 경우도 있습니다. 그렇다면 특정 시점으로 복구를 수행할 능력을 상실하는 데 따른 영향에 비해 백업을 해제할 때의 이점을 비교합니다.

DB 인스턴스에서는 기본적으로 자동 백업이 활성화되어 있습니다(보존 기간은 하루). 자동 백업을 비활성화하기 위해 백업 보존 기간을 0으로 설정합니다. 로드 후에는 백업 보존 기간을 0이 아닌 값으로 설정하여 백업을 다시 활성화할 수 있습니다. 백업을 켜거나 끄기 위해 Amazon RDS가 DB 인스턴스를 종료했다가 다시 시작하여 MySQL 로깅을 켜거나 끕니다.

AWS CLI `modify-db-instance` 명령을 실행하여 백업 보존 기간을 0으로 설정하고 변경 사항을 즉시 적용합니다. 보존 기간을 0으로 설정하려면 DB 인스턴스를 다시 시작해야 하므로, 다시 시작 프로세스가 완료될 때까지 기다린 후 계속 진행합니다. 자세한 내용은 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)를 참조하세요.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --apply-immediately \
    --backup-retention-period 0
```

Windows의 경우:

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --apply-immediately ^
    --backup-retention-period 0
```

AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령으로 DB 인스턴스의 상태를 확인할 수 있습니다. 다음 예제에서는 `AcmeRDS` DB 인스턴스의 DB 인스턴스 상태를 표시합니다.

```
aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"
```

DB 인스턴스 상태가 `available`이면 다음 단계로 계속할 준비가 된 것입니다.

## 5단계: 데이터 로드
<a name="mysql-importing-data-any-source-load-data"></a>

플랫 파일의 행을 데이터베이스 테이블로 읽어들이려면 MySQL `LOAD DATA LOCAL INFILE` 문을 사용합니다.

**참고**  
플랫 파일이 있는 위치와 동일한 위치에서 `mysql` 쉘을 호출하거나 `LOAD DATA LOCAL INFILE`을 실행할 때 파일의 절대 경로를 사용해야 합니다.

다음 예시는 이름이 `sales.txt`인 파일에서 데이터베이스의 `Sales` 테이블로 데이터를 로드하는 방법을 보여줍니다.

```
mysql> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\';
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
```

`LOAD DATA` 문에 대한 자세한 내용은 MySQL 설명서의 [LOAD DATA Statement](https://dev.mysql.com/doc/refman/8.4/en/load-data.html)를 참조하세요.

## 6단계: Amazon RDS 자동 백업 다시 켜기
<a name="mysql-importing-data-any-source-turn-on-automated-backups"></a>

[4단계](#mysql-importing-data-any-source-turn-off-automated-backups)에서 Amazon RDS 자동 백업을 껐다면 로드가 완료된 후 백업 보존 기간을 로드 이전의 값으로 다시 설정하여 자동 백업을 켭니다. 4단계에서 언급한 것처럼, Amazon RDS가 DB 인스턴스를 다시 시작하므로 잠시 작동이 중단되는 상황에 대비하세요.

다음 예시에서는 AWS CLI [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 명령을 실행하여 `AcmeRDS` DB 인스턴스에서 자동 백업을 켜고 보존 기간을 1일로 설정합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --backup-retention-period 1 \
    --apply-immediately
```

Windows의 경우:

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --backup-retention-period 1 ^
    --apply-immediately
```

# 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 클러스터의 장애 조치 이벤트가 발생하면 다중 소스 복제 구성이 제거됩니다. 해당 구성을 복원하려면 구성 단계를 반복해야 합니다.

# RDS for MySQL 액티브-액티브 클러스터 구성
<a name="mysql-active-active-clusters"></a>

Amazon RDS의 액티브-액티브 클러스터는 여러 노드가 읽기 및 쓰기 작업을 적극적으로 처리하여 인스턴스 간에 워크로드를 분산하고 가용성과 확장성을 개선하는 데이터베이스 구성입니다. 클러스터의 각 노드는 데이터 일관성을 유지하기 위해 동기화되므로 노드 장애 발생 시 고가용성과 더 빠른 장애 조치를 지원합니다.

MySQL 그룹 복제 플러그인을 사용하여 RDS for MySQL 액티브-액티브 클러스터를 설정할 수 있습니다. 그룹 복제 플러그인은 다음 버전을 실행하는 RDS for MySQL DB 인스턴스에 지원됩니다.
+ 모든 MySQL 8.4 버전
+ MySQL 8.0.35 이상 마이너 버전

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

**참고**  
간결하게 설명하기 위해 이 주제에서 '액티브-액티브' 클러스터에 대한 모든 언급은 MySQL 그룹 복제 플러그인을 사용하는 액티브-액티브 클러스터를 가리킵니다.

## 액티브-액티브 클러스터의 사용 사례
<a name="mysql-active-active-clusters-benefits"></a>

액티브-액티브 클러스터를 사용하기에 좋은 경우는 다음과 같습니다.
+ 쓰기 작업을 지원하기 위해 클러스터의 모든 DB 인스턴스가 필요한 애플리케이션입니다. 그룹 복제 플러그인은 액티브-액티브 클러스터의 각 DB 인스턴스에서 데이터를 일관되게 유지합니다. 작동 방식에 대한 자세한 내용은 MySQL 설명서의 [그룹 복제](https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html)를 참조하세요.
+ 데이터베이스의 지속적인 가용성이 필요한 애플리케이션입니다. 액티브-액티브 클러스터의 경우 데이터는 클러스터의 모든 DB 인스턴스에 유지됩니다. 한 DB 인스턴스에 장애가 발생하는 경우 애플리케이션은 클러스터의 다른 DB 인스턴스로 트래픽을 다시 라우팅할 수 있습니다.
+ 로드 밸런싱을 위해 클러스터의 여러 DB 인스턴스 간에 읽기 및 쓰기 작업을 분할해야 할 수 있는 애플리케이션입니다. 액티브-액티브 클러스터를 사용하면 애플리케이션이 특정 DB 인스턴스로 읽기 트래픽을 보내고 다른 인스턴스에는 쓰기 트래픽을 보낼 수 있습니다. 또한 언제든지 읽기 또는 쓰기를 전송할 DB 인스턴스를 전환할 수 있습니다.

**Topics**
+ [

## 액티브-액티브 클러스터의 사용 사례
](#mysql-active-active-clusters-benefits)
+ [

# 액티브-액티브 클러스터의 제한 및 고려 사항
](mysql-active-active-clusters-considerations-limitations.md)
+ [

# 교차 VPC 액티브-액티브 클러스터 준비
](mysql-active-active-clusters-cross-vpc-prerequisites.md)
+ [

# 액티브-액티브 클러스터의 필수 파라미터 설정
](mysql-active-active-clusters-parameters.md)
+ [

# 기존 DB 인스턴스를 액티브-액티브 클러스터로 변환
](mysql-active-active-clusters-converting.md)
+ [

# 새 DB 인스턴스로 액티브-액티브 클러스터 설정
](mysql-active-active-clusters-setting-up.md)
+ [

# 액티브-액티브 클러스터에 DB 인스턴스 추가
](mysql-active-active-clusters-adding.md)
+ [

# 액티브-액티브 클러스터 모니터링
](mysql-active-active-clusters-monitoring.md)
+ [

# 액티브-액티브 클러스터의 DB 인스턴스에서 그룹 복제 중지
](mysql-active-active-clusters-stopping.md)
+ [

# 액티브-액티브 클러스터의 DB 인스턴스 이름 변경
](mysql-active-active-clusters-renaming.md)
+ [

# 액티브-액티브 클러스터에서 DB 인스턴스 제거
](mysql-active-active-clusters-remove.md)

# 액티브-액티브 클러스터의 제한 및 고려 사항
<a name="mysql-active-active-clusters-considerations-limitations"></a>

Amazon RDS의 액티브-액티브 클러스터는 여러 인스턴스에 워크로드를 분산하여 향상된 가용성과 확장성을 제공합니다. 그러나 이 아키텍처를 사용할 때 유의해야 할 중요한 제한 사항과 고려 사항이 있습니다.

다음 섹션에서는 복제 지연, 충돌 해결, 리소스 할당 및 장애 조치 동작과 같은 주요 요인을 간략하게 설명합니다. 이러한 고려 사항을 이해하면 액티브-액티브 클러스터 배포에서 최적의 성능과 안정성을 보장하는 데 도움이 될 수 있습니다.

**Topics**
+ [

## RDS for MySQL 액티브-액티브 클러스터의 제한 사항
](#mysql-active-active-clusters-limitations)
+ [

## RDS for MySQL 액티브-액티브 클러스터에 대한 고려 사항 및 모범 사례
](#mysql-active-active-clusters-considerations)

## RDS for MySQL 액티브-액티브 클러스터의 제한 사항
<a name="mysql-active-active-clusters-limitations"></a>

RDS for MySQL의 액티브-액티브 클러스터에 다음과 같은 제한 사항이 적용됩니다.
+ 액티브-액티브 클러스터의 DB 인스턴스에 대한 마스터 사용자 이름으로 `rdsgrprepladmin`을 지정할 수 없습니다. 이 사용자 이름은 그룹 복제 연결용으로 예약되어 있습니다.
+ 액티브-액티브 클러스터에 읽기 전용 복제본이 있는 DB 인스턴스의 경우, `Replicating` 이외의 연장된 복제 상태가 로그 파일이 저장 제한을 초과하게끔 만들 수 있습니다. 읽기 전용 복제본 상태에 대한 자세한 내용은 [읽기 전용 복제본 모니터링](USER_ReadRepl.Monitoring.md) 섹션을 참조하세요.
+ 액티브-액티브 클러스터의 DB 인스턴스에는 블루/그린 배포가 지원되지 않습니다. 자세한 내용은 [데이터베이스 업데이트에 Amazon RDS 블루/그린 배포 사용](blue-green-deployments.md) 섹션을 참조하세요.
+ 액티브-액티브 클러스터의 DB 인스턴스에는 Kerberos 인증이 지원되지 않습니다. 자세한 내용은 [Amazon RDS for MySQL에 Kerberos 인증 사용](mysql-kerberos.md) 섹션을 참조하세요.
+ 다중 AZ DB 클러스터의 DB 인스턴스는 액티브-액티브 클러스터에 추가할 수 없습니다. 그러나 다중 AZ DB 인스턴스 배포의 DB 인스턴스는 액티브-액티브 클러스터에 추가할 수 있습니다. 자세한 내용은 [Amazon RDS에 대한 다중 AZ 배포 구성 및 관리](Concepts.MultiAZ.md) 섹션을 참조하세요.
+ 그룹 복제 플러그인이 쓰기를 거부하기 때문에 프라이머리 키가 없는 표는 액티브-액티브 클러스터에 복제되지 않습니다.
+ InnoDB가 아닌 표는 액티브-액티브 클러스터에 복제되지 않습니다.
+ 액티브-액티브 클러스터는 클러스터의 여러 DB 인스턴스에 대한 동시 DML 및 DDL 문을 지원하지 않습니다.
+ 그룹의 복제 모드에 단일 기본 모드를 사용하도록 액티브-액티브 클러스터를 구성할 수 없습니다. 이 구성의 경우 다중 AZ DB 클러스터를 대신 사용하는 것이 좋습니다. 자세한 내용은 [Amazon RDS용 다중 AZ DB 클러스터 배포](multi-az-db-clusters-concepts.md) 섹션을 참조하세요.
+ 액티브-액티브 클러스터의 DB 인스턴스에는 다중 소스 복제가 지원되지 않습니다.
+ 리전 간 액티브-액티브 클러스터는 그룹 복제 연결에 인증 기관(CA) 검증을 적용할 수 없습니다.

## RDS for MySQL 액티브-액티브 클러스터에 대한 고려 사항 및 모범 사례
<a name="mysql-active-active-clusters-considerations"></a>

RDS for MySQL 액티브-액티브 클러스터를 사용하려면 먼저 다음 고려 사항 및 모범 사례를 검토하세요.
+ 액티브-액티브 클러스터의 DB 인스턴스는 9개를 초과할 수 없습니다.
+ 그룹 복제 플러그인을 사용하면 액티브-액티브 클러스터의 트랜잭션 일관성 보장을 제어할 수 있습니다. 자세한 내용은 MySQL 설명서의 [트랜잭션 일관성 보장](https://dev.mysql.com/doc/refman/8.0/en/group-replication-consistency-guarantees.html)을 참조하세요.
+ 액티브-액티브 클러스터에서 서로 다른 DB 인스턴스가 동일한 행을 업데이트하는 경우 충돌이 발생할 수 있습니다. 충돌 및 충돌 해결에 대한 자세한 내용은 MySQL 설명서의 [그룹 복제](https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html)를 참조하세요.
+ 내결함성을 위해 액티브-액티브 클러스터에 DB 인스턴스를 3개 이상 포함합니다. 1\$12개의 DB 인스턴스만으로도 액티브-액티브 클러스터를 구성할 수는 있지만, 클러스터에 내결함성이 갖춰지지 않습니다. 내결함성에 대한 자세한 내용은 MySQL 설명서의 [내결함성](https://dev.mysql.com/doc/refman/8.0/en/group-replication-fault-tolerance.html)을 참조하세요.
+ DB 인스턴스가 기존 액티브-액티브 클러스터에 조인하고 클러스터에서 가장 낮은 엔진 버전과 동일한 엔진 버전을 실행하는 경우 DB 인스턴스는 읽기-쓰기 모드로 조인됩니다.
+ DB 인스턴스가 기존 액티브-액티브 클러스터에 조인하고 클러스터의 최하위 엔진 버전보다 높은 엔진 버전을 실행하는 경우 DB 인스턴스는 읽기 전용 모드를 유지해야 합니다.
+ DB 파라미터 그룹에서 `rds.group_replication_enabled` 파라미터를 `1`로 설정하여 DB 인스턴스의 그룹 복제를 활성화했지만, 복제가 시작되지 않았거나 시작에 실패한 경우 DB 인스턴스는 슈퍼 읽기 전용 모드로 전환되어 데이터 불일치를 방지합니다. 슈퍼 읽기 전용 모드에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only)를 참조하세요.
+ 액티브-액티브 클러스터에서 DB 인스턴스를 업그레이드할 수 있지만, 액티브-액티브 클러스터의 다른 모든 DB 인스턴스가 동일한 엔진 버전 또는 상위 엔진 버전으로 업그레이드될 때까지 DB 인스턴스는 읽기 전용입니다. DB 인스턴스를 업그레이드한 경우 업그레이드가 완료되면 DB 인스턴스가 동일한 액티브-액티브 클러스터에 자동으로 조인합니다. 의도치 않게 DB 인스턴스가 읽기 전용 모드로 전환되는 것을 방지하려면 해당 인스턴스의 자동 마이너 버전 업그레이드를 비활성화하세요. MySQL DB 인스턴스 업그레이드에 대한 자세한 내용은 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md)를 참조하십시오.
+ 다중 AZ DB 인스턴스 배포의 DB 인스턴스를 기존 액티브-액티브 클러스터에 추가할 수 있습니다. 액티브-액티브 클러스터의 단일 AZ DB 인스턴스를 다중 AZ DB 인스턴스 배포로 변환할 수도 있습니다. 다중 AZ 배포의 기본 DB 인스턴스에 장애가 발생하면 기본 인스턴스가 대기 인스턴스로 장애 조치됩니다. 새 기본 DB 인스턴스는 장애 조치가 완료된 후 동일한 클러스터에 자동으로 조인합니다. 다중 AZ DB 인스턴스 배포에 대한 자세한 내용은 [Amazon RDS에 대한 다중 AZ 인스턴스 배포](Concepts.MultiAZSingleStandby.md) 섹션을 참조하세요.
+ 액티브-액티브 클러스터의 DB 인스턴스는 유지 관리 기간의 시간 범위를 다르게 설정하는 것이 좋습니다. 이렇게 하면 클러스터의 여러 DB 인스턴스가 유지 관리를 위해 동시에 오프라인 상태가 되는 것을 방지할 수 있습니다. 자세한 내용은 [Amazon RDS 유지 관리 기간](USER_UpgradeDBInstance.Maintenance.md#Concepts.DBMaintenance) 섹션을 참조하세요.
+ 액티브-액티브 클러스터는 DB 인스턴스 간 연결에 SSL을 사용할 수 있습니다. SSL 연결을 구성하려면[ group\$1replication\$1recovery\$1use\$1ssl](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_recovery_use_ssl) 및[ group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 파라미터를 설정하세요. 이러한 파라미터의 값은 액티브-액티브 클러스터의 모든 DB 인스턴스에서 일치해야 합니다.

  현재 액티브-액티브 클러스터는 AWS 리전 간 연결에 대한 인증 기관(CA) 검증을 지원하지 않습니다. 따라서[ group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 파라미터를 `DISABLED`(기본값)로 설정하거나, 리전 간 클러스터의 경우 `REQUIRED`로 설정해야 합니다.
+ RDS for MySQL 액티브-액티브 클러스터는 다중 기본 모드에서 실행됩니다. [group\$1replication\$1enforce\$1update\$1everywhere\$1checks](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_enforce_update_everywhere_checks)의 기본값은 `ON`이며, 파라미터는 정적입니다. 이 파라미터를 `ON`으로 설정하면 애플리케이션은 계단식 외래 키 제약 조건이 있는 표에 삽입할 수 없습니다.
+ RDS for MySQL 액티브-액티브 클러스터는 XCOM 대신 MySQL 통신 스택을 연결 보안에 사용합니다. 자세한 내용은 MySQL 설명서의 [연결 보안 관리를 위한 통신 스택](https://dev.mysql.com/doc/refman/8.0/en/group-replication-connection-security.html)을 참조하세요.
+ DB 파라미터 그룹을 액티브-액티브 클러스터의 DB 인스턴스와 연결할 때는 이 DB 파라미터 그룹을 클러스터에 있는 다른 DB 인스턴스에만 연결하는 것이 좋습니다.
+ 액티브-액티브 클러스터는 RDS for MySQL DB 인스턴스만 지원합니다. 이러한 DB 인스턴스는 지원되는 버전의 DB 엔진을 실행해야 합니다.
+ 액티브-액티브 클러스터의 DB 인스턴스에 예상치 못한 장애가 발생하면 RDS는 자동으로 DB 인스턴스 복구를 시작합니다. DB 인스턴스가 복구되지 않는 경우 클러스터의 정상 DB 인스턴스를 통해 특정 시점으로 복구를 수행하여 새 DB 인스턴스로 교체하는 것이 좋습니다. 지침은 [특정 시점으로 복구를 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr) 섹션을 참조하세요.
+ 클러스터의 다른 DB 인스턴스에 영향을 주지 않고 액티브-액티브 클러스터의 DB 인스턴스를 삭제할 수 있습니다. DB 인스턴스 삭제에 대한 자세한 내용은 [DB 인스턴스 삭제](USER_DeleteInstance.md) 단원을 참조하세요.
+ DB 인스턴스가 의도치 않게 활성-활성 클러스터를 벗어나면 `group_replication_exit_state_action` 파라미터가 기본적으로 `OFFLINE_MODE`로 변경됩니다. 이 상태에서는 DB 인스턴스에 액세스할 수 없으며 DB 인스턴스를 재부팅하여 다시 온라인 상태로 전환하고 클러스터에 다시 조인해야 합니다. 사용자 지정 파라미터 그룹에서 `group_replication_exit_state_action` 파라미터를 수정하여 이 동작을 변경할 수 있습니다. 파라미터를 `READ_ONLY`로 설정하면 DB 인스턴스가 의도하지 않게 클러스터를 떠날 때 오프라인 상태가 아닌 슈퍼 읽기 전용 상태가 됩니다.

# 교차 VPC 액티브-액티브 클러스터 준비
<a name="mysql-active-active-clusters-cross-vpc-prerequisites"></a>

2개 이상의 VPC에서 Amazon RDS for MySQL DB 인스턴스를 사용하여 액티브-액티브 클러스터를 구성할 수 있습니다. VPC는 동일한 AWS 리전에 있을 수도 있고, 다른 AWS 리전에 있을 수도 있습니다.

**참고**  
여러 AWS 리전 간에 트래픽을 전송하면 추가 비용이 발생할 수 있습니다. 자세한 내용은 [일반적인 아키텍처의 데이터 전송 비용 개요](https://aws.amazon.com/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/)를 참조하세요.

단일 VPC에서 액티브-액티브 클러스터를 구성하는 경우 이 단계를 건너뛰고 [새 DB 인스턴스로 액티브-액티브 클러스터 설정](mysql-active-active-clusters-setting-up.md)으로 이동합니다.

**2개 이상의 VPC에 DB 인스턴스가 있는 액티브-액티브 클러스터를 준비하려면**

1. CIDR 블록의 IPv4 주소 범위가 다음 요구 사항을 충족하는지 확인합니다.
   + VPC의 CIDR 블록에 있는 IPv4 주소 범위는 겹칠 수 없습니다.
   + CIDR 블록의 모든 IPv4 주소 범위는 `128.0.0.0/subnet_mask`보다 작거나 128.0.0.0/*subnet\$1mask*보다 커야 합니다.

   다음 범위는 이러한 요구 사항을 보여줍니다.
   + 한 VPC에서는 `10.1.0.0/16`이 지원되고, 다른 VPC에서는 `10.2.0.0/16`이 지원됩니다.
   + 한 VPC에서는 `172.1.0.0/16`이 지원되고, 다른 VPC에서는 `172.2.0.0/16`이 지원됩니다.
   + 한 VPC의 `10.1.0.0/16` 및 다른 VPC의 `10.1.0.0/16`은 범위가 겹치기 때문에 지원되지 않습니다**.
   + 한 VPC의 `10.1.0.0/16` 및 다른 VPC의 `172.1.0.0/16`은 하나는 `128.0.0.0/subnet_mask`보다 낮고 다른 하나는 `128.0.0.0/subnet_mask`보다 높기 때문에 지원되지 않습니다**.

   CIDR 블록에 대한 자세한 내용은 Amazon VPC 사용 설명서**의 [VPC CIDR 블록](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html)을 참조하세요.

1. 각 VPC에서 DNS 확인 및 DNS 호스트 이름이 모두 활성화되어 있는지 확인합니다.

   지침은 Amazon VPC 사용 설명서**의 [VPC에 대한 DNS 속성 보기 및 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)를 참조하세요.

1. VPC 간 트래픽을 다음 방법 중 하나로 라우팅할 수 있도록 VPC를 구성합니다.
   + VPC 간에 VPC 피어링 연결을 만듭니다.

     지침은 Amazon VPC 피어링 가이드**의 [VPC 피어링 연결 생성](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)을 참조하세요. 각 VPC에 피어링된 VPC의 보안 그룹을 참조하는 보안 그룹의 인바운드 규칙이 있는지 확인합니다. 그렇게 하면 피어링된 VPC의 참조 보안 그룹과 연결된 인스턴스 간에 트래픽을 주고받을 수 있습니다. 지침은 Amazon VPC 피어링 가이드**의 [피어 보안 그룹을 참조하도록 보안 그룹 업데이트](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html)를 참조하세요.
   + VPC 간에 전송 게이트웨이를 만듭니다.

     지침은 Amazon VPC 전송 게이트웨이**의 [전송 게이트웨이 시작하기](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)를 참조하세요. 각 VPC에 다른 VPC의 트래픽을 허용하는 보안 그룹의 인바운드 규칙(예: 다른 VPC의 CIDR을 지정하는 인바운드 규칙)이 있는지 확인합니다. 이렇게 하면 액티브-액티브 클러스터의 참조된 보안 그룹과 연결된 인스턴스 간에 트래픽을 주고받을 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서**의 [보안 그룹을 사용하여 AWS 리소스에 대한 트래픽 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html#working-with-security-groups)를 참조하세요.

# 액티브-액티브 클러스터의 필수 파라미터 설정
<a name="mysql-active-active-clusters-parameters"></a>

Amazon RDS for MySQL에서 액티브-액티브 클러스터의 파라미터를 구성하는 것은 일관된 성능과 운영 안정성을 유지하는 데 필수적입니다. 이 표에서는 복제, 충돌 해결 및 워크로드 배포를 제어하는 주요 파라미터를 자세히 설명합니다. 올바른 구성은 노드 간의 효율적인 동기화를 보장하고, 복제 지연을 최소화하며, 분산 또는 트래픽이 많은 환경에서 리소스 사용률을 최적화합니다.


| 파라미터 | 설명 | 필수 설정 | 
| --- | --- | --- | 
|  `binlog_format`  |  이진 로깅 형식을 설정합니다. RDS for MySQL 8.0 버전 이하에서 기본값은 `MIXED`입니다. RDS for MySQL 8.4 버전에서 기본값은 `ROW`입니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format)를 참조하세요.  |  `ROW`  | 
|  `enforce_gtid_consistency`  |  문 실행에 GTID 일관성을 적용합니다. RDS for MySQL의 기본값은 `OFF`입니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_enforce_gtid_consistency)를 참조하세요.  |  `ON`  | 
|  `group_replication_group_name`  |  그룹 복제 이름을 UUID로 설정합니다. UUID 형식은 `11111111-2222-3333-4444-555555555555`입니다. MySQL DB 인스턴스에 연결하고 `SELECT UUID()`를 실행하여 MySQL UUID를 생성할 수 있습니다. 액티브-액티브 클러스터의 모든 DB 인스턴스에서 값이 동일해야 합니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid)를 참조하세요.  |  MySQL UUID  | 
|  `gtid-mode`  |  GTID 기반 로깅을 제어합니다. RDS for MySQL의 기본값은 `OFF_PERMISSIVE`입니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_gtid_mode)를 참조하세요.  |  `ON`  | 
|  `rds.custom_dns_resolution`  |  VPC의 Amazon DNS 서버로부터의 DNS 확인을 허용할지 여부를 지정합니다. `rds.group_replication_enabled` 파라미터로 그룹 복제를 활성화한 경우 DNS 확인을 활성화해야 합니다. `rds.group_replication_enabled` 파라미터로 그룹 복제를 비활성화한 경우 DNS 확인을 활성화할 수 없습니다. 자세한 내용은 Amazon VPC 사용 설명서**의 [Amazon DNS 서버](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#AmazonDNS)를 참조하세요.  |  `1`  | 
|  `rds.group_replication_enabled`  |  그룹 복제를 DB 인스턴스에 활성화할지 여부를 지정합니다. 액티브-액티브 클러스터의 DB 인스턴스에서 그룹 복제를 활성화해야 합니다.  |  `1`  | 
|  `replica_preserve_commit_order`(RDS for MySQL 8.4 이상 버전) 또는 `slave_preserve_commit_order`(RDS for MySQL 8.0 버전)  |  복제본에서 트랜잭션이 커밋되는 순서를 제어합니다. RDS for MySQL의 기본값은 `ON`입니다. 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html#sysvar_slave_preserve_commit_order)를 참조하세요.  |  `ON`  | 

# 기존 DB 인스턴스를 액티브-액티브 클러스터로 변환
<a name="mysql-active-active-clusters-converting"></a>

활성-활성 클러스터로 마이그레이션하려는 DB 인스턴스의 DB 엔진 버전은 다음 중 하나여야 합니다.
+ 모든 MySQL 8.4 버전
+ MySQL 8.0.35 이상 마이너 버전

엔진 버전을 업그레이드해야 하는 경우 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md) 섹션을 참조하세요.

2개 이상의 VPC에 DB 인스턴스가 있는 액티브-액티브 클러스터를 설정하는 경우 [교차 VPC 액티브-액티브 클러스터 준비](mysql-active-active-clusters-cross-vpc-prerequisites.md)에 나와 있는 사전 조건을 완료해야 합니다.

다음 단계를 완료하여 기존 DB 인스턴스를 RDS for MySQL용 액티브-액티브 클러스터로 마이그레이션하세요.

**Topics**
+ [

## 1단계: 하나 이상의 사용자 지정 파라미터 그룹에서 액티브-액티브 클러스터 파라미터 설정
](#mysql-active-active-clusters-converting-parameter-group)
+ [

## 2단계: 필수 그룹 복제 파라미터가 설정된 DB 파라미터 그룹과 DB 인스턴스 연결
](#mysql-active-active-clusters-converting-associate-parameter-group)
+ [

## 3단계: 액티브-액티브 클러스터 생성
](#mysql-active-active-clusters-converting-associate-parameter-groups)
+ [

## 4단계: 액티브-액티브 클러스터를 위한 추가 RDS for MySQL DB 인스턴스 생성
](#mysql-active-active-clusters-converting-add-db-instances)
+ [

## 5단계: 변환하려는 DB 인스턴스에서 그룹 초기화
](#mysql-active-active-clusters-converting-start-replication-first)
+ [

## 6단계: 액티브-액티브 클러스터의 다른 DB 인스턴스에서 복제 시작
](#mysql-active-active-clusters-converting-start-replication-other)
+ [

## 7단계: (권장) 액티브-액티브 클러스터의 상태 확인
](#mysql-active-active-clusters-converting-view)

## 1단계: 하나 이상의 사용자 지정 파라미터 그룹에서 액티브-액티브 클러스터 파라미터 설정
<a name="mysql-active-active-clusters-converting-parameter-group"></a>

액티브-액티브 클러스터의 RDS for MySQL DB 인스턴스는 필수 파라미터가 올바르게 설정된 사용자 지정 파라미터 그룹과 연결되어야 합니다. 파라미터 및 각 파라미터에 대한 필수 설정에 대한 정보는 [액티브-액티브 클러스터의 필수 파라미터 설정](mysql-active-active-clusters-parameters.md) 섹션을 참조하세요.

새 파라미터 그룹이나 기존 파라미터 그룹에서 이러한 파라미터를 설정할 수 있습니다. 하지만 액티브-액티브 클러스터에 속하지 않은 DB 인스턴스에 실수로 영향을 주지 않으려면 새 사용자 지정 파라미터 그룹을 생성하는 것이 좋습니다. 액티브-액티브 클러스터의 DB 인스턴스를 동일한 DB 파라미터 그룹이나 다른 DB 파라미터 그룹과 연결할 수 있습니다.

AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹을 새로 생성할 수 있습니다. 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹 생성](USER_WorkingWithParamGroups.Creating.md) 섹션을 참조하세요. 다음은 [create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI 명령을 실행하여 RDS for MySQL 8.0에 대해 이름이 `myactivepg`인 사용자 지정 DB 파라미터 그룹을 만드는 예시입니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

Windows의 경우:

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹에서 파라미터를 설정할 수도 있습니다. 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

다음 예시에서는 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 명령을 실행하여 RDS for MySQL 8.0에 대해 파라미터를 설정합니다. 이 예시를 RDS for MySQL 8.4와 함께 사용하려면 `slave_preserve_commit_order`를 `replica_preserve_commit_order`로 변경합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

Windows의 경우:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## 2단계: 필수 그룹 복제 파라미터가 설정된 DB 파라미터 그룹과 DB 인스턴스 연결
<a name="mysql-active-active-clusters-converting-associate-parameter-group"></a>

DB 인스턴스를 이전 단계에서 만들거나 수정한 파라미터 그룹과 연결합니다. 지침은 [Amazon RDS의 DB 인스턴스에 DB 파라미터 그룹 연결](USER_WorkingWithParamGroups.Associating.md) 섹션을 참조하세요.

새 파라미터 설정을 적용하려면 DB 인스턴스를 재부팅하세요. 지침은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 섹션을 참조하세요.

## 3단계: 액티브-액티브 클러스터 생성
<a name="mysql-active-active-clusters-converting-associate-parameter-groups"></a>

DB 인스턴스와 연결된 DB 파라미터 그룹에서 `group_replication_group_seeds` 파라미터를 변환할 DB 인스턴스의 엔드포인트로 설정합니다.

AWS Management Console 또는 AWS CLI를 사용하여 파라미터를 설정할 수 있습니다. 이 파라미터를 설정한 후 DB 인스턴스를 재부팅할 필요가 없습니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

다음 예제에서는 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 명령을 실행하여 파라미터를 설정합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

Windows의 경우:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

## 4단계: 액티브-액티브 클러스터를 위한 추가 RDS for MySQL DB 인스턴스 생성
<a name="mysql-active-active-clusters-converting-add-db-instances"></a>

액티브-액티브 클러스터용 추가 DB 인스턴스를 만들려면 변환하려는 DB 인스턴스에서 특정 시점으로 복구를 수행합니다. 지침은 [특정 시점으로 복구를 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr) 섹션을 참조하세요.

액티브-액티브 클러스터에는 최대 9개의 DB 인스턴스가 있을 수 있습니다. 클러스터에 사용할 DB 인스턴스 수를 원하는 수준으로 갖출 때까지 DB 인스턴스에서 특정 시점으로 복구를 수행합니다. 특정 시점으로 복구를 수행할 때 추가할 DB 인스턴스를 `rds.group_replication_enabled`가 `1`로 설정된 DB 파라미터 그룹과 연결해야 합니다. 그렇지 않으면 새로 추가된 DB 인스턴스에서 그룹 복제가 시작되지 않습니다.

## 5단계: 변환하려는 DB 인스턴스에서 그룹 초기화
<a name="mysql-active-active-clusters-converting-start-replication-first"></a>

그룹을 초기화하고 복제를 시작합니다.

1. SQL 클라이언트에서 변환하려는 DB 인스턴스에 연결합니다. RDS for MySQL DB 인스턴스 연결에 대한 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 다음 저장 프로시저를 실행하고 *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다. `rdsgrprepladmin` 사용자는 액티브-액티브 클러스터의 그룹 복제 연결에만 사용할 수 있습니다. 이 사용자의 암호는 액티브-액티브 클러스터의 모든 DB 인스턴스에서 동일해야 합니다.

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   이 예제에서는 `binlog retention hours` 값을 `168`로 설정합니다. 즉, 이진 로그 파일은 DB 인스턴스에 7일 동안 유지됩니다. 값은 사용자의 요구 사항에 맞게 조정할 수 있습니다.

   이 예제는 `mysql.rds_group_replication_start` 저장 프로시저에서 현재 DB 인스턴스로 새 그룹을 초기화하도록 `1`을 지정합니다.

   예제에서 호출한 저장 프로시저에 대한 자세한 내용은 [활성-활성 클러스터](mysql-stored-proc-active-active-clusters.md) 섹션을 참조하세요.

## 6단계: 액티브-액티브 클러스터의 다른 DB 인스턴스에서 복제 시작
<a name="mysql-active-active-clusters-converting-start-replication-other"></a>

액티브-액티브 클러스터의 각 DB 인스턴스에 대해 SQL 클라이언트를 사용하여 인스턴스에 연결하고 다음 저장 프로시저를 실행합니다. *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다.

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

이 예제에서는 `binlog retention hours` 값을 `168`로 설정합니다. 즉, 이진 로그 파일은 각 DB 인스턴스에 7일 동안 유지됩니다. 값은 사용자의 요구 사항에 맞게 조정할 수 있습니다.

이 예제는 `mysql.rds_group_replication_start` 저장 프로시저에서 현재 DB 인스턴스를 기존 그룹에 조인하도록 `0`을 지정합니다.

**작은 정보**  
액티브-액티브 클러스터의 다른 모든 DB 인스턴스에서 이러한 저장 프로시저를 실행해야 합니다.

## 7단계: (권장) 액티브-액티브 클러스터의 상태 확인
<a name="mysql-active-active-clusters-converting-view"></a>

클러스터의 각 멤버가 올바르게 구성되었는지 확인하려면 액티브-액티브 클러스터의 DB 인스턴스에 연결하고 다음 SQL 명령을 실행하여 클러스터의 상태를 확인합니다.

```
SELECT * FROM performance_schema.replication_group_members;
```

출력은 다음 샘플 출력과 같이 각 DB 인스턴스의 `MEMBER_STATE`에 대해 `ONLINE`으로 표시되어야 합니다.

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

가능한 `MEMBER_STATE` 값에 대한 자세한 내용은 MySQL 설명서의 [그룹 복제 서버 상태](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)를 참조하세요.

# 새 DB 인스턴스로 액티브-액티브 클러스터 설정
<a name="mysql-active-active-clusters-setting-up"></a>

새 Amazon RDS for MySQL DB 인스턴스를 사용하여 액티브-액티브 클러스터를 설정하려면 다음 단계를 완료하세요.

2개 이상의 VPC에 DB 인스턴스가 있는 액티브-액티브 클러스터를 설정하는 경우 [교차 VPC 액티브-액티브 클러스터 준비](mysql-active-active-clusters-cross-vpc-prerequisites.md)에 나와 있는 사전 조건을 완료해야 합니다.

**Topics**
+ [

## 1단계: 하나 이상의 사용자 지정 파라미터 그룹에서 액티브-액티브 클러스터 파라미터 설정
](#mysql-active-active-clusters-setting-up-parameter-group)
+ [

## 2단계: 액티브-액티브 클러스터를 위한 새 RDS for MySQL DB 인스턴스 생성
](#mysql-active-active-clusters-setting-up-db-instances)
+ [

## 3단계: 액티브-액티브 클러스터의 DB 인스턴스 지정
](#mysql-active-active-clusters-setting-up-associate-parameter-groups)
+ [

## 4단계: DB 인스턴스에서 그룹 초기화 및 복제 시작
](#mysql-active-active-clusters-setting-up-start-replication-first)
+ [

## 5단계: 액티브-액티브 클러스터의 다른 DB 인스턴스에서 복제 시작
](#mysql-active-active-clusters-setting-up-start-replication-other)
+ [

## 6단계: (권장) 액티브-액티브 클러스터의 상태 확인
](#mysql-active-active-clusters-setting-up-view)
+ [

## 7단계: (선택 사항) 액티브-액티브 클러스터의 DB 인스턴스로 데이터 가져오기
](#mysql-active-active-clusters-import)

## 1단계: 하나 이상의 사용자 지정 파라미터 그룹에서 액티브-액티브 클러스터 파라미터 설정
<a name="mysql-active-active-clusters-setting-up-parameter-group"></a>

액티브-액티브 클러스터의 RDS for MySQL DB 인스턴스는 필수 파라미터가 올바르게 설정된 사용자 지정 파라미터 그룹과 연결되어야 합니다. 파라미터 및 각 파라미터에 대한 필수 설정에 대한 정보는 [액티브-액티브 클러스터의 필수 파라미터 설정](mysql-active-active-clusters-parameters.md) 섹션을 참조하세요.

새 파라미터 그룹이나 기존 파라미터 그룹에서 이러한 파라미터를 설정할 수 있습니다. 하지만 액티브-액티브 클러스터에 속하지 않은 DB 인스턴스에 실수로 영향을 주지 않으려면 새 사용자 지정 파라미터 그룹을 생성하는 것이 좋습니다. 액티브-액티브 클러스터의 DB 인스턴스를 동일한 DB 파라미터 그룹이나 다른 DB 파라미터 그룹과 연결할 수 있습니다.

AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹을 새로 생성할 수 있습니다. 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹 생성](USER_WorkingWithParamGroups.Creating.md) 섹션을 참조하세요. 다음은 [create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI 명령을 실행하여 RDS for MySQL 8.0에 대해 이름이 `myactivepg`인 사용자 지정 DB 파라미터 그룹을 만드는 예시입니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

Windows의 경우:

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

AWS Management Console 또는 AWS CLI로 사용자 지정 파라미터 그룹에서 파라미터를 설정할 수도 있습니다. 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

다음 예시에서는 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 명령을 실행하여 RDS for MySQL 8.0에 대해 파라미터를 설정합니다. 이 예시를 RDS for MySQL 8.4와 함께 사용하려면 `slave_preserve_commit_order`를 `replica_preserve_commit_order`로 변경합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

Windows의 경우:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## 2단계: 액티브-액티브 클러스터를 위한 새 RDS for MySQL DB 인스턴스 생성
<a name="mysql-active-active-clusters-setting-up-db-instances"></a>

활성-활성 클러스터는 다음 버전의 RDS for MySQL DB 인스턴스에서 지원됩니다.
+ 모든 MySQL 8.4 버전
+ MySQL 버전 8.0.35 이상 마이너 버전

클러스터에 대해 새 DB 인스턴스를 9개까지 생성할 수 있습니다.

AWS Management Console 또는 AWS CLI를 사용하여 새 DB 인스턴스를 생성할 수 있습니다. DB 인스턴스를 생성하는 방법에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요. DB 인스턴스를 만들 때 이전 단계에서 만들거나 수정한 DB 파라미터 그룹과 연결합니다.

## 3단계: 액티브-액티브 클러스터의 DB 인스턴스 지정
<a name="mysql-active-active-clusters-setting-up-associate-parameter-groups"></a>

각 DB 인스턴스와 연결된 DB 파라미터 그룹에서 클러스터에 포함하려는 DB 인스턴스의 엔드포인트로 `group_replication_group_seeds` 파라미터를 설정합니다.

AWS Management Console 또는 AWS CLI를 사용하여 파라미터를 설정할 수 있습니다. 이 파라미터를 설정한 후 DB 인스턴스를 재부팅할 필요가 없습니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

다음 예제에서는 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 명령을 실행하여 파라미터를 설정합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

Windows의 경우:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

**작은 정보**  
액티브-액티브 클러스터의 DB 인스턴스와 연결된 각 DB 파라미터 그룹에서 `group_replication_group_seeds` 파라미터를 설정해야 합니다.

## 4단계: DB 인스턴스에서 그룹 초기화 및 복제 시작
<a name="mysql-active-active-clusters-setting-up-start-replication-first"></a>

새 DB를 선택하여 그룹을 초기화하고 복제를 시작할 수 있습니다. 이렇게 하려면 다음 단계를 완료합니다.

1. 액티브-액티브 클러스터에서 DB 인스턴스를 선택하고 SQL 클라이언트에서 해당 DB 인스턴스에 연결합니다. RDS for MySQL DB 인스턴스 연결에 대한 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 다음 저장 프로시저를 실행하고 *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다. `rdsgrprepladmin` 사용자는 액티브-액티브 클러스터의 그룹 복제 연결에만 사용할 수 있습니다. 이 사용자의 암호는 액티브-액티브 클러스터의 모든 DB 인스턴스에서 동일해야 합니다.

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   이 예제에서는 `binlog retention hours` 값을 `168`로 설정합니다. 즉, 이진 로그 파일은 DB 인스턴스에 7일 동안 유지됩니다. 값은 사용자의 요구 사항에 맞게 조정할 수 있습니다.

   이 예제는 `mysql.rds_group_replication_start` 저장 프로시저에서 현재 DB 인스턴스로 새 그룹을 초기화하도록 `1`을 지정합니다.

   예제에서 호출한 저장 프로시저에 대한 자세한 내용은 [활성-활성 클러스터](mysql-stored-proc-active-active-clusters.md) 섹션을 참조하세요.

## 5단계: 액티브-액티브 클러스터의 다른 DB 인스턴스에서 복제 시작
<a name="mysql-active-active-clusters-setting-up-start-replication-other"></a>

액티브-액티브 클러스터의 각 DB 인스턴스에 대해 SQL 클라이언트를 사용하여 인스턴스에 연결하고 다음 저장 프로시저를 실행합니다. *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다.

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

이 예제에서는 `binlog retention hours` 값을 `168`로 설정합니다. 즉, 이진 로그 파일은 각 DB 인스턴스에 7일 동안 유지됩니다. 값은 사용자의 요구 사항에 맞게 조정할 수 있습니다.

이 예제는 `mysql.rds_group_replication_start` 저장 프로시저에서 현재 DB 인스턴스를 기존 그룹에 조인하도록 `0`을 지정합니다.

**작은 정보**  
액티브-액티브 클러스터의 다른 모든 DB 인스턴스에서 이러한 저장 프로시저를 실행해야 합니다.

## 6단계: (권장) 액티브-액티브 클러스터의 상태 확인
<a name="mysql-active-active-clusters-setting-up-view"></a>

클러스터의 각 멤버가 올바르게 구성되었는지 확인하려면 액티브-액티브 클러스터의 DB 인스턴스에 연결하고 다음 SQL 명령을 실행하여 클러스터의 상태를 확인합니다.

```
SELECT * FROM performance_schema.replication_group_members;
```

출력은 다음 샘플 출력과 같이 각 DB 인스턴스의 `MEMBER_STATE`에 대해 `ONLINE`으로 표시되어야 합니다.

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

가능한 `MEMBER_STATE` 값에 대한 자세한 내용은 MySQL 설명서의 [그룹 복제 서버 상태](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)를 참조하세요.

## 7단계: (선택 사항) 액티브-액티브 클러스터의 DB 인스턴스로 데이터 가져오기
<a name="mysql-active-active-clusters-import"></a>

MySQL 데이터베이스의 데이터를 액티브-액티브 클러스터의 DB 인스턴스로 가져올 수 있습니다. 데이터를 가져온 후 그룹 복제는 데이터를 클러스터의 다른 DB 인스턴스로 복제합니다.

데이터 가져오기에 대한 자세한 내용은 [가동 중지 시간을 줄이면서 Amazon RDS for MySQL 데이터베이스로 데이터 가져오기](mysql-importing-data-reduced-downtime.md) 섹션을 참조하세요.

# 액티브-액티브 클러스터에 DB 인스턴스 추가
<a name="mysql-active-active-clusters-adding"></a>

DB 스냅샷을 복원하거나 DB 인스턴스를 특정 시점으로 복원하여 DB 인스턴스를 Amazon RDS for MySQL 액티브-액티브 클러스터에 추가할 수 있습니다. 액티브-액티브 클러스터에는 최대 9개의 DB 인스턴스가 포함될 수 있습니다.

DB 인스턴스를 특정 시점으로 복구할 때는 일반적으로 DB 스냅샷에서 복원된 DB 인스턴스보다 최근 트랜잭션이 더 많이 포함됩니다. DB 인스턴스에 최근 트랜잭션이 더 많으면 복제를 시작할 때 적용해야 하는 트랜잭션 수가 줄어듭니다. 따라서 특정 시점으로 복구를 사용하여 클러스터에 DB 인스턴스를 추가하는 것이 일반적으로 DB 스냅샷에서 복원하는 것보다 빠릅니다.

**Topics**
+ [

## 특정 시점으로 복구를 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가
](#mysql-active-active-clusters-adding-pitr)
+ [

## DB 스냅샷을 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가
](#mysql-active-active-clusters-adding-snapshot)

## 특정 시점으로 복구를 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가
<a name="mysql-active-active-clusters-adding-pitr"></a>

클러스터의 DB 인스턴스에서 특정 시점으로 복구를 수행하여 액티브-액티브 클러스터에 DB 인스턴스를 추가할 수 있습니다.

다른 AWS 리전에서 DB 인스턴스를 특정 시점으로 복구하는 방법에 대한 자세한 내용은 [다른 AWS 리전에 자동 백업 복제](USER_ReplicateBackups.md) 섹션을 참조하세요.

**특정 시점으로 복구를 사용하여 액티브-액티브 클러스터에 DB 인스턴스를 추가하려면**

1. 액티브-액티브 클러스터의 DB 인스턴스에서 특정 시점으로 복구를 수행하여 새 DB 인스턴스를 생성합니다.

   클러스터의 모든 DB 인스턴스에서 특정 시점으로 복구를 수행하여 새 DB 인스턴스를 생성할 수 있습니다. 지침은 [Amazon RDS에서 DB 인스턴스를 지정된 시간으로 복원](USER_PIT.md) 단원을 참조하십시오.
**중요**  
특정 시점으로 복구 중에는 액티브-액티브 클러스터 파라미터가 설정된 DB 파라미터 그룹에 새 DB 인스턴스를 연결합니다. 그렇지 않으면 새 DB 인스턴스에서 그룹 복제가 시작되지 않습니다. 파라미터 및 각 파라미터에 대한 필수 설정에 대한 정보는 [액티브-액티브 클러스터의 필수 파라미터 설정](mysql-active-active-clusters-parameters.md) 섹션을 참조하세요.
**작은 정보**  
특정 시점으로 복구를 시작하기 전에 DB 인스턴스의 스냅샷을 생성하면 새 DB 인스턴스에서 트랜잭션을 적용하는 데 필요한 시간을 줄일 수 있습니다.

1. 새 DB 인스턴스와 연결한 DB 파라미터 그룹을 포함하여 액티브-액티브 클러스터의 DB 인스턴스와 연결된 각 DB 파라미터 그룹의 `group_replication_group_seeds` 파라미터에 DB 인스턴스를 추가합니다.

   파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 새 DB 인스턴스에 연결하고 [mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_set_recovery_channel) 저장 프로시저를 호출합니다. *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다.

   ```
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   ```

1. SQL 클라이언트를 통해 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 저장 프로시저를 호출하여 복제를 시작합니다.

   ```
   call mysql.rds_group_replication_start(0);
   ```

## DB 스냅샷을 사용하여 액티브-액티브 클러스터에 DB 인스턴스 추가
<a name="mysql-active-active-clusters-adding-snapshot"></a>

클러스터에 있는 DB 인스턴스의 DB 스냅샷을 만든 다음 DB 스냅샷을 복원하여 액티브-액티브 클러스터에 DB 인스턴스를 추가할 수 있습니다.

스냅샷을 다른 AWS 리전으로 복사하는 방법에 대한 자세한 내용은 [리전 간 스냅샷 복사 시 고려 사항](USER_CopySnapshot.md#USER_CopySnapshot.AcrossRegions) 섹션을 참조하세요.

**DB 스냅샷을 사용하여 액티브-액티브 클러스터에 DB 인스턴스를 추가하려면**

1. 액티브-액티브 클러스터에서 DB 인스턴스의 DB 스냅샷을 생성합니다.

   클러스터에 있는 모든 DB 인스턴스의 DB 스냅샷을 생성할 수 있습니다. 지침은 [Amazon RDS의 단일 AZ DB 인스턴스에 대한 DB 스냅샷 생성](USER_CreateSnapshot.md) 단원을 참조하십시오.

1. DB 스냅샷에서 DB 인스턴스를 복원합니다.

   스냅샷 복원 작업 중에 액티브-액티브 클러스터 파라미터가 설정된 DB 파라미터 그룹에 새 DB 인스턴스를 연결합니다. 파라미터 및 각 파라미터에 대한 필수 설정에 대한 정보는 [액티브-액티브 클러스터의 필수 파라미터 설정](mysql-active-active-clusters-parameters.md) 섹션을 참조하세요.

   DB 스냅샷에서 DB 인스턴스를 복원하는 방법에 대한 자세한 내용은 [DB 인스턴스 복원](USER_RestoreFromSnapshot.md) 섹션을 참조하세요.

1. 새 DB 인스턴스와 연결한 DB 파라미터 그룹을 포함하여 액티브-액티브 클러스터의 DB 인스턴스와 연결된 각 DB 파라미터 그룹의 `group_replication_group_seeds` 파라미터에 DB 인스턴스를 추가합니다.

   파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 새 DB 인스턴스에 연결하고 [mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_set_recovery_channel) 저장 프로시저를 호출합니다. *group\$1replication\$1user\$1password*를 `rdsgrprepladmin` 사용자의 암호로 대체합니다.

   ```
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   ```

1. SQL 클라이언트를 통해 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 저장 프로시저를 호출하여 복제를 시작합니다.

   ```
   call mysql.rds_group_replication_start(0);
   ```

# 액티브-액티브 클러스터 모니터링
<a name="mysql-active-active-clusters-monitoring"></a>

Amazon RDS for MySQL에서 액티브-액티브 클러스터를 모니터링하는 것은 성능, 복제 무결성 및 노드 동기화를 추적하는 데 매우 중요합니다. 클러스터의 DB 인스턴스에 연결하고 다음 SQL 명령을 실행하여 액티브-액티브 클러스터를 모니터링할 수 있습니다.

```
SELECT * FROM performance_schema.replication_group_members;
```

출력은 다음 샘플 출력과 같이 각 DB 인스턴스의 `MEMBER_STATE`에 대해 `ONLINE`으로 표시되어야 합니다.

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

가능한 `MEMBER_STATE` 값에 대한 자세한 내용은 MySQL 설명서의 [그룹 복제 서버 상태](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)를 참조하세요.

# 액티브-액티브 클러스터의 DB 인스턴스에서 그룹 복제 중지
<a name="mysql-active-active-clusters-stopping"></a>

액티브-액티브 클러스터의 DB 인스턴스에서 그룹 복제를 중지할 수 있습니다. 그룹 복제를 중지하면 복제가 다시 시작되거나 해당 DB 인스턴스가 액티브-액티브 클러스터에서 제거될 때까지 DB 인스턴스는 슈퍼 읽기 전용 모드로 전환됩니다. 슈퍼 읽기 전용 모드에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only)를 참조하세요.

**액티브-액티브 클러스터의 그룹 복제를 일시적으로 중지하려면**

1. SQL 클라이언트를 사용하여 액티브-액티브 클러스터의 DB 인스턴스에 연결합니다.

   RDS for MySQL DB 인스턴스 연결에 대한 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 저장 프로시저를 호출합니다.

   ```
   call mysql.rds_group_replication_stop();
   ```

# 액티브-액티브 클러스터의 DB 인스턴스 이름 변경
<a name="mysql-active-active-clusters-renaming"></a>

액티브-액티브 클러스터에서 DB 인스턴스의 이름을 변경할 수 있습니다. 액티브-액티브 클러스터에서 둘 이상의 DB 인스턴스 이름을 바꾸려면 DB 인스턴스 이름을 한 번에 하나씩 바꾸세요. 즉, 다음 DB 인스턴스의 이름을 바꾸기 전에 한 DB 인스턴스의 이름을 변경하고 클러스터에 다시 조인해야 합니다.

**액티브-액티브 클러스터의 DB 인스턴스 이름을 변경하려면**

1. SQL 클라이언트에서 DB 인스턴스에 연결하고 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 저장 프로시저를 호출합니다.

   ```
   call mysql.rds_group_replication_stop();
   ```

1. [DB 인스턴스 이름 변경](USER_RenameInstance.md)의 지침에 따라 DB 인스턴스의 이름을 바꿉니다.

1. 액티브-액티브 클러스터의 DB 인스턴스와 연결된 각 DB 파라미터 그룹의 `group_replication_group_seeds` 파라미터를 수정합니다.

   파라미터 설정에서 이전 DB 인스턴스 엔드포인트를 새 DB 인스턴스 엔드포인트로 교체합니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

1. SQL 클라이언트에서 DB 인스턴스에 연결하고 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 저장 프로시저를 호출합니다.

   ```
   call mysql.rds_group_replication_start(0);
   ```

# 액티브-액티브 클러스터에서 DB 인스턴스 제거
<a name="mysql-active-active-clusters-remove"></a>

액티브-액티브 클러스터에서 DB 인스턴스를 제거하면 독립형 DB 인스턴스로 되돌아갑니다.

**액티브-액티브 클러스터에서 DB 인스턴스를 제거하려면**

1. SQL 클라이언트에서 DB 인스턴스에 연결하고 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 저장 프로시저를 호출합니다.

   ```
   call mysql.rds_group_replication_stop();
   ```

1. 액티브-액티브 클러스터에 남아 있는 DB 인스턴스의 `group_replication_group_seeds` 파라미터를 수정합니다.

   `group_replication_group_seeds` 파라미터에서 액티브-액티브 클러스터에서 제거하려는 DB 인스턴스를 삭제합니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하세요.

1. 액티브-액티브 클러스터에서 제거하려는 DB 인스턴스가 더 이상 클러스터에 속하지 않도록 파라미터를 수정합니다.

   DB 인스턴스를 다른 파라미터 그룹과 연결하거나 DB 인스턴스와 연결된 DB 파라미터 그룹의 파라미터를 수정할 수 있습니다. 수정할 파라미터로는 `group_replication_group_name`, `rds.group_replication_enabled`, `group_replication_group_seeds`가 있습니다. 액티브-액티브 클러스터 파라미터에 대한 자세한 내용은 [액티브-액티브 클러스터의 필수 파라미터 설정](mysql-active-active-clusters-parameters.md) 섹션을 참조하세요.

   DB 파라미터 그룹에서 파라미터를 수정하는 경우 DB 파라미터 그룹이 액티브-액티브 클러스터의 다른 DB 인스턴스와 연결되어 있지 않은지 확인합니다.

1. 새 파라미터 설정을 적용하려면 액티브-액티브 클러스터에서 제거한 DB 인스턴스를 재부팅하세요.

   지침은 [ DB 인스턴스 재부팅](USER_RebootInstance.md) 단원을 참조하세요.

# 복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기
<a name="MySQL.Procedural.Exporting.NonRDSRepl"></a>

RDS for MySQL DB 인스턴스에서 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스로 데이터를 내보내려면 복제 기능을 사용하면 됩니다. 이 시나리오에서 MySQL DB 인스턴스는 *소스 MySQL DB 인스턴스*이고, Amazon RDS 외부에서 실행 중인 MySQL 인스턴스는 *외부 MySQL 데이터베이스*입니다.

외부 MySQL 데이터베이스는 데이터 센터의 온프레미스 또는 Amazon EC2 인스턴스에서 실행할 수 있습니다. 외부 MySQL 데이터베이스는 원본 MySQL DB 인스턴스와 동일한 버전 또는 해당 버전 이상을 실행해야 합니다.

외부 MySQL 데이터베이스에 대한 복제는 원본 MySQL DB 인스턴스에서 데이터베이스를 내보내는 데 걸리는 시간 중에만 지원됩니다. 데이터 내보내기가 완료되어 애플리케이션이 외부 MySQL 인스턴스에 대한 액세스를 시작할 수 있을 때 복제가 종료되어야 합니다.

아래 목록에 수행할 단계가 나와 있습니다. 각 단계에 대해서는 이후 섹션에서 자세히 설명합니다.

1. 외부 MySQL DB 인스턴스를 준비합니다.

1. 복제할 원본 MySQL DB 인스턴스를 준비합니다.

1. mysqldump 유틸리티를 사용하여 원본 MySQL DB 인스턴스에서 외부 MySQL 데이터베이스로 데이터베이스를 전송합니다.

1. 외부 MySQL 데이터베이스에 대한 복제를 시작합니다.

1. 내보내기가 완료된 후 복제를 중지합니다.

## 외부 MySQL 데이터베이스 준비
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareRDS"></a>

외부 MySQL 데이터베이스를 준비하려면 다음 단계를 수행하세요.

**외부 MySQL 데이터베이스를 준비하려면**

1. 외부 MySQL 데이터베이스를 설치합니다.

1. 마스터 사용자로 외부 MySQL 데이터베이스에 연결합니다. 그런 다음, 데이터베이스에 액세스하는 서비스, 애플리케이션 및 관리자를 지원하는 데 필요한 사용자를 생성합니다.

1. MySQL 설명서의 지침에 따라 외부 MySQL 데이터베이스를 복제본으로 준비합니다. 자세한 내용은 MySQL 설명서의 [Setting the Replica Configuration](https://dev.mysql.com/doc/refman/8.0/en/replication-howto-slavebaseconfig.html)을 참조하세요.

1. 내보내기 중에 외부 MySQL 데이터베이스가 읽기 전용 복제본으로 작동하도록 송신 규칙을 구성합니다. 송신 규칙을 사용하면 복제 중에 외부 MySQL 데이터베이스를 원본 MySQL DB 인스턴스에 연결할 수 있습니다. 원본 MySQL DB 인스턴스의 포트와 IP 주소에 대한 Transmission Control Protocol(TCP) 연결을 허용하는 송신 규칙을 지정합니다.

   환경에 적합한 송신 규칙을 지정합니다.
   + 외부 MySQL 데이터베이스가 Amazon VPC 서비스를 기반으로 하는 Virtual Private Cloud(VPC)의 Amazon EC2 인스턴스에서 실행 중인 경우 VPC 보안 그룹에서 송신 규칙을 지정합니다. 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 섹션을 참조하세요.
   + 외부 MySQL 데이터베이스가 온프레미스에 설치되어 있는 경우 방화벽에서 송신 규칙을 지정합니다.

1. 외부 MySQL 데이터베이스가 VPC에서 실행 중인 경우, 보안 그룹 송신 규칙 외에 VPC ACL(액세스 제어 목록) 규칙에 대한 규칙을 구성합니다.
   + 원본 MySQL DB 인스턴스의 IP 주소에서 포트 1024–65535로의 TCP 트래픽을 허용하는 ACL 송신 규칙을 구성합니다.
   + 원본 MySQL DB 인스턴스의 포트와 IP 주소로의 아웃바운드 TCP 트래픽을 허용하는 ACL 송신 규칙을 구성합니다.

   Amazon VPC 네트워크 ACL에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [네트워크 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)을 참조하세요.

1. (선택 사항) 복제 오류를 방지하려면 `max_allowed_packet` 파라미터를 최대 크기로 설정하세요. 이 설정을 사용하는 것이 좋습니다.

## 원본 MySQL DB 인스턴스 준비
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareSource"></a>

원본 MySQL DB 인스턴스를 복제 소스로 준비하려면 다음 단계를 수행하세요.

**원본 MySQL DB 인스턴스를 준비하려면**

1. 클라이언트 컴퓨터에서 복제를 설정하는 동안 이진 로그를 저장하기에 충분한 디스크 공간을 사용할 수 있는지 확인합니다.

1. 소스 MySQL DB 인스턴스에 연결하고 MySQL 설명서의 [복제를 위한 사용자 생성](http://dev.mysql.com/doc/refman/8.0/en/replication-howto-repuser.html)에 나와 있는 지침에 따라 복제 계정을 생성합니다.

1. 원본 MySQL DB 인스턴스를 실행 중인 시스템에서 복제 중에 외부 MySQL 데이터베이스의 연결을 허용하도록 송신 규칙을 구성합니다. 외부 MySQL 데이터베이스의 IP 주소에서 MySQL DB 인스턴스가 사용하는 포트에 대한 TCP 연결을 허용하는 수신 규칙을 지정합니다.

1. 송신 규칙을 지정합니다.
   + VPC에서 원본 MySQL DB 인스턴스가 실행 중인 경우 VPC 보안 그룹에서 수신 규칙을 지정합니다. 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 섹션을 참조하세요.

1. MySQL DB 인스턴스가 VPC에서 실행 중인 경우 보안 그룹 수신 규칙 이외에 VPC ACL 규칙을 구성합니다.
   + 외부 MySQL 데이터베이스의 IP 주소에서 Amazon RDS 인스턴스가 사용하는 포트에 대한 TCP 연결을 허용하도록 ACL 수신 규칙을 구성합니다.
   + 포트 1024–65535에서 외부 MySQL 데이터베이스의 IP 주소로 TCP 연결을 허용하도록 ACL 송신 규칙을 구성합니다.

   Amazon VPC 네트워크 ACL에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [네트워크 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)을 참조하세요.

1. 내보내기 중에 아무런 이진 로그도 제거되지 않을 만큼 백업 보존 기간이 충분히 길게 설정되어 있는지 확인합니다. 내보내기가 완료되기 전에 제거되는 로그가 있으면, 복제를 처음부터 다시 시작해야 합니다. 백업 보존 기간 설정에 대한 자세한 정보는 [백업 소개](USER_WorkingWithAutomatedBackups.md) 단원을 참조하십시오.

1. `mysql.rds_set_configuration` 저장 프로시저를 사용하여 내보내기 중에 이진 로그가 제거되지 않을 만큼 충분히 길게 이진 로그 보존 기간을 설정합니다. 자세한 내용은 [MySQL 이진 로그 액세스](USER_LogAccess.MySQL.Binarylog.md) 섹션을 참조하세요.

1. 원본 MySQL DB 인스턴스의 이진 로그가 제거되지 않도록 더욱 확실히 하려면 원본 MySQL DB 인스턴스에서 Amazon RDS 읽기 전용 복제본을 생성합니다. 자세한 내용은 [읽기 전용 복제본 생성](USER_ReadRepl.Create.md) 섹션을 참조하세요.

1. Amazon RDS 읽기 전용 복제본이 생성된 후 `mysql.rds_stop_replication` 저장 프로시저를 호출하여 복제 프로세스를 중지합니다. 원본 MySQL DB 인스턴스가 더 이상 이진 로그 파일을 제거하지 않을 것이므로, 복제 프로세스에 해당 파일을 사용할 수 있습니다.

1. (선택 사항) 복제 오류를 방지하려면 `max_allowed_packet` 파라미터와 `slave_max_allowed_packet` 파라미터 모두 최대 크기로 설정하세요. 두 파라미터의 최대 크기는 모두 1GB입니다. 두 파라미터 모두에 대해 이 설정을 사용하는 것이 좋습니다. 파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md)을 참조하세요.

## 데이터베이스 복사
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CopyData"></a>

데이터베이스를 복사하려면 다음 단계를 수행하세요.

**데이터베이스를 복사하려면**

1. 소스 MySQL DB 인스턴스의 RDS 읽기 전용 복제본에 연결하고 MySQL `SHOW REPLICA STATUS\G` 문을 실행합니다. 다음에 대한 값을 확인합니다.
   + `Master_Host`
   + `Master_Port`
   + `Master_Log_File`
   + `Exec_Master_Log_Pos`
**참고**  
이전 버전의 MySQL에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

1. mysqldump 유틸리티를 사용하여 Amazon RDS에서 로컬 클라이언트 컴퓨터로 데이터를 복사하는 스냅샷을 생성합니다. 클라이언트 컴퓨터에 복제할 데이터베이스의 `mysqldump` 파일을 보관하기에 충분한 공간이 있는지 확인합니다. 매우 큰 데이터베이스의 경우 이 프로세스는 여러 시간이 걸릴 수 있습니다. MySQL 설명서의 [mysqldump를 사용하여 데이터 스냅샷 생성](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)에 나와 있는 지침을 따르세요.

   다음 예에서는 클라이언트에서 `mysqldump`를 실행하고 덤프를 파일에 씁니다.

   대상 LinuxmacOS, 또는Unix:

   ```
   mysqldump -h source_MySQL_DB_instance_endpoint \
       -u user \
       -ppassword \
       --port=3306 \
       --single-transaction \
       --routines \
       --triggers \
       --databases  database database2 > path/rds-dump.sql
   ```

   Windows의 경우:

   ```
   mysqldump -h source_MySQL_DB_instance_endpoint ^
       -u user ^
       -ppassword ^
       --port=3306 ^
       --single-transaction ^
       --routines ^
       --triggers ^
       --databases  database database2 > path\rds-dump.sql
   ```

   외부 MySQL 데이터베이스에 백업 파일을 로드할 수 있습니다. 자세한 내용은 MySQL 설명서의 [SQL 형식 백업 다시 로드](https://dev.mysql.com/doc/refman/8.0/en/reloading-sql-format-dumps.html)를 참조하세요. 다른 유틸리티를 실행하여 외부 MySQL 데이터베이스로 데이터를 로드할 수 있습니다.

## 내보내기 완료
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CompleteExp"></a>

내보내기를 완료하려면 다음 단계를 수행하세요.

**내보내기를 완료하려면**

1. MySQL `CHANGE MASTER` 문을 사용하여 외부 MySQL 데이터베이스를 구성합니다. 사용자가 부여한 `REPLICATION SLAVE` 권한의 ID와 암호를 지정합니다. RDS 읽기 전용 복제본에서 실행한 MySQL `Master_Host` 문에서 얻은 `Master_Port`, `Relay_Master_Log_File`, `Exec_Master_Log_Pos` 및 `SHOW REPLICA STATUS\G` 값을 지정합니다. 자세한 내용은 MySQL 설명서의 [CHANGE MASTER TO 문](https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html)을 참조하세요.
**참고**  
이전 버전의 MySQL에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

1. MySQL `START REPLICA` 명령을 사용하여 소스 MySQL DB 인스턴스에서 외부 MySQL 데이터베이스로 복제를 시작합니다.

   이렇게 하면 원본 MySQL DB 인스턴스에서 복제가 시작되고 Amazon RDS 읽기 전용 복제본에서 복제를 중지한 후 발생한 모든 원본 변경 사항이 내보내집니다.
**참고**  
이전 버전의 MySQL에는 `START SLAVE` 대신 `START REPLICA`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `START SLAVE`를 사용합니다.

1. 외부 MySQL 데이터베이스에서 MySQL `SHOW REPLICA STATUS\G` 명령을 실행하여 이 데이터베이스가 읽기 전용 복제본으로 작동 중인지 확인합니다. 결과 해석에 대한 자세한 내용은 MySQL 설명서의 [SHOW SLAVE \$1 REPLICA STATUS 문](https://dev.mysql.com/doc/refman/8.0/en/show-slave-status.html)을 참조하세요.

1. 외부 MySQL 데이터베이스에서의 복제가 원본 MySQL DB 인스턴스를 따라잡은 후, MySQL `STOP REPLICA` 명령을 사용하여 원본 MySQL DB 인스턴스에서의 복제를 중지하세요.
**참고**  
이전 버전의 MySQL에는 `STOP SLAVE` 대신 `STOP REPLICA`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `STOP SLAVE`를 사용합니다.

1. Amazon RDS 읽기 전용 복제본에서 `mysql.rds_start_replication` 저장 프로시저를 호출합니다. 이렇게 하면 Amazon RDS가 원본 MySQL DB 인스턴스에서 이진 로그 파일 제거를 시작할 수 있습니다.

# MySQL DB 인스턴스 옵션
<a name="Appendix.MySQL.Options"></a>

아래에는 MySQL DB 엔진을 실행하는 Amazon RDS 인스턴스에 사용 가능한 옵션 또는 추가 기능에 대한 설명이 나와 있습니다. 이러한 옵션들을 활성화하려면 먼저 사용자 정의 옵션 그룹에 추가한 다음 옵션 그룹과 DB 인스턴스를 연동시켜야 합니다. 옵션 그룹 작업에 대한 자세한 내용은 [옵션 그룹 작업](USER_WorkingWithOptionGroups.md) 단원을 참조하십시오.

Amazon RDS는 다음의 MySQL 옵션을 지원합니다.


****  

| 옵션 | 옵션 ID | 엔진 버전 | 
| --- | --- | --- | 
|  [MySQL에 대한 MariaDB 감사 플러그인 지원](Appendix.MySQL.Options.AuditPlugin.md)  |  `MARIADB_AUDIT_PLUGIN`  | 모든 MySQL 8.4 버전MySQL 8.0.28 이상의 8.0 버전모든 MySQL 5.7 버전 | 
|  [MySQL memcached 지원](Appendix.MySQL.Options.memcached.md)  |  `MEMCACHED`  |  모든 MySQL 5.7 및 8.0 버전  | 

# MySQL에 대한 MariaDB 감사 플러그인 지원
<a name="Appendix.MySQL.Options.AuditPlugin"></a>

Amazon RDS는 오픈 소스 MariaDB 감사 플러그인을 기반으로 MySQL 데이터베이스 인스턴스용 감사 플러그인을 제공합니다. 자세한 내용은 [MySQL Server GitHub 리포지토리의 감사 플러그인](https://github.com/aws/audit-plugin-for-mysql)을 참조하세요.

**참고**  
MySQL용 감사 플러그인은 MariaDB 감사 플러그인을 기반으로 합니다. 이 문서에서는 이를 MariaDB 감사 플러그인이라고 합니다.

MariaDB 감사 플러그인은 사용자의 데이터베이스 로그온, 데이터베이스에 대해 실행되는 쿼리 등의 데이터베이스 활동을 기록합니다. 데이터베이스 활동 기록은 로그 파일에 저장됩니다.

## 감사 플러그인 옵션 설정
<a name="Appendix.MySQL.Options.AuditPlugin.Options"></a>

Amazon RDS는 MariaDB 감사 플러그인 옵션의 다음 설정을 지원합니다.


| 옵션 설정 | 유효한 값 | 기본값 | 설명 | 
| --- | --- | --- | --- | 
| `SERVER_AUDIT_FILE_PATH` | `/rdsdbdata/log/audit/` | `/rdsdbdata/log/audit/` |  로그 파일의 위치. 로그 파일에는 `SERVER_AUDIT_EVENTS`에서 지정된 활동 기록이 포함되어 있습니다. 자세한 내용은 [데이터베이스 로그 파일 보기 및 나열](USER_LogAccess.Procedural.Viewing.md) 및 [ MySQL 데이터베이스 로그 파일](USER_LogAccess.Concepts.MySQL.md) 단원을 참조하십시오.  | 
| `SERVER_AUDIT_FILE_ROTATE_SIZE` | 1–1000000000 | 1000000 |  도달 시 파일 로테이션을 초래하는 바이트 크기. 자세한 내용은 [RDS for MySQL 데이터베이스 로그 개요](USER_LogAccess.MySQL.LogFileSize.md) 섹션을 참조하세요.  | 
| `SERVER_AUDIT_FILE_ROTATIONS` | 0–100 | 9 |  `server_audit_output_type=file`일 경우 저장할 로그 교체 수입니다. 0으로 설정하면 로그 파일이 교체되지 않습니다. 자세한 내용은 [RDS for MySQL 데이터베이스 로그 개요](USER_LogAccess.MySQL.LogFileSize.md) 및 [데이터베이스 로그 파일 다운로드](USER_LogAccess.Procedural.Downloading.md)(을)를 참조하세요.  | 
| `SERVER_AUDIT_EVENTS` | `CONNECT`, `QUERY`, `QUERY_DDL`, `QUERY_DML`, `QUERY_DML_NO_SELECT`, `QUERY_DCL` | `CONNECT`, `QUERY` |  로그에 기록할 활동 유형. MariaDB 감사 플러그인 설치 자체가 로깅됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html) MySQL에서 `TABLE`이 지원되지 않습니다.  | 
| `SERVER_AUDIT_INCL_USERS` | 복수의 쉼표로 분리된 값 | 없음 |  지정된 사용자들의 활동만을 포함하십시오. 기본적으로 활동은 모든 사용자에 대해 기록됩니다. `SERVER_AUDIT_INCL_USERS` 및 `SERVER_AUDIT_EXCL_USERS`는 상호 배타적입니다. `SERVER_AUDIT_INCL_USERS`에 값을 추가하는 경우 `SERVER_AUDIT_EXCL_USERS`에 값이 추가되지 않았는지 확인합니다.  | 
| `SERVER_AUDIT_EXCL_USERS` | 복수의 쉼표로 분리된 값 | 없음 |  지정된 사용자들의 활동을 제외하십시오. 기본적으로 활동은 모든 사용자에 대해 기록됩니다. `SERVER_AUDIT_INCL_USERS` 및 `SERVER_AUDIT_EXCL_USERS`는 상호 배타적입니다. `SERVER_AUDIT_EXCL_USERS`에 값을 추가하는 경우 `SERVER_AUDIT_INCL_USERS`에 값이 추가되지 않았는지 확인합니다.  `rdsadmin` 사용자는 데이터베이스 상태를 확인하기 위해 1초마다 데이터베이스에 쿼리를 요청합니다. 다른 설정에 따라 이 활동은 로그 파일의 크기를 아주 빨리 대폭 증가시킬 수 있습니다. 이 활동을 기록할 필요가 없는 경우, `rdsadmin` 사용자를 `SERVER_AUDIT_EXCL_USERS` 목록에 추가하십시오.   `CONNECT` 활동은 해당 사용자가 이 옵션 설정에 지정되었다 해도 모든 사용자에 대해 기록됩니다.   | 
| `SERVER_AUDIT_LOGGING` | `ON` | `ON` |  로깅이 활성화되었습니다. 유일한 유효 값은 `ON`입니다. Amazon RDS는 로깅 비활성화를 지원하지 않습니다. 로깅을 비활성화하려면 MariaDB 감사 플러그인을 제거하십시오. 자세한 내용은 [MariaDB 감사 플러그인 제거하기](#Appendix.MySQL.Options.AuditPlugin.Remove) 섹션을 참조하세요.  | 
| `SERVER_AUDIT_QUERY_LOG_LIMIT` | 0–2147483647 | 1024 |  레코드에서 쿼리 문자열의 길이 제한.  | 

## MariaDB 감사 플러그인 추가하기
<a name="Appendix.MySQL.Options.AuditPlugin.Add"></a>

MariaDB 감사 플러그인을 DB 인스턴스에 추가하는 일반적인 프로세스는 다음과 같습니다.
+ 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 복사 또는 수정합니다.
+ 옵션을 옵션 그룹에 추가합니다.
+ 옵션 그룹을 DB 인스턴스에 연동시킵니다.

MariaDB 감사 플러그인을 추가한 후 DB 인스턴스를 재시작할 필요가 없습니다. 옵션 그룹이 활성화되자마자 감사가 즉시 시작됩니다.

**중요**  
MariaDB 감사 플러그인을 DB 인스턴스에 추가하면 작동이 중단될 수 있습니다. 유지 관리 기간 또는 데이터베이스 워크로드가 적은 시간에 MariaDB 감사 플러그인을 추가하는 것이 좋습니다.

**MariaDB 감사 플러그인을 추가하려면,**

1. 사용할 옵션 그룹을 결정합니다. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 사용합니다. 기존 옵션 그룹을 사용하려면 다음 단계로 건너뛰십시오. 그렇지 않다면 사용자 지정 DB 옵션 그룹을 생성합니다. **엔진**으로 **mysql**을 선택하고, **메이저 엔진 버전**으로 **5.7**, **8.0** 또는 **8.4**를 선택합니다. 자세한 내용은 [옵션 그룹 생성](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create) 섹션을 참조하세요.

1. **MARIADB\$1AUDIT\$1PLUGIN** 옵션을 옵션 그룹에 추가하고 옵션 설정을 구성하십시오. 옵션 추가에 대한 자세한 내용은 [옵션 그룹에 옵션 추가](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption) 섹션을 참조하세요. 각 설정에 대한 자세한 내용은 [감사 플러그인 옵션 설정](#Appendix.MySQL.Options.AuditPlugin.Options) 단원을 참조하십시오.

1. 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스에 적용합니다.
   + 새 DB 인스턴스의 경우, 인스턴스를 시작할 때 옵션 그룹을 적용합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 섹션을 참조하세요.
   + 기존 DB 인스턴스의 경우, 해당 인스턴스를 수정하고 새 옵션 그룹을 연결하여 옵션 그룹을 적용합니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

## 감사 로그 형식
<a name="Appendix.MySQL.Options.AuditPlugin.LogFormat"></a>

로그 파일은 UTF-8 형식의 쉼표로 구분된 변수(CSV) 파일로 표시됩니다.

**작은 정보**  
로그 파일 항목은 순서대로 나열되지 않습니다. 항목의 순서를 정하려면 타임스탬프 값을 사용합니다. 최신 이벤트를 보기 위해 모든 로그 파일을 확인해야 하는 경우가 있을 수 있습니다. 로그 데이터를 보다 유연하게 정렬하고 검색하려면 CloudWatch에 감사 로그를 업로드하고 CloudWatch 인터페이스를 사용하여 보는 설정을 켜세요.  
 더 많은 유형의 필드와 JSON 형식의 출력이 있는 감사 데이터를 보기 위해 데이터베이스 활동 스트림 기능을 사용할 수도 있습니다. 자세한 내용은 [데이터베이스 활동 스트림을 사용하여 Amazon RDS 모니터링](DBActivityStreams.md) 섹션을 참조하세요.

감사 로그 파일은 지정된 순서대로 다음의 쉼표로 구분된 정보를 행에 포함합니다.


| 필드 | 설명 | 
| --- | --- | 
|  timestamp  |  로깅된 이벤트의 `YYYYMMDD` 다음 `HH:MI:SS`(24시간 형식).  | 
|  serverhost  |  이벤트가 기록되는 인스턴스의 이름입니다.  | 
|  사용자 이름  |  사용자의 연결된 사용자 이름입니다.  | 
|  host  |  사용자가 연결한 호스트입니다.  | 
|  connectionid  |  기록된 작업의 연결 ID 번호입니다.  | 
|  queryid  |  관계형 테이블 이벤트 및 관련 쿼리를 검색하는 데 사용할 수 있는 쿼리 ID 번호입니다. `TABLE` 이벤트의 경우 여러 줄이 추가됩니다.  | 
|  작업을 통해 처리 속도를 높일 수 있습니다  |  기록된 작업 유형입니다. 가능한 값은 `CONNECT`, `QUERY`, `READ`, `WRITE`, `CREATE`, `ALTER`, `RENAME` 및 `DROP`입니다.  | 
|  데이터베이스  |  `USE` 명령에 의해 설정된 활성 데이터베이스입니다.  | 
|  객체  |  `QUERY` 이벤트의 경우 이 값은 데이터베이스에서 수행한 쿼리를 나타냅니다. `TABLE` 이벤트의 경우 이 값은 테이블 이름을 나타냅니다.  | 
|  retcode  |  기록된 작업의 반환 코드입니다.  | 
|  connection\$1type  |  서버 연결의 보안 상태입니다. 가능한 값은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)  | 

## MariaDB 감사 플러그인 로그 보기 및 다운로드
<a name="Appendix.MySQL.Options.AuditPlugin.Log"></a>

MariaDB 감사 플러그인을 활성화한 후 다른 텍스트 기반 로그 파일에 액세스하는 것과 동일한 방식으로 로그 파일의 결과에 액세스할 수 있습니다. 감사 로그 파일은 `/rdsdbdata/log/audit/`에 있습니다. 콘솔에서 로그 파일 보기에 대한 자세한 내용은 [데이터베이스 로그 파일 보기 및 나열](USER_LogAccess.Procedural.Viewing.md)을(를) 참조하십시오. 로그 파일 다운로드에 대한 자세한 내용은 [데이터베이스 로그 파일 다운로드](USER_LogAccess.Procedural.Downloading.md)을(를) 참조하십시오.

## MariaDB 감사 플러그인 설정 수정
<a name="Appendix.MySQL.Options.AuditPlugin.ModifySettings"></a>

MariaDB 감사 플러그인을 활성화한 후 설정을 수정할 수 있습니다. 옵션 설정을 변경하는 방법에 대한 자세한 내용은 [옵션 설정 수정](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)을(를) 참조하십시오. 각 설정에 대한 자세한 내용은 [감사 플러그인 옵션 설정](#Appendix.MySQL.Options.AuditPlugin.Options) 단원을 참조하십시오.

## MariaDB 감사 플러그인 제거하기
<a name="Appendix.MySQL.Options.AuditPlugin.Remove"></a>

Amazon RDS는 MariaDB 감사 플러그인에서의 로깅 끄기를 지원하지 않습니다. 다만 DB 인스턴스에서 플러그인을 제거할 수는 있습니다. MariaDB 감사 플러그인을 제거할 때 DB 인스턴스가 자동으로 재시작하여 감사가 중지됩니다.

MariaDB 감사 플러그인을 DB 인스턴스에서 제거하려면 다음 중 하나를 실행하십시오.
+ MariaDB 감사 플러그인이 속한 옵션 그룹에서 MariaDB 감사 플러그인 옵션을 제거합니다. 이 변경은 해당 옵션 그룹을 사용하는 모든 DB 인스턴스에 영향을 미칩니다. 자세한 내용은 [옵션 그룹에서 옵션 제거](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption) 섹션을 참조하세요.
+ DB 인스턴스를 수정하고, 플러그인이 포함되지 않은 다른 옵션 그룹을 지정합니다. 이 변경은 단일 DB 인스턴스에 영향을 미칩니다. 기본(빈) 옵션 그룹을 지정하거나 다른 사용자 지정 옵션 그룹을 지정할 수 있습니다. 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.

# MySQL memcached 지원
<a name="Appendix.MySQL.Options.memcached"></a>

Amazon RDS는 MySQL 5.6에서 도입된 InnoDB 테이블에 대한 `memcached` 인터페이스 사용을 지원합니다. `memcached` API가 있으면 애플리케이션에서 NoSQL 키-값 데이터 스토어와 비슷한 방식으로 InnoDB 테이블을 사용할 수 있습니다.

**참고**  
MySQL 8.4에서는 더 이상 memcached 인터페이스를 사용할 수 없습니다. DB 인스턴스를 MySQL 8.4로 업그레이드할 때는 기존 옵션 그룹에서 `memcached`를 비활성화해야 합니다.

`memcached` 인터페이스는 간단한 키 기반 캐시입니다. 애플리케이션은 이 `memcached`를 사용하여 키-값 데이터 쌍을 삽입하거나, 조작하거나, 캐시에서 가져옵니다. MySQL 5.6은 데몬 서비스를 이용한 플러그인이 추가되면서 `memcached` 프로토콜을 통해 InnoDB 테이블의 데이터를 노출시킵니다. MySQL `memcached` 플러그인에 대한 자세한 내용은 [InnoDB와 memcached의 통합](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html)을 참조하세요.

**RDS for MySQL DB 인스턴스에 memcached 지원을 활성화하는 방법**

1. 먼저 `memcached` 인터페이스에 대한 액세스를 제어하는 데 사용할 보안 그룹을 결정합니다. 기존에 SQL 인터페이스를 사용하는 애플리케이션과 앞으로 `memcached` 인터페이스에 액세스할 애플리케이션이 동일한 경우에는 기존에 SQL 인터페이스에서 사용하는 VPC 또는 DB 보안 그룹을 그대로 사용할 수 있습니다. 하지만 `memcached` 인터페이스에 액세스하는 애플리케이션이 다를 경우에는 새로운 VPC 또는 DB 보안 그룹을 정의해야 합니다. 보안 그룹 관리에 대한 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하세요.

1. 사용자 정의 DB 옵션 그룹을 생성한 후 엔진 유형 및 버전으로 MySQL을 선택합니다. 옵션 그룹의 생성에 대한 자세한 내용은 [옵션 그룹 생성](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)을(를) 참조하세요.

1. [`MEMCACHED`] 옵션을 옵션 그룹에 추가합니다. `memcached` 인터페이스가 사용할 포트를 비롯해 인터페이스에 대한 액세스 제어에 사용할 보안 그룹을 지정합니다. 옵션 추가에 대한 자세한 내용은 [옵션 그룹에 옵션 추가](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption) 섹션을 참조하세요.

1. 필요하다면 옵션 설정을 변경하여 `memcached` 파라미터를 구성합니다. 옵션 설정을 변경하는 방법에 대한 자세한 내용은 [옵션 설정 수정](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)을(를) 참조하십시오.

1. 옵션 그룹을 인스턴스에 적용합니다. Amazon RDS는 옵션 그룹이 적용될 때 해당 인스턴스에 대한 `memcached` 지원을 활성화합니다.
   + 인스턴스 실행 시 사용자 정의 옵션 그룹을 지정하여 새로운 인스턴스에 대한 `memcached` 지원을 활성화합니다. MySQL 인스턴스 실행에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 생성](USER_CreateDBInstance.md) 단원을 참조하십시오.
   + 인스턴스 설정 변경 시 사용자 정의 옵션 그룹을 지정하여 기존 인스턴스에 대한 `memcached` 지원을 활성화합니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

1. MySQL 테이블에서 `memcached` 인터페이스를 통해 액세스할 수 있는 열을 지정합니다. `memcached` 플러그인은 `containers`라는 이름의 전용 데이터베이스에 `innodb_memcache`라는 이름의 카탈로그 테이블을 생성합니다. 행을 `containers` 테이블에 삽입하여 `memcached`를 통해 액세스할 수 있도록 InnoDB 테이블을 매핑합니다. InnoDB 테이블에서 `memcached` 키 값을 저장하는 데 사용할 열 하나와, 이 키와 연동된 데이터 값을 저장하는 데 사용할 하나 이상의 열을 지정합니다. 또한 `memcached` 애플리케이션이 해당 열 세트를 참조하는 데 사용할 이름도 지정합니다. 행을 `containers` 테이블에 삽입하는 방법에 대한 자세한 내용은 [InnoDB memcached 플러그인의 내부 요소](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html)를 참조하십시오. InnoDB 테이블을 매핑하고 `memcached`를 통해 액세스하는 예제는 [InnoDB memcached 플러그인에 대한 애플리케이션 작성](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html)을 참조하세요.

1. `memcached` 인터페이스에 액세스하는 애플리케이션이 SQL 인터페이스를 사용하는 애플리케이션과 다른 컴퓨터 또는 EC2 인스턴스에 연결되어 있는 경우에는 이 컴퓨터에 대한 연결 정보를 MySQL 인스턴스와 연동되어 있는 VPC 보안 그룹에 추가합니다. 보안 그룹 관리에 대한 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하세요.

인스턴스에 대한 `memcached` 지원을 비활성화하려면 인스턴스를 변경하여 MySQL 버전의 기본 옵션 그룹을 지정합니다. DB 인스턴스 변경에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하십시오.

## MySQL memcached 보안 고려 사항
<a name="w2aac47c83c15c13"></a>

`memcached` 프로토콜은 사용자 인증을 지원하지 않습니다. MySQL `memcached` 보안 고려 사항에 대한 자세한 내용은 MySQL 설명서의 [InnoDB memcached 플러그인의 보안 고려 사항](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html)을 참조하세요.

다음은 `memcached` 인터페이스의 보안을 강화하는 데 효과적인 작업입니다.
+ `MEMCACHED` 옵션을 옵션 그룹에 추가할 때 기본 11211이 아닌 다른 포트를 지정합니다.
+ 기존에 신뢰할 수 있는 클라이언트 주소 및 EC2 인스턴스에 대한 액세스를 제한하는 VPC 보안 그룹과 `memcached` 인터페이스가 연동되어 있는지 확인합니다. 보안 그룹 관리에 대한 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 섹션을 참조하세요.

## MySQL memcached 연결 정보
<a name="w2aac47c83c15c15"></a>

`memcached` 인터페이스에 연결하려면 애플리케이션이 Amazon RDS 인스턴스의 DNS 이름과 `memcached` 포트 번호를 모두 지정해야 합니다. 예를 들어 인스턴스의 DNS 이름이 `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com`이고, memcached 인스턴스가 포트 11212를 사용한다면 PHP에 지정되는 연결 정보는 다음과 같습니다.

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**MySQL DB 인스턴스의 DNS 이름과 memcached 포트를 찾으려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. AWS Management Console 우측 상단 모서리에서 DB 인스턴스가 속한 리전을 선택합니다.

1. 탐색 창에서 **데이터베이스**를 선택합니다.

1. 세부 정보를 표시하고자 하는 MySQL DB 인스턴스 이름을 선택합니다.

1. [**Connect**] 섹션에 있는 [**Endpoint**] 필드의 값을 기록해둡니다. DNS 이름은 엔드포인트와 같습니다. 또한 [**Connect**] 섹션에 있는 포트는 `memcached` 인터페이스에 액세스하는 데 사용되지 않습니다.

1. **세부 정보** 섹션의 **옵션 그룹** 필드에 나열된 이름을 기록해둡니다.

1. 탐색 창에서 **옵션 그룹**을 선택합니다.

1. MySQL DB 인스턴스가 사용하는 옵션 그룹의 이름을 선택하여 옵션 그룹 세부 정보를 표시합니다. [**Options**] 섹션에 있는 [**MEMCACHED**] 옵션의 [**Port**] 설정 값을 기록해둡니다.

## MySQL memcached 옵션 설정
<a name="w2aac47c83c15c17"></a>

Amazon RDS는 MySQL `memcached` 파라미터를 Amazon RDS `MEMCACHED` 옵션의 옵션 설정으로 노출시킵니다.

### MySQL memcached 파라미터
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE` – 커밋으로 새로운 트랜잭션을 시작하기 전에 실행해야 할 `memcached` 읽기 연산(get) 수를 지정하는 정수입니다. 허용 값은 1\$14294967295이고, 기본값은 1입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `DAEMON_MEMCACHED_W_BATCH_SIZE` – 커밋으로 새로운 트랜잭션을 시작하기 전에 실행해야 할 `memcached` 쓰기 연산(add, set, incr 등) 수를 지정하는 정수입니다. 허용 값은 1\$14294967295이고, 기본값은 1입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `INNODB_API_BK_COMMIT_INTERVAL` – InnoDB `memcached` 인터페이스를 사용하는 자동 커밋 모드의 유휴 연결(idle connection) 횟수를 지정하는 정수입니다. 허용 값은 1\$11073741824이고, 기본값은 5입니다. 인스턴스를 다시 시작할 필요 없이 옵션이 바로 적용됩니다.
+  `INNODB_API_DISABLE_ROWLOCK` – InnoDB `memcached` 인터페이스 사용 시 행 잠금 기능을 활성화(1. true) 또는 비활성화(0. false)하는 부울입니다. 기본 값은 0(false)입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `INNODB_API_ENABLE_MDL` – 0(false)으로 설정 시 InnoDB `memcached` 플러그인이 사용하는 테이블을 잠그는 부울입니다. 따라서 SQL 인터페이스에서 DDL을 통해 삭제 또는 변경이 불가능합니다. 기본 값은 0(false)입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `INNODB_API_TRX_LEVEL` – `memcached` 인터페이스에서 처리하는 쿼리의 트랜잭션 격리 수준을 지정하는 정수입니다. 허용 값은 0\$13입니다. 기본값은 0입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.

Amazon RDS가 위 MySQL `memcached` 파라미터를 구성하지만 다음 파라미터는 변경할 수 없습니다. `DAEMON_MEMCACHED_LIB_NAME`, `DAEMON_MEMCACHED_LIB_PATH` 및 `INNODB_API_ENABLE_BINLOG`. MySQL 관리자가 `daemon_memcached_options`를 사용하여 설정하는 파라미터는 Amazon RDS의 개별 `MEMCACHED` 옵션 설정으로 이용할 수 있습니다.

### MySQL daemon\$1memcached\$1options 파라미터
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL` – 사용할 바인딩 프로토콜을 지정하는 문자열입니다. 허용 값은 `auto`, `ascii` 또는 `binary`입니다. 기본 값은 `auto`이고, 이 경우 서버가 자동으로 클라이언트와 프로토콜을 협상합니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `BACKLOG_QUEUE_LIMIT` – 의 처리를 기다리는 네트워크 연결 수를 지정하는 정수입니다.`memcached` 이 파라미터의 최대 값을 높이면 `memcached` 인스턴스에 연결할 수 없다는 클라이언트의 오류 메시지가 줄어들 수 있지만 그렇다고 서버 성능이 향상되는 것은 아닙니다. 허용 값은 1\$12048이고, 기본값은 1024입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `CAS_DISABLED` – Compare and Swap(CAS) 기능을 활성화(1. true)하거나 비활성화(0. false)하는 부울로서, 이 기능을 활성화하면 항목 1개의 크기가 8바이트까지 줄어듭니다. 기본 값은 0(false)입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `CHUNK_SIZE` – 가장 작은 항목의 키, 값 및 플래그에 할당할 최소 청크 크기(바이트)를 지정하는 정수입니다. 허용 값은 1\$148입니다. 기본 값은 48이며, 값이 작을수록 메모리 효율이 크게 개선됩니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `CHUNK_SIZE_GROWTH_FACTOR` – 새로운 청크 크기를 조절하는 부동 소수점입니다. 이전 청크 크기와 `CHUNK_SIZE_GROWTH_FACTOR`를 곱한 값이 새로운 청크의 크기가 됩니다. 허용되는 값은 1\$12이고, 기본값은 1.25입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `ERROR_ON_MEMORY_EXHAUSTED` – 1(true)로 설정할 경우, 항목을 저장할 메모리가 없으면 `memcached`가 항목을 제거하지 않고 오류를 반환하는 부울입니다. 0(false)으로 설정할 경우 메모리가 없으면 `memcached`가 항목을 제거합니다. 기본 값은 0(false)입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `MAX_SIMULTANEOUS_CONNECTIONS` – 동시에 접속할 수 있는 최대 수를 지정하는 정수입니다. 이 값을 10보다 작게 설정하면 MySQL을 시작하지 못합니다. 허용 값은 10\$11024이고, 기본값은 1024입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다.
+  `VERBOSITY` – MySQL 오류 로그에서 `memcached` 서비스가 기록할 정보 수준을 지정하는 문자열입니다. 기본값은 v입니다. 옵션을 적용하려면 인스턴스를 다시 시작해야 합니다. 허용 값은 다음과 같습니다.
  +  `v` – 주요 이벤트 루프 실행 중 발생하는 오류와 경고를 기록합니다.
  +  `vv` – v에서 기록하는 정보에 더하여 각 클라이언트 명령과 응답을 기록합니다.
  +  `vvv` – vv에서 기록하는 정보에 더하여 내부의 상태 전환을 기록합니다.

Amazon RDS가 위 MySQL `DAEMON_MEMCACHED_OPTIONS` 파라미터를 구성하지만 다음 파라미터는 변경할 수 없습니다. `DAEMON_PROCESS`, `LARGE_MEMORY_PAGES`, `MAXIMUM_CORE_FILE_LIMIT`, `MAX_ITEM_SIZE`, `LOCK_DOWN_PAGE_MEMORY`, `MASK`, `IDFILE`, `REQUESTS_PER_EVENT`, `SOCKET` 및 `USER`.

# MySQL 파라미터
<a name="Appendix.MySQL.Parameters"></a>

기본적으로, MySQL DB 인스턴스는 MySQL 데이터베이스에만 해당되는 DB 파라미터 그룹을 사용합니다. 이 파라미터 그룹에는 MySQL 데이터베이스 엔진에 대한 파라미터가 포함되어 있습니다. 파라미터 그룹 작업 및 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오.

RDS for MySQL 파라미터는 사용자가 선택한 스토리지 엔진의 기본값으로 설정됩니다. MySQL 파라미터에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html)를 참조하세요. MySQL 스토리지 엔진에 대한 자세한 내용은 [RDS for MySQL에 대해 지원되는 스토리지 엔진](MySQL.Concepts.FeatureSupport.md#MySQL.Concepts.Storage) 섹션을 참조하세요.

RDS 콘솔이나 AWS CLI를 사용하여 특정 RDS for MySQL 버전에 대해 사용할 수 있는 파라미터를 볼 수 있습니다. RDS 콘솔의 파라미터 그룹에서 MySQL 파라미터 보기에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 값 보기](USER_WorkingWithParamGroups.Viewing.md) 섹션을 참조하세요.

AWS CLI로 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html) 명령을 실행하여 RDS for MySQL 버전의 파라미터를 볼 수 있습니다. `--db-parameter-group-family` 옵션에 대해 다음 값 중 하나를 지정할 수 있습니다.
+ `mysql8.4`
+ `mysql8.0`
+ `mysql5.7`

예를 들어 RDS for MySQL 버전 8.0에 대한 파라미터를 보려면 다음 명령을 실행합니다.

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0
```

출력 결과는 다음과 비슷합니다.

```
{
    "EngineDefaults": {
        "Parameters": [
            {
                "ParameterName": "activate_all_roles_on_login",
                "ParameterValue": "0",
                "Description": "Automatically set all granted roles as active after the user has authenticated successfully.",
                "Source": "engine-default",
                "ApplyType": "dynamic",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": true
            },
            {
                "ParameterName": "allow-suspicious-udfs",
                "Description": "Controls whether user-defined functions that have only an xxx symbol for the main function can be loaded",
                "Source": "engine-default",
                "ApplyType": "static",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": false
            },
            {
                "ParameterName": "auto_generate_certs",
                "Description": "Controls whether the server autogenerates SSL key and certificate files in the data directory, if they do not already exist.",
                "Source": "engine-default",
                "ApplyType": "static",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": false
            },            
        ...
```

RDS for MySQL 버전 8.0에 대한 수정 가능 파라미터를 나열하려면 다음 명령을 실행합니다.

대상 LinuxmacOS, 또는Unix:

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0 \
   --query 'EngineDefaults.Parameters[?IsModifiable==`true`]'
```

Windows의 경우:

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0 ^
   --query "EngineDefaults.Parameters[?IsModifiable==`true`]"
```

# MySQL DB 인스턴스에 대한 공통 DBA 작업
<a name="Appendix.MySQL.CommonDBATasks"></a>

다음 콘텐츠에서는 MySQL 데이터베이스 엔진을 실행하는 DB 인스턴스의 일부 공통 DBA 작업에 대한 Amazon RDS별 구현을 설명합니다. 관리형 서비스 환경을 제공하기 위해 Amazon RDS는 DB 인스턴스에 대해 shell 액세스를 제공하지 않습니다. 또한 고급 권한이 필요한 특정 시스템 절차와 테이블에 대한 액세스를 제한합니다.

Amazon RDS의 MySQL 로그 파일 작업 방법에 대한 자세한 내용은 [ MySQL 데이터베이스 로그 파일](USER_LogAccess.Concepts.MySQL.md) 단원을 참조하십시오.

## 사전 정의된 사용자 이해
<a name="Appendix.MySQL.CommonDBATasks.users"></a>

Amazon RDS는 새 RDS for MySQL DB 인스턴스를 사용하여 미리 정의된 여러 사용자를 자동으로 생성합니다. 미리 정의된 사용자 및 권한은 변경할 수 없습니다. 미리 정의된 사용자에 대한 권한은 삭제하거나 이름을 바꾸거나 수정할 수 없습니다. 이를 시도할 시에는 오류가 발생합니다.
+ **rdsadmin** - `superuser` 권한이 있는 관리자가 독립 실행형 MySQL 데이터베이스에서 수행할 수 있는 많은 관리 작업을 처리하기 위해 생성된 사용자입니다. 이 사용자는 RDS for MySQL에서 다양한 관리 작업에 내부적으로 사용됩니다.
+ **rdsrepladmin** – Amazon RDS에서 RDS for MySQL DB 인스턴스 및 클러스터의 복제 작업을 지원하기 위해 내부적으로 사용하는 사용자입니다.

다른 일반적인 DBA 작업에 대한 자세한 내용은 다음 주제를 참조하세요.

**Topics**
+ [

## 사전 정의된 사용자 이해
](#Appendix.MySQL.CommonDBATasks.users)
+ [

# RDS for MySQL에 대한 역할 기반 권한 모델
](Appendix.MySQL.CommonDBATasks.privilege-model.md)
+ [

# RDS for MySQL에 대한 동적 권한
](Appendix.MySQL.CommonDBATasks.dynamic-privileges.md)
+ [

# RDS for MySQL에 대한 세션 또는 쿼리 종료
](Appendix.MySQL.CommonDBATasks.End.md)
+ [

# RDS for MySQL에 대한 현재 복제 오류 건너뛰기
](Appendix.MySQL.CommonDBATasks.SkipError.md)
+ [

# RDS for MySQL의 충돌 복구 시간 개선을 위한 InnoDB 테이블스페이스 작업
](Appendix.MySQL.CommonDBATasks.Tables.md)
+ [

# RDS for MySQL의 글로벌 상태 기록 관리
](Appendix.MySQL.CommonDBATasks.GoSH.md)
+ [

# MySQL 8.4에서 버퍼 풀 크기 및 다시 실행 로그 용량 구성
](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)

# RDS for MySQL에 대한 역할 기반 권한 모델
<a name="Appendix.MySQL.CommonDBATasks.privilege-model"></a>

RDS for MySQL 버전 8.0.36부터는 `mysql` 데이터베이스의 테이블을 직접 수정할 수 없습니다. 특히 `grant` 테이블에서 데이터 조작 언어(DML) 작업을 수행하여 데이터베이스 사용자를 만들 수 없습니다. 대신 `CREATE USER`, `GRANT`, `REVOKE` 등의 MySQL 계정 관리 문을 사용하여 사용자에게 역할 기반 권한을 부여합니다. 또한 `mysql` 데이터베이스에 저장 프로시저를 비롯한 다른 종류의 객체를 생성할 수 없습니다. 여전히 `mysql` 테이블을 쿼리할 수 있습니다. 이진 로그 복제를 사용하는 경우 소스 DB 인스턴스의 `mysql` 테이블에 대한 직접 변경은 대상 클러스터로 복제되지 않습니다.

경우에 따라 애플리케이션에서 바로 가기를 사용하여 `mysql` 테이블에 삽입함으로써 사용자 또는 다른 객체를 만들 수 있습니다. 그렇다면 애플리케이션 코드를 변경하여 `CREATE USER`와 같은 해당 명령문을 사용합니다.

외부 MySQL 데이터베이스에서 마이그레이션하는 동안 데이터베이스 사용자의 메타데이터를 내보내려면 다음 메서드 중 하나를 사용합니다.
+ MySQL Shell의 인스턴스 덤프 유틸리티를 필터와 함께 사용하여 사용자, 역할 및 권한 부여를 제외합니다. 다음 예제는 사용하는 명령 구문을 보여 줍니다. `outputUrl`이 비어 있는지 확인합니다.

  ```
  mysqlsh user@host -- util.dumpInstance(outputUrl,{excludeSchemas:['mysql'],users: true})
  ```

  자세한 내용은 MySQL 참조 설명서의 [Instance Dump Utility, Schema Dump Utility, Table Dump Utility](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html)를 참조하세요.
+ `mysqlpump` 클라이언트 유틸리티를 사용하세요. 이 예제에는 `mysql` 시스템 데이터베이스의 테이블을 제외한 모든 테이블이 포함됩니다. 또한 마이그레이션된 데이터베이스의 모든 MySQL 사용자를 재현하는 `CREATE USER` 및 `GRANT` 문이 포함됩니다.

  ```
  mysqlpump --exclude-databases=mysql --users
  ```

  MySQL 8.4에서는 `mysqlpump` 클라이언트 유틸리티를 더 이상 사용할 수 없습니다. 대신 `mysqldump`를 사용합니다.

많은 사용자 또는 애플리케이션에 대한 권한 관리를 단순화하려면 `CREATE ROLE` 문을 사용하여 권한 집합이 있는 역할을 만들 수 있습니다. 그런 다음, `GRANT` 및 `SET ROLE` 문과 `current_role` 함수를 사용하여 사용자 또는 애플리케이션에 역할을 할당하고 현재 역할을 전환하며 어떤 역할이 유효한지 확인할 수 있습니다. MySQL 8.0의 역할 기반 권한 시스템에 대한 자세한 내용은 MySQL 참조 설명서의 [역할 사용](https://dev.mysql.com/doc/refman/8.0/en/roles.html)을 참조하세요.

**중요**  
애플리케이션에서 직접 마스터 사용자를 사용하지 않는 것이 좋습니다. 대신에 애플리케이션에 필요한 최소 권한으로 생성한 데이터베이스 사용자를 사용하는 모범 사례를 준수하십시오.

버전 8.0.36부터 RDS for MySQL에는 다음과 같은 모든 권한이 있는 특수 역할이 포함됩니다. 이 역할의 이름은 `rds_superuser_role`입니다. 각 DB 인스턴스의 기본 관리 사용자에게는 이미 이 역할이 부여되었습니다. `rds_superuser_role` 역할에는 모든 데이터베이스 객체에 대한 다음과 같은 권한이 포함됩니다.
+  `ALTER` 
+  `APPLICATION_PASSWORD_ADMIN` 
+  `ALTER ROUTINE` 
+  `CREATE` 
+  `CREATE ROLE` 
+  `CREATE ROUTINE` 
+  `CREATE TEMPORARY TABLES` 
+  `CREATE USER` 
+  `CREATE VIEW` 
+  `DELETE` 
+  `DROP` 
+  `DROP ROLE` 
+  `EVENT` 
+  `EXECUTE` 
+  `INDEX` 
+  `INSERT` 
+  `LOCK TABLES` 
+  `PROCESS` 
+  `REFERENCES` 
+  `RELOAD` 
+  `REPLICATION CLIENT` 
+  `REPLICATION SLAVE` 
+  `ROLE_ADMIN` 
+  `SET_USER_ID` 
+  `SELECT` 
+  `SHOW DATABASES` 
+  `SHOW VIEW` 
+  `TRIGGER` 
+  `UPDATE` 
+  `XA_RECOVER_ADMIN`

 역할 정의에는 `WITH GRANT OPTION`이 포함되므로 관리 사용자가 다른 사용자에게 해당 역할을 부여할 수 있습니다. 특히 관리자는 MySQL 클러스터를 대상으로 사용하여 이진 로그 복제를 수행하는 데 필요한 모든 권한을 부여해야 합니다.

**작은 정보**  
 권한의 세부 정보를 모두 확인하려면 다음 문을 사용합니다.  

```
SHOW GRANTS FOR rds_superuser_role@'%';
```

 RDS for MySQL 버전 8.0.36 이상에서 역할을 사용하여 액세스 권한을 부여하는 경우 `SET ROLE role_name` 또는 `SET ROLE ALL` 문을 사용하여 해당 역할을 활성화합니다. 다음 예에서는 이 작업을 수행하는 방법을 보여줍니다. 적합한 역할 이름을 `CUSTOM_ROLE`로 대체합니다.

```
# Grant role to user
mysql> GRANT CUSTOM_ROLE TO 'user'@'domain-or-ip-address'

# Check the current roles for your user. In this case, the CUSTOM_ROLE role has not been activated.
# Only the rds_superuser_role is currently in effect.
mysql> SELECT CURRENT_ROLE();
+--------------------------+
| CURRENT_ROLE()           |
+--------------------------+
| `rds_superuser_role`@`%` |
+--------------------------+
1 row in set (0.00 sec)

# Activate all roles associated with this user using SET ROLE.
# You can activate specific roles or all roles.
# In this case, the user only has 2 roles, so we specify ALL.
mysql> SET ROLE ALL;
Query OK, 0 rows affected (0.00 sec)

# Verify role is now active
mysql> SELECT CURRENT_ROLE();
+--------------------------------------------------+
| CURRENT_ROLE()                                   |
+--------------------------------------------------+
| `CUSTOM_ROLE`@`%`,`rds_superuser_role`@`%` |
+--------------------------------------------------+
```

# RDS for MySQL에 대한 동적 권한
<a name="Appendix.MySQL.CommonDBATasks.dynamic-privileges"></a>

동적 권한은 `GRANT` 문을 사용하여 명시적으로 부여할 수 있는 MySQL 권한입니다. 사용 중인 RDS for MySQL 버전에 따라 RDS에서 특정 동적 권한만 부여할 수 있습니다. RDS는 이러한 권한 중 일부를 허용하지 않습니다. 이러한 권한은 복제 및 백업과 같은 특정 데이터베이스 작업에 방해가 될 수 있기 때문입니다.

다음 표에는 다양한 MySQL 버전에 부여할 수 있는 이러한 권한이 나와 있습니다. 8.0.36 미만의 MySQL 버전에서 8.0.36 이상 버전으로 업그레이드하는 경우 특정 권한 부여가 더 이상 허용되지 않으면 애플리케이션 코드를 업데이트해야 할 수 있습니다.


| 권한 | MySQL 8.0.35 이하 | MySQL 8.0.36 이상 마이너 버전 | MySQL 8.4.3 이상 | 
| --- | --- | --- | --- | 
|  [ALLOW\$1NONEXISTENT\$1DEFINER](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_allow-nonexistent-definer)   |  사용할 수 없음  |  사용할 수 없음  |  허용되지 않음  | 
|  [APPLICATION\$1PASSWORD\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_application-password-admin)  |  Allowed  |  허용됨  |  허용됨  | 
|  [AUDIT\$1ABORT\$1EXEMPT](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_audit-abort-exempt)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [AUDIT\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_audit-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [AUTHENTICATION\$1POLICY\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_authentication-policy-admin)  |  허용됨  |  허용되지 않음  | 허용되지 않음 | 
|  [BACKUP\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_backup-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [BINLOG\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_binlog-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [BINLOG\$1ENCRYPTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_binlog-encryption-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [CLONE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_clone-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_connection-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [ENCRYPTION\$1KEY\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_encryption-key-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [FIREWALL\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [FIREWALL\$1EXEMPT](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-exempt)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [FIREWALL\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-user)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [FLUSH\$1OPTIMIZER\$1COSTS](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-optimizer-costs)  |  Allowed  |  허용됨  |  허용됨  | 
|  [FLUSH\$1PRIVILEGES](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_flush-privileges)  |  사용할 수 없음  |  사용할 수 없음  |  허용됨  | 
|  [FLUSH\$1STATUS](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-status)  |  Allowed  |  허용됨  |  허용됨  | 
|  [FLUSH\$1TABLES](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-tables)  |  Allowed  |  허용됨  |  허용됨  | 
|  [FLUSH\$1USER\$1RESOURCES](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-user-resources)  |  Allowed  |  허용됨  |  허용됨  | 
|  [GROUP\$1REPLICATION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_group-replication-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [GROUP\$1REPLICATION\$1STREAM](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_group-replication-stream)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [INNODB\$1REDO\$1LOG\$1ARCHIVE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_innodb-redo-log-archive)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [INNODB\$1REDO\$1LOG\$1ENABLE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_innodb-redo-log-enable)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [MASKING\$1DICTIONARIES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_masking-dictionaries-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [NDB\$1STORED\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_ndb-stored-user)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [OPTIMIZE\$1LOCAL\$1TABLE](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_optimize-local-table)  |  사용할 수 없음  |  사용할 수 없음  |  허용되지 않음  | 
|  [PASSWORDLESS\$1USER\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_passwordless-user-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [PERSIST\$1RO\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_persist-ro-variables-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [REPLICATION\$1APPLIER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-applier)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [REPLICATION\$1SLAVE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-slave-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [RESOURCE\$1GROUP\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_resource-group-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [RESOURCE\$1GROUP\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_resource-group-user)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [ROLE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_role-admin)  |  Allowed  |  허용됨  |  허용됨  | 
|  [SENSITIVE\$1VARIABLES\$1OBSERVER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_sensitive-variables-observer)  |  Allowed  |  허용됨  | 허용됨 | 
|  [SERVICE\$1CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_service-connection-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [SESSION\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_session-variables-admin)  |  Allowed  |  허용됨  |  허용됨  | 
|  [SET\$1ANY\$1DEFINER](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_set-any-definer)  |  사용할 수 없음  |  사용할 수 없음  |  허용됨  | 
|  [SET\$1USER\$1ID](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_set-user-id)  |  Allowed  |  허용됨  |  사용할 수 없음  | 
|  [SHOW\$1ROUTINE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_show-routine)  |  Allowed  |  허용됨  |  허용됨  | 
|  [SKIP\$1QUERY\$1REWRITE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_skip-query-rewrite)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [SYSTEM\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_system-user)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [SYSTEM\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_system-variables-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [TABLE\$1ENCRYPTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_table-encryption-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [TELEMETRY\$1LOG\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_telemetry-log-admin)  |  허용됨  |  허용되지 않음  |  허용되지 않음  | 
|  [TP\$1CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_tp-connection-admin)  |  허용되지 않음  |  허용되지 않음  | 허용되지 않음 | 
|  [TRANSACTION\$1GTID\$1TAG](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_transaction-gtid-tag)   |  사용할 수 없음  |  사용할 수 없음  | 허용되지 않음 | 
|  [VERSION\$1TOKEN\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_version-token-admin)  |  허용되지 않음  |  허용되지 않음  |  허용되지 않음  | 
|  [XA\$1RECOVER\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_xa-recover-admin)  |  Allowed  |  허용됨  |  허용됨  | 

# RDS for MySQL에 대한 세션 또는 쿼리 종료
<a name="Appendix.MySQL.CommonDBATasks.End"></a>

`rds_kill` 및 `rds_kill_query` 명령을 사용하여 DB 인스턴스에서 사용자 세션이나 쿼리를 종료할 수 있습니다. 먼저 MySQL DB 인스턴스에 연결한 후 다음과 같이 해당 명령을 실행합니다. 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

```
CALL mysql.rds_kill(thread-ID)
CALL mysql.rds_kill_query(thread-ID)
```

예를 들어, 스레드 99에서 실행 중인 세션을 종료하려면 다음과 같이 입력합니다.

```
CALL mysql.rds_kill(99); 
```

스레드 99에서 실행 중인 쿼리를 종료하려면 다음과 같이 입력합니다.

```
CALL mysql.rds_kill_query(99); 
```

# RDS for MySQL에 대한 현재 복제 오류 건너뛰기
<a name="Appendix.MySQL.CommonDBATasks.SkipError"></a>

에러가 읽기 전용 복제본의 응답을 중지시키고 데이터 무결성에 영향을 미치지 않는다면 읽기 전용 복사본의 에러를 건너뛸 수 있습니다.

**참고**  
먼저 안전하게 건너뛸 수 있는 오류인지 확인해야 합니다. MySQL 유틸리티에서 읽기 전용 복제본에 연결한 후 다음 MySQL 명령을 실행합니다.  

```
SHOW REPLICA STATUS\G 
```
반환된 값에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)를 참조하세요.  
이전 버전의 MySQL에는 `SHOW SLAVE STATUS` 대신 `SHOW REPLICA STATUS`가 사용되었습니다. 8.0.23 이전 MySQL 버전을 사용하는 경우 `SHOW SLAVE STATUS`를 사용합니다.

다음과 같은 방법으로 읽기 복제본에 대한 오류를 건너뛸 수 있습니다.

**Topics**
+ [

## mysql.rds\$1skip\$1repl\$1error 프로시저 호출
](#Appendix.MySQL.CommonDBATasks.SkipError.procedure)
+ [

## slave\$1skip\$1errors 파라미터 설정
](#Appendix.MySQL.CommonDBATasks.SkipError.parameter)

## mysql.rds\$1skip\$1repl\$1error 프로시저 호출
<a name="Appendix.MySQL.CommonDBATasks.SkipError.procedure"></a>

Amazon RDS는 읽기 전용 복제본에서 오류를 건너뛰기 위해 호출할 수 있는 저장 프로시저를 제공합니다. 먼저 읽기 전용 복제본에 연결한 후 다음과 같이 적합한 명령을 실행합니다. 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

 오류를 건너뛰려면 다음 명령을 실행합니다.

```
CALL mysql.rds_skip_repl_error; 
```

이 명령은 원본 DB 인스턴스에서 실행하거나, 혹은 복제 오류가 발생하지 않은 읽기 전용 복제본에서 실행하는 경우 아무런 효과도 없습니다.

`mysql.rds_skip_repl_error`가 지원되는 MySQL 버전 등에 대한 자세한 내용은 [mysql.rds\$1skip\$1repl\$1error](mysql-stored-proc-replicating.md#mysql_rds_skip_repl_error) 단원을 참조하십시오.

**중요**  
`mysql.rds_skip_repl_error`을 호출하려고 할 때 `ERROR 1305 (42000): PROCEDURE mysql.rds_skip_repl_error does not exist`와 같은 오류가 발생한 경우에는 MySQL DB 인스턴스를 최신 마이너 버전이나 [mysql.rds\$1skip\$1repl\$1error](mysql-stored-proc-replicating.md#mysql_rds_skip_repl_error)에 등록된 최소 마이너 버전 중 하나로 업그레이드해야 합니다.

## slave\$1skip\$1errors 파라미터 설정
<a name="Appendix.MySQL.CommonDBATasks.SkipError.parameter"></a>

하나 이상의 오류를 건너뛰려면 읽기 전용 복제본에 `slave_skip_errors` 정적 파라미터를 설정해야 합니다. 하나 이상의 특정 복제 오류 코드를 건너뛰도록 이 파라미터를 설정할 수 있습니다. 현재는 MySQL 5.7 DB 인스턴스용 RDS에 대해서만 이 파라미터를 설정할 수 있습니다. 파라미터에 대한 설정을 변경하면 DB 인스턴스를 재부팅해야만 새 설정이 적용됩니다. 이러한 파라미터의 설정에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#sysvar_slave_skip_errors)를 참조하세요.

이 파라미터를 별도의 DB 파라미터 그룹에 설정하는 것이 좋습니다. 이 DB 파라미터 그룹은 오류를 건너뛰어야 하는 읽기 전용 복제본과만 연결할 수 있습니다. 이 모범 사례를 따르면 다른 DB 인스턴스 및 읽기 전용 복제본에 미치는 잠재적 영향을 줄일 수 있습니다.

**중요**  
이 파라미터에 기본값이 아닌 값을 설정하면 복제 불일치가 발생할 수 있습니다. 문제를 해결하기 위해 다른 옵션을 다 써 버렸고 읽기 전용 복제본의 데이터에 미칠 수 있는 잠재적인 영향을 확신하는 경우에만 이 파라미터를 기본값이 아닌 값으로 설정하세요.

# RDS for MySQL의 충돌 복구 시간 개선을 위한 InnoDB 테이블스페이스 작업
<a name="Appendix.MySQL.CommonDBATasks.Tables"></a>

MySQL의 모든 테이블은 테이블 정의, 데이터 및 인덱스로 구성되어 있습니다. InnoDB는 MySQL 스토리지 엔진으로서 테이블 데이터와 인덱스를 *테이블스페이스*에 저장하는 역할을 합니다. 이 스토리지 엔진은 전역적 공유 테이블스페이스를 생성하여 데이터 사전을 비롯한 기타 관련 메타데이터, 그리고 테이블 데이터와 인덱스도 저장합니다. 또한 테이블 및 파티션마다 별도의 테이블스페이스를 생성할 수도 있습니다. 이렇게 별도로 생성된 테이블스페이스는 확장자가 .ibd인 파일에 저장되며, 각 테이블스페이스 헤더에는 식별할 수 있도록 고유 번호가 포함됩니다.

Amazon RDS는 MySQL 파라미터 그룹을 통해 `innodb_file_per_table`이라고 하는 파라미터를 하나 제공합니다. 이 파라미터는 InnoDB가 파라미터 값을 0으로 설정하여 새 테이블 데이터와 인덱스를 공유 테이블스페이스에 추가할지 또는 파라미터 값을 1로 설정하여 개별 테이블스페이스에 추가할지 제어합니다. Amazon RDS는 `innodb_file_per_table` 파라미터의 기본값을 1로 설정하여 개별 InnoDB 테이블을 삭제하고 해당 테이블에서 DB 인스턴스에 사용하는 스토리지를 회수할 수 있습니다. 대부분 사용 사례에서 `innodb_file_per_table` 파라미터는 1로 설정하는 것이 바람직합니다.

하지만 표준 스토리지(마그네틱)나 일반 SSD 스토리지를 사용하여 테이블 수가 1,000개를 넘거나, 혹은 프로비저닝된 IOPS 스토리지를 사용하여 테이블 수가 10,000개를 넘는 등 테이블 수가 많을 때는 `innodb_file_per_table` 파라미터를 0으로 설정해야 합니다. 이 파라미터를 0으로 설정하면 테이블스페이스가 개별적으로 생성되지 않기 때문에 데이터베이스 충돌 복구에 걸리는 시간을 개선할 수 있습니다.

MySQL은 충돌 복구 주기에서 테이블스페이스가 저장된 메타데이터 파일을 각각 처리합니다. MySQL이 공유 테이블스페이스에 저장된 메타데이터 정보를 처리하는 데 걸리는 시간은 다수의 테이블스페이스로 인해 수천 개의 테이블스페이스 파일을 처리하는 데 걸리는 시간에 비하면 무시해도 될 정도입니다. 테이블스페이스 번호는 각 파일의 헤더에 저장되기 때문에 모든 테이블스페이스 파일을 읽으려면 최대 몇 시간까지 걸릴 수 있습니다. 예를 들어 표준 스토리지에 InnoDB 테이블스페이스가 수백만 개 저장되어 있다면 충돌 복구 주기에서 처리하는 데만 5\$18시간이 소요됩니다. 경우에 따라 충돌 복구 주기가 끝나더라도 InnoDB가 추가 정리가 필요하다고 판단할 경우에는 또 다른 충돌 복구 주기가 시작되면서 복구 시간이 연장됩니다. 또 한 가지, 충돌 복구 주기는 테이블스페이스 정보 처리 외에도 롤링백 트랜잭션, 손상된 페이지 복구, 그리고 그 밖의 작업까지 수반한다는 점도 잊어서는 안 됩니다.

`innodb_file_per_table` 파라미터는 파라미터 그룹에 속하기 때문에 DB 인스턴스에 사용되는 파라미터 그룹만 편집하면 파라미터 값이 변경됩니다. 따라서 DB 인스턴스를 재부팅할 필요가 없습니다. 예를 들어 설정을 1(개별 테이블 생성)에서 0(공유 테이블스페이스 사용)으로 변경하면 새로운 InnoDB 테이블이 공유 테이블스페이스에 추가되는 반면 기존 테이블은 개별 테이블스페이스를 그대로 유지합니다. InnoDB 테이블을 공유 테이블스페이스로 이동하려면 `ALTER TABLE` 명령을 사용해야 합니다.

## 여러 테이블스페이스를 공유 테이블스페이스로 마이그레이션
<a name="Appendix.MySQL.CommonDBATasks.MigrateMultiTbs"></a>

InnoDB 테이블의 메타데이터를 자체 테이블스페이스에서 공유 테이블스페이스로 이동할 수 있습니다. 이렇게 하면 `innodb_file_per_table` 파라미터 설정에 따라 테이블 메타데이터가 다시 작성됩니다. 먼저 MySQL DB 인스턴스에 연결한 후 다음과 같이 해당 명령을 실행합니다. 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요.

```
ALTER TABLE table_name ENGINE = InnoDB, ALGORITHM=COPY; 
```

예를 들어 다음 쿼리는 공유 테이블스페이스에 없는 모든 InnoDB 테이블에 대해 `ALTER TABLE` 문을 반환합니다.

**MySQL 5.7 DB 인스턴스의 경우:**

```
SELECT CONCAT('ALTER TABLE `', 
REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', 
REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query 
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES 
WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
```

**MySQL 8.4 및 8.0 DB 인스턴스의 경우:**

```
SELECT CONCAT('ALTER TABLE `', 
REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', 
REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query 
FROM INFORMATION_SCHEMA.INNODB_TABLES 
WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
```

MySQL 테이블을 리빌드하여 테이블의 메타데이터를 공유 테이블스페이스로 이동하려면 테이블을 리빌드할 수 있는 스토리지 공간이 임시로 필요합니다. DB 인스턴스에 여유 스토리지 공간이 있어야 하는 이유도 바로 이 때문입니다. 리빌드 단계에서는 테이블이 잠겨서 쿼리에 액세스하지 못합니다. 작은 용량의 테이블이나 자주 액세스하지 않는 테이블의 경우 이것이 문제가 되지는 않습니다. 하지만 대용량의 테이블이나 동시 접속자 수가 많은 환경에서 자주 액세스하는 테이블이라면 테이블을 읽기 전용 복제본에 다시 빌드할 수 있습니다.

읽기 전용 복제본을 생성한 후 테이블 메타데이터를 읽기 전용 복제본의 공유 테이블스페이스로 마이그레이션할 수 있습니다. ALTER TABLE 문이 읽기 전용 복제본에 대한 액세스를 차단하더라도 원본 DB 인스턴스는 영향을 받지 않습니다. 따라서 테이블 리빌딩 프로세스 중 읽기 전용 복제본이 지연되더라도 원본 DB 인스턴스는 계속해서 이진 로그를 생성합니다. 리빌딩 프로세스에는 스토리지 공간이 추가로 필요할 뿐만 아니라 재생 로그 파일이 커질 수도 있기 때문에 원본 DB 인스턴스보다 큰 용량의 스토리지를 할당하여 읽기 전용 복제본을 생성해야 합니다.

읽기 전용 복제본을 생성하여 InnoDB 테이블을 다시 빌드한 후 공유 테이블스페이스를 사용하려면 다음 단계를 따라야 합니다.

1. 이진 로깅을 계속 할 수 있도록 원본 DB 인스턴스에 백업 보존 기간이 활성화되어 있는지 확인합니다.

1. AWS Management Console 또는 AWS CLI를 사용하여 원본 DB 인스턴스의 읽기 전용 복제본을 생성합니다. 읽기 전용 복제본을 생성하려면 충돌 복구와 같이 다수의 동일한 프로세스를 거쳐야 하기 때문에 InnoDB 테이블스페이스가 많을 경우에는 생성 프로세스에 다소 시간이 걸릴 수 있습니다. 이때 읽기 전용 복제본에 할당하는 스토리지 공간은 현재 원본 DB 인스턴스에 사용 중인 스토리지 공간보다 많아야 합니다.

1. 읽기 전용 복제본이 생성되면 파라미터 설정 `read_only = 0` 및 `innodb_file_per_table = 0`을 사용하여 파라미터 그룹을 생성합니다. 그런 다음 파라미터 그룹을 읽기 전용 복제본과 연결합니다.

1. 복제본에서 마이그레이션할 모든 테이블에 대해 다음 SQL 문을 실행합니다.

   ```
   ALTER TABLE name ENGINE = InnoDB
   ```

1. 읽기 전용 복제본에서 `ALTER TABLE` 문을 모두 완료한 후에는 읽기 전용 복제본이 소스 DB 인스턴스에 연결되어 있고 두 인스턴스가 동기화되어 있는지 확인합니다.

1. 콘솔 또는 CLI를 사용하여 읽기 전용 복제본을 인스턴스로 승격합니다. 새로운 독립형 DB 인스턴스에 사용한 파라미터 그룹에서 `innodb_file_per_table` 파라미터가 0으로 설정되어 있는지 확인합니다. 새로운 독립형 DB 인스턴스의 이름을 변경하고 애플리케이션을 새로운 독립형 DB 인스턴스로 지정합니다.

# RDS for MySQL의 글로벌 상태 기록 관리
<a name="Appendix.MySQL.CommonDBATasks.GoSH"></a>

**작은 정보**  
데이터베이스 성능을 분석하고자 Amazon RDS의 성능 개선 도우미를 사용할 수도 있습니다. 자세한 내용은 [성능 개선 도우미를 통한 Amazon RDS 모니터링](USER_PerfInsights.md) 섹션을 참조하세요.

MySQL은 작업 관련 정보를 알 수 있는 다수의 상태 변수를 유지하고 있습니다. 이 변수 값은 DB 인스턴스에서 잠금 또는 메모리 문제를 파악하는 데 효과적입니다. DB 인스턴스를 마지막으로 시작한 때부터 계속해서 누적되기 때문입니다. 대부분 상태 변수는 `FLUSH STATUS` 명령을 사용해 0으로 재설정할 수 있습니다.

Amazon RDS는 시간이 지나면서 이 변수 값의 스냅샷을 캡처하거나, 마지막 스냅샷 이후 모든 변경 사항과 함께 변수 값을 테이블에 기록하는 등 시간 경과에 따른 상태 변수 값을 모니터링할 수 있는 프로시저를 지원합니다. 이러한 인프라를 전역적 상태 이력(GoSH)이라고 부릅니다. GoSH는 버전 5.5.23부터 모든 MySQL DB 인스턴스에 설치되기 시작했지만 기본적으로 비활성화되어 있습니다.

GoSH를 활성화하려면 먼저 파라미터 `event_scheduler`를 `ON`으로 설정하여 DB 파라미터 그룹의 이벤트 스케줄러를 활성화해야 합니다. 또한 MySQL 5.7을 실행하는 MySQL DB 인스턴스의 경우 `show_compatibility_56` 파라미터를 `1`에 설정해야 합니다. DB 파라미터 그룹의 생성 및 변경에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하십시오. 이 파라미터를 활성화할 때 생기는 부작용에 관한 내용은 MySQL 5.7 참조 설명서에 나온 [show\$1compatibility\$156](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56)을 참조하세요.**

그런 다음 아래 표의 프로시저에 따라 GoSH를 활성화 및 구성할 수 있습니다. 먼저 MySQL DB 인스턴스에 연결한 후 다음과 같이 해당 명령을 실행합니다. 자세한 내용은 [MySQL DB 인스턴스에 연결](USER_ConnectToInstance.md) 섹션을 참조하세요. 각 절차에 대해 다음 명령을 실행하고 **procedure-name**을 바꿉니다.

```
CALL procedure-name; 
```

다음 표에는 이전 명령에서 **procedure-name**에 사용할 수 있는 모든 절차가 나열되어 있습니다.


| 프로시저 | 설명 | 
| --- | --- | 
| `mysql.rds_enable_gsh_collector` |  `rds_set_gsh_collector`에서 설정한 주기에 따라 기본 스냅샷을 캡처하도록 GoSH를 활성화합니다.  | 
| `mysql.rds_set_gsh_collector` |  스냅샷 캡처 주기(분)를 지정합니다. 기본 값은 5입니다.  | 
| `mysql.rds_disable_gsh_collector` |  스냅샷을 비활성화합니다.  | 
| `mysql.rds_collect_global_status_history` |  필요할 경우에만 스냅샷을 캡처합니다.  | 
| `mysql.rds_enable_gsh_rotation` |  `mysql.rds_global_status_history` 테이블의 내용이 `mysql.rds_global_status_history_old`에서 설정한 주기에 따라 `rds_set_gsh_rotation`로 로테이션됩니다.  | 
| `mysql.rds_set_gsh_rotation` |  테이블 로테이션 주기(일)를 지정합니다. 기본 값은 7입니다.  | 
| `mysql.rds_disable_gsh_rotation` |  테이블 로테이션을 비활성화합니다.  | 
| `mysql.rds_rotate_global_status_history` |  필요에 따라 `mysql.rds_global_status_history` 테이블의 내용을 `mysql.rds_global_status_history_old`로 로테이션합니다.  | 

GoSH가 활성화되어 있을 때는 쓰기가 가능한 테이블에 쿼리를 요청할 수 있습니다. 예를 들어 Innodb 버퍼 풀의 적중률에 대한 쿼리를 요청하려면 다음과 같이 쿼리를 실행합니다.

```
select a.collection_end, a.collection_start, (( a.variable_Delta-b.variable_delta)/a.variable_delta)*100 as "HitRatio" 
    from mysql.rds_global_status_history as a join mysql.rds_global_status_history as b on a.collection_end = b.collection_end
    where a. variable_name = 'Innodb_buffer_pool_read_requests' and b.variable_name = 'Innodb_buffer_pool_reads'
```

# MySQL 8.4에서 버퍼 풀 크기 및 다시 실행 로그 용량 구성
<a name="Appendix.MySQL.CommonDBATasks.Config.Size.8.4"></a>

MySQL 8.4에서 Amazon RDS는 기본적으로 `innodb_dedicated_server` 파라미터를 활성화합니다. `innodb_dedicated_server` 파라미터를 사용하면 데이터베이스 엔진이 `innodb_buffer_pool_size` 및 `innodb_redo_log_capacity` 파라미터를 계산합니다. 이러한 파라미터를 계산하는 방법에 대한 자세한 내용은 MySQL 설명서의 [Configuring InnoDB Buffer Pool Size](https://dev.mysql.com/doc/refman/8.4/en/innodb-buffer-pool-resize.html) 및 [Redo Log](https://dev.mysql.com/doc/refman/8.4/en/innodb-redo-log.html)를 참조하세요.

`innodb_dedicated_server`가 활성화되면 DB 인스턴스 클래스 메모리를 기반으로 `innodb_buffer_pool_size` 파라미터가 계산됩니다. 다음 표에는 감지된 서버 메모리와 해당 버퍼 풀 크기가 나와 있습니다.


| 감지된 서버 메모리 | 버퍼 풀 크기 | 
| --- | --- | 
|  < 1GB  |  기본값 128MB  | 
|  1GB\$14GB  |  *감지된 서버 메모리* \$1 0.5  | 
|  > 4GB  |  *감지된 서버 메모리* \$1 0.75  | 

`innodb_redo_log_capacity` 파라미터는 인스턴스 클래스에 따라 (vCPUs 개수/2)GB로 최대 16GB까지 자동으로 확장됩니다. 인스턴스 클래스가 클수록 다시 실행 로그 용량이 커지므로 쓰기 집약적 워크로드의 성능과 복원력이 향상될 수 있습니다.

MySQL 8.0에서 MySQL 8.4로 업그레이드하기 전에 업그레이드 완료 후 발생할 수 있는 재실행 로그의 크기 증가를 수용할 수 있도록 스토리지 공간을 늘려야 합니다. 자세한 내용은 [DB 인스턴스 스토리지 용량 증가](USER_PIOPS.ModifyingExisting.md) 섹션을 참조하세요.

`innodb_dedicated_server` 파라미터가 `innodb_buffer_pool_size` 및 `innodb_redo_log_capacity` 파라미터의 값을 계산하지 않도록 하려면 사용자 지정 파라미터 그룹에서 이러한 파라미터에 특정 값을 설정하여 값을 재정의할 수 있습니다. 또는 `innodb_dedicated_server` 파라미터를 비활성화하고 사용자 지정 파라미터 그룹에서 `innodb_buffer_pool_size` 및 `innodb_redo_log_capacity` 파라미터의 값을 설정할 수 있습니다. 자세한 내용은 [기본 및 사용자 지정 파라미터 그룹](parameter-groups-overview.md#parameter-groups-overview.custom) 섹션을 참조하세요.

`innodb_dedicated_server` 파라미터를 `0`으로 설정하여 비활성화하고 `innodb_buffer_pool_size` 및 `innodb_redo_log_capacity` 파라미터에 대한 값을 설정하지 않으면 Amazon RDS는 후자의 두 파라미터를 각각 128MB 및 100MB로 설정합니다. 이러한 기본값은 더 큰 인스턴스 클래스에서 성능 저하를 일으킵니다.

# MySQL DB 인스턴스의 현지 시간대
<a name="MySQL.Concepts.LocalTimeZone"></a>

기본적으로 MySQL DB 인스턴스의 시간대는 협정 세계시(UTC)입니다. 대신 DB 인스턴스의 시간대를 애플리케이션의 현지 시간대로 설정할 수 있습니다.

DB 인스턴스의 현지 시간대를 설정하려면 DB 인스턴스의 파라미터 그룹에서 `time_zone` 파라미터를 이 섹션의 뒤에 나오는 지원되는 값 중 하나로 설정합니다. 파라미터 그룹에 대한 `time_zone` 파라미터를 설정하면 해당 파라미터 그룹을 사용 중인 모든 DB 인스턴스와 읽기 전용 복제본이 새로운 현지 시간대를 사용하도록 변경됩니다. 파라미터 그룹에서 파라미터를 설정하는 방법에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하세요.

현지 시간대를 설정하면 데이터베이스에 대한 모든 새 연결에 변경 사항이 반영됩니다. 현지 시간대를 변경할 때 데이터베이스에 대해 열린 연결이 있는 경우 연결을 닫고 새 연결을 열어야 현지 시간대 업데이트가 표시됩니다.

DB 인스턴스와 하나 이상의 읽기 전용 복제본에 대해 서로 다른 현지 시간대를 설정할 수 있습니다. 이렇게 하려면 DB 인스턴스와 복제본에 대해 서로 다른 파라미터 그룹을 사용하고 각 파라미터 그룹에서 `time_zone` 파라미터를 다른 현지 시간대로 설정합니다.

AWS 리전 간 복제 중인 경우 소스 DB 인스턴스와 읽기 전용 복제본은 서로 다른 파라미터 그룹을 사용합니다. 파라미터 그룹은 AWS 리전마다 고유합니다. 각 인스턴스에 대해 동일한 현지 시간대를 사용하려면 인스턴스의 파라미터 그룹과 읽기 전용 복제본의 파라미터 그룹에서 `time_zone` 파라미터를 설정해야 합니다.

DB 스냅샷에서 DB 인스턴스를 복원할 경우 현지 시간대가 UTC로 설정됩니다. 복원이 완료된 후 시간대를 현지 시간대로 업데이트할 수 있습니다. DB 인스턴스를 특정 시점으로 복원할 경우 복원된 DB 인스턴스의 현지 시간대는 복원된 DB 인스턴스의 파라미터 그룹에서 설정한 시간대입니다.

IANA(Internet Assigned Numbers Authority)에서는 [https://www.iana.org/time-zones](https://www.iana.org/time-zones)에서 일 년에 여러 번 새로운 표준 시간대를 게시합니다. RDS에서 MySQL의 새로운 마이너 유지 관리 릴리스를 릴리스할 때마다 릴리스 시점의 최신 표준 시간대 데이터가 함께 제공됩니다. 최신 RDS for MySQL 버전을 사용하면 RDS의 최신 표준 시간대 데이터를 갖게 됩니다. DB 인스턴스에 최신 표준 시간대 데이터가 있는지 확인하려면 상위 DB 엔진 버전으로 업그레이드하는 것이 좋습니다. 또는 MariaDB DB 인스턴스의 표준 시간대 테이블을 수동으로 수정할 수 있습니다. 이렇게 하려면 SQL 명령을 사용하거나 SQL 클라이언트에서 [mysql\$1tzinfo\$1to\$1sql 도구](https://dev.mysql.com/doc/refman/8.0/en/mysql-tzinfo-to-sql.html)를 실행할 수 있습니다. 표준 시간대 데이터를 수동으로 업데이트한 후 변경 사항을 적용하려면 DB 인스턴스를 재부팅합니다. RDS는 실행 중인 DB 인스턴스의 표준 시간대 데이터를 수정하거나 재설정하지 않습니다. 새 표준 시간대 데이터는 데이터베이스 엔진 버전 업그레이드를 수행할 때만 설치됩니다.

현지 시간대를 다음 값 중 하나로 설정할 수 있습니다.


| 영역 | 시간대 | 
| --- | --- | 
|  아프리카  |  Africa/Cairo, Africa/Casablanca, Africa/Harare, Africa/Monrovia, Africa/Nairobi, Africa/Tripoli, Africa/Windhoek  | 
|  아메리카  |  America/Araguaina, America/Asuncion, America/Bogota, America/Buenos\$1Aires, America/Caracas, America/Chihuahua, America/Cuiaba, America/Denver, America/Fortaleza, America/Guatemala, America/Halifax, America/Manaus, America/Matamoros, America/Monterrey, America/Montevideo, America/Phoenix, America/Santiago, America/Tijuana  | 
|  아시아  |  Asia/Amman, Asia/Ashgabat, Asia/Baghdad, Asia/Baku, Asia/Bangkok, Asia/Beirut, Asia/Calcutta, Asia/Damascus, Asia/Dhaka, Asia/Irkutsk, Asia/Jerusalem, Asia/Kabul, Asia/Karachi, Asia/Kathmandu, Asia/Krasnoyarsk, Asia/Magadan, Asia/Muscat, Asia/Novosibirsk, Asia/Riyadh, Asia/Seoul, Asia/Shanghai, Asia/Singapore, Asia/Taipei, Asia/Tehran, Asia/Tokyo, Asia/Ulaanbaatar, Asia/Vladivostok, Asia/Yakutsk, Asia/Yerevan  | 
|  대서양  |  Atlantic/Azores  | 
|  호주  |  Australia/Adelaide, Australia/Brisbane, Australia/Darwin, Australia/Hobart, Australia/Perth, Australia/Sydney  | 
|  브라질  |  Brazil/DeNoronha, Brazil/East  | 
|  캐나다  |  Canada/Newfoundland, Canada/Saskatchewan, Canda/Yukon  | 
|  유럽  |  Europe/Amsterdam, Europe/Athens, Europe/Dublin, Europe/Helsinki, Europe/Istanbul, Europe/Kaliningrad Europe/Moscow, Europe/Paris, Europe/Prague, Europe/Sarajevo  | 
|  태평양  |  Pacific/Auckland, Pacific/Fiji, Pacific/Guam, Pacific/Honolulu, Pacific/Samoa  | 
|  US  |  US/Alaska, US/Central, US/East-Indiana, US/Eastern, US/Pacific  | 
|  UTC  |  UTC  | 

# Amazon RDS for MySQL에 대해 알려진 문제 및 제한
<a name="MySQL.KnownIssuesAndLimitations"></a>

Amazon RDS for MySQL 작업에 대해 알려진 문제 및 제한은 다음과 같습니다.

**Topics**
+ [

## InnoDB 예약어
](#MySQL.Concepts.KnownIssuesAndLimitations.InnodbDatabaseName)
+ [

## Amazon RDS for MySQL에 대해 스토리지가 가득 찬 동작
](#MySQL.Concepts.StorageFullBehavior)
+ [

## 일관되지 않은 InnoDB 버퍼 풀 크기
](#MySQL.Concepts.KnownIssuesAndLimitations.InnodbBufferPoolSize)
+ [

## 인덱스 병합 최적화가 잘못된 결과를 반환
](#MySQL.Concepts.KnownIssuesAndLimitations.IndexMergeOptimization)
+ [

## Amazon RDS DB 인스턴스에 대한 MySQL 파라미터 예외
](#MySQL.Concepts.ParameterNotes)
+ [

## Amazon RDS의 MySQL 파일 크기 제한
](#MySQL.Concepts.Limits.FileSize)
+ [

## MySQL Keyring Plugin 지원 안 됨
](#MySQL.Concepts.Limits.KeyRing)
+ [

## 사용자 지정 포트
](#MySQL.Concepts.KnownIssuesAndLimitations.CustomPorts)
+ [

## MySQL 저장 프로시저 제한 사항
](#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures)
+ [

## 외부 소스 인스턴스를 사용하여 GTID 기반 복제
](#MySQL.Concepts.KnownIssuesAndLimitations.GTID)
+ [

## MySQL 기본 인증 플러그인
](#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin)
+ [

## innodb\$1buffer\$1pool\$1size 재정의
](#MySQL.Concepts.KnownIssuesAndLimitations.innodb-bp-size)
+ [

## MySQL 5.7에서 MySQL 8.4로 업그레이드
](#MySQL.Concepts.KnownIssuesAndLimitations.upgrade-8-4)
+ [

## InnoDB 페이지 압축
](#MySQL.Concepts.KnownIssuesAndLimitations.innodb-page-compression)

## InnoDB 예약어
<a name="MySQL.Concepts.KnownIssuesAndLimitations.InnodbDatabaseName"></a>

`InnoDB`는 RDS for MySQL의 예약어입니다. MySQL 데이터베이스에는 이 이름을 사용할 수 없습니다.

## Amazon RDS for MySQL에 대해 스토리지가 가득 찬 동작
<a name="MySQL.Concepts.StorageFullBehavior"></a>

MySQL DB 인스턴스의 스토리지가 가득 차면 메타데이터 불일치, 사전 불일치 및 고아 테이블이 발생할 수 있습니다. 이러한 문제를 방지하기 위해 Amazon RDS에서는 `storage-full` 상태에 도달한 DB 인스턴스를 자동으로 중지합니다.

MySQL DB 인스턴스는 다음과 같은 경우에 `storage-full` 상태에 도달합니다.
+ DB 인스턴스의 스토리지는 20,000MiB 미만이며 사용 가능한 스토리지는 200MiB 이하에 이릅니다.
+ DB 인스턴스에는 102,400MiB 이상의 스토리지가 있으며 사용 가능한 스토리지는 1024MiB 이하에 이릅니다.
+ DB 인스턴스의 스토리지는 20,000MiB에서 102,400MiB 사이이며 사용 가능한 스토리지의 1% 미만입니다.

DB 인스턴스가 `storage-full` 상태에 도달했기 때문에 Amazon RDS에서 DB 인스턴스를 자동으로 중지하더라도 DB 인스턴스를 변경할 수 있습니다. DB 인스턴스를 다시 시작하려면 다음 중 하나 이상을 완료하세요.
+ 스토리지 자동 크기 조정을 활성화하도록 DB 인스턴스를 수정합니다.

  스토리지 자동 크기 조정에 대한 자세한 내용은 [Amazon RDS 스토리지 Autoscaling을 사용한 용량 자동 관리](USER_PIOPS.Autoscaling.md) 섹션을 참조하세요.
+ DB 인스턴스를 수정하여 스토리지 용량을 늘립니다.

  스토리지 용량 증가에 대한 자세한 내용은 [DB 인스턴스 스토리지 용량 증가](USER_PIOPS.ModifyingExisting.md) 섹션을 참조하세요.

이러한 변경 사항 중 하나를 수행한 후에는 DB 인스턴스가 자동으로 다시 시작됩니다. DB 인스턴스 수정에 대한 자세한 내용은 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 단원을 참조하세요.

## 일관되지 않은 InnoDB 버퍼 풀 크기
<a name="MySQL.Concepts.KnownIssuesAndLimitations.InnodbBufferPoolSize"></a>

MySQL 5.7에는 현재 InnoDB 버퍼 풀 크기가 관리되지 않는 버그가 있습니다. MySQL 5.7에서 `innodb_buffer_pool_size` 파라미터 값을 InnoDB 버퍼 풀 크기를 너무 많이 늘려 너무 많은 메모리를 소모하도록 하는 큰 값으로 조정할 수 있습니다. 이에 따라 MySQL 데이터베이스 엔진의 실행이 중지되거나 시작되지 않을 수 있습니다. 이 문제는 사용 가능한 메모리가 적은 DB 인스턴스 클래스 문제보다 더 일반적으로 발생합니다.

이 문제를 해결하려면 `innodb_buffer_pool_size` 파라미터 값을 `innodb_buffer_pool_instances` 파라미터 값과 `innodb_buffer_pool_chunk_size` 파라미터 값의 곱의 배수로 설정해야 합니다. 예를 들어, 다음 예에서와 같이 `innodb_buffer_pool_size` 파라미터 값을 `innodb_buffer_pool_instances`와 `innodb_buffer_pool_chunk_size` 파라미터 값의 곱의 8배로 설정할 수 있습니다.

```
innodb_buffer_pool_chunk_size = 536870912
innodb_buffer_pool_instances = 4
innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184
```

MySQL 5.7 버그에 대한 자세한 내용은 MySQL 설명서의 [https://bugs.mysql.com/bug.php?id=79379](https://bugs.mysql.com/bug.php?id=79379)를 참조하세요.

## 인덱스 병합 최적화가 잘못된 결과를 반환
<a name="MySQL.Concepts.KnownIssuesAndLimitations.IndexMergeOptimization"></a>

인덱스 병합 최적화를 사용하는 쿼리는 MySQL 5.5.37에서 도입된 MySQL 쿼리 옵티마이저의 버그로 인해 잘못된 결과를 반환할 수 있습니다. 여러 개의 인덱스가 있는 테이블에 대해 쿼리를 실행하면 최적화 프로그램이 여러 개의 인덱스를 기반으로 여러 범위의 행을 스캔하지만, 결과를 올바르게 함께 병합하지 않습니다. 쿼리 옵티마이저 버그에 대한 자세한 내용은 MySQL 버그 데이터베이스의 [http://bugs.mysql.com/bug.php?id=72745](https://bugs.mysql.com/bug.php?id=72745) 및 [http://bugs.mysql.com/bug.php?id=68194](https://bugs.mysql.com/bug.php?id=68194)를 참조하세요.

예를 들면, 검색 인수가 인덱싱된 열을 참조하는 2개의 인덱스가 있는 테이블에 대한 쿼리를 고려합니다.

```
1. SELECT * FROM table1
2. WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
```

이 경우 검색 엔진이 두 인덱스를 모두 검색합니다. 그러나 버그로 인해 병합 결과가 정확하지 않습니다.

이 문제를 해결하려면 다음 중 한 가지 방법을 시도하면 됩니다.
+ MySQL DB 인스턴스용 DB 파라미터 그룹에서 `optimizer_switch` 파라미터를 `index_merge=off`로 설정합니다. DB 파라미터 그룹 파라미터 설정에 대한 자세한 내용은 [Amazon RDS의 파라미터 그룹](USER_WorkingWithParamGroups.md) 단원을 참조하세요.
+ MySQL DB 인스턴스를 MySQL 버전 5.7 또는 8.0으로 업그레이드합니다. 자세한 내용은 [RDS for MySQL DB 엔진 업그레이드](USER_UpgradeDBInstance.MySQL.md) 섹션을 참조하세요.
+ 인스턴스를 업그레이드하거나 `optimizer_switch` 파라미터를 변경할 수 없는 경우, 쿼리에 대한 인덱스를 명시적으로 확인하여 버그를 해결할 수 있습니다. 예: 

  ```
  1. SELECT * FROM table1
  2. USE INDEX covering_index
  3. WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
  ```

자세한 내용은 MySQL 설명서의 [인덱스 병합 최적화](https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html)를 참조하세요.

## Amazon RDS DB 인스턴스에 대한 MySQL 파라미터 예외
<a name="MySQL.Concepts.ParameterNotes"></a>

일부 MySQL 파라미터의 경우 Amazon RDS DB 인스턴스와 함께 사용할 때 특별히 고려해야 할 사항이 있습니다.

### lower\$1case\$1table\$1names
<a name="MySQL.Concepts.ParameterNotes.lower-case-table-names"></a>

Amazon RDS는 대소문자 구분 파일 시스템을 사용하므로 `lower_case_table_names` 서버 파라미터의 값을 2(이름은 지정된 대로 저장되지만 소문자로 비교됨)로 설정하는 것은 지원하지 않습니다. 다음은 Amazon RDS for MySQL DB 인스턴스에 대해 지원되는 값입니다.
+ 모든 RDS for MySQL 버전에는 0(이름은 지정된 대로 저장되며 비교 시 대소문자 구분)이 지원됩니다.
+ RDS for MySQL 버전 5.7, 버전 8.0.28 이상의 8.0 버전, 버전 8.4에는 1(이름은 소문자로 저장되며 비교 시 대소문자 구분 안 함)이 지원됩니다.

`lower_case_table_names` 파라미터는 DB 인스턴스를 생성하기 전에 사용자 지정 DB 파라미터 그룹을 설정합니다. DB 인스턴스를 생성할 때 사용자 지정 DB 파라미터 그룹을 지정합니다.

파라미터 그룹이 8.0보다 낮은 버전의 MySQL DB 인스턴스와 연결된 경우 파라미터 그룹에서 `lower_case_table_names` 파라미터를 변경하지 않는 것이 좋습니다. 변경할 경우 특정 시점으로 복구 백업과 읽기 전용 복제본 DB 인스턴스에서 불일치가 발생할 수 있습니다.

파라미터 그룹이 버전 8.0 또는 8.4 MySQL DB 인스턴스와 연결된 경우 파라미터 그룹에서 `lower_case_table_names` 파라미터를 수정할 수 없습니다.

읽기 전용 복제본은 항상 소스 DB 인스턴스와 동일한 `lower_case_table_names` 파라미터 값을 사용해야 합니다.

### long\$1query\$1time
<a name="MySQL.Concepts.ParameterNotes.long_query_time"></a>

마이크로초 해상도로 느린 쿼리를 MySQL의 느린 쿼리 로그에 기록할 수 있도록 `long_query_time` 파라미터를 부동 소수점 값으로 설정합니다. 100밀리초에 해당하는 0.1초와 같은 값을 설정하여 1초 이내의 시간이 걸리는 느린 트랜젝션을 디버깅할 때 도움을 받을 수 있습니다.

## Amazon RDS의 MySQL 파일 크기 제한
<a name="MySQL.Concepts.Limits.FileSize"></a>

MySQL 버전 8.0 이상 DB 인스턴스의 경우 최대 파일 크기는 16TiB입니다. file-per-table 테이블스페이스를 사용하는 경우 최대 파일 크기는 InnoDB 테이블의 크기를 16TiB로 제한합니다. MySQL DB 인스턴스에서는 테이블이 각각 자체 테이블스페이스에 들어 있는 InnoDB 테이블당 파일 테이블스페이스가 기본적으로 설정됩니다. 자세한 내용은 MySQL 설명서의 [InnoDB 한도](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html)를 참조하세요.

**참고**  
일부 기존 DB 인스턴스에는 하한이 있습니다. 예를 들어, 2014년 4월 이전에 생성된 MySQL DB 인스턴스의 파일 및 테이블 크기 제한이 2TB입니다. 이 2TB 파일 크기 제한은 DB 인스턴스 생성 시기와 상관없이 2014년 4월 이전에 캡처된 DB 스냅샷으로 생성된 DB 인스턴스 또는 읽기 전용 복제본에도 적용됩니다.

애플리케이션에 따라 InnoDB 테이블당 파일 테이블스페이스 사용에 대한 장점과 단점은 서로 다릅니다. 애플리케이션에 가장 적합한 접근 방식을 확인하려면 MySQL 설명서의 [테이블당 파일 테이블스페이스](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html)를 참조하세요.

테이블을 최대 파일 크기로 늘리도록 허용하는 것은 권장하지 않습니다. 일반적으로 모범 사례는 성능 및 복구 시간을 향상할 수 있도록 데이터를 더 작은 테이블로 분할하는 것입니다.

대형 테이블을 여러 개의 작은 테이블로 분할하는 데 사용할 수 있는 한 가지 옵션으로는 파티셔닝이 있습니다. 파티셔닝을 수행하면 사용자가 지정하는 규칙에 따라 라지 테이블의 일부가 개별 파일로 배포됩니다. 예를 들어, 트랜잭션을 날짜별로 저장하는 경우 파티셔닝을 사용하여 이전 트랜잭션을 개별 파일로 배포하는 파티셔닝 규칙을 생성할 수 있습니다. 이렇게 하면 애플리케이션에서 즉시 사용할 필요가 없는 이전 트랜잭션 데이터를 주기적으로 보관할 수 있습니다. 자세한 내용은 MySQL 설명서의 [파티셔닝](https://dev.mysql.com/doc/refman/8.0/en/partitioning.html)을 참조하세요.

모든 테이블과 InnoDB 시스템 테이블스페이스의 크기를 지원하는 단일 시스템 테이블 또는 보기가 없기 때문에 여러 테이블을 쿼리하여 테이블스페이스의 크기를 확인해야 합니다.

**InnoDB 시스템 테이블스페이스와 데이터 딕셔너리 테이블스페이스의 크기를 확인하려면**
+ 다음 SQL 명령을 사용하여 크기가 너무 커서 파티셔닝을 수행해야 하는 테이블스페이스가 있는지 확인합니다.
**참고**  
데이터 딕셔너리 테이블스페이스는 MySQL 8.0 이상 버전에만 해당됩니다.

  ```
  1. select FILE_NAME,TABLESPACE_NAME, ROUND(((TOTAL_EXTENTS*EXTENT_SIZE)
  2. /1024/1024/1024), 2)  as "File Size (GB)" from information_schema.FILES
  3. where tablespace_name in ('mysql','innodb_system');
  ```

**InnoDB 시스템 테이블스페이스 외부의 InnoDB 사용자 테이블 크기를 확인하려면(MySQL 5.7 버전의 경우)**
+ 다음 SQL 명령을 사용하여 크기가 너무 커서 파티셔닝을 수행해야 하는 테이블이 있는지 확인합니다.

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2)
  2. as "Tablespace Size (GB)"
  3. FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
  ```

**InnoDB 시스템 테이블스페이스 외부의 InnoDB 사용자 테이블 크기를 확인하려면(MySQL 8.0 이상 버전의 경우)**
+ 다음 SQL 명령을 사용하여 크기가 너무 커서 파티셔닝을 수행해야 하는 테이블이 있는지 확인합니다.

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2)
  2. as "Tablespace Size (GB)"
  3. FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
  ```

**비 InnoDB 사용자 테이블의 크기를 확인하려면**
+ 다음 SQL 명령을 사용하여 비 InnoDB 사용자 테이블이 너무 큰지 확인합니다.

  ```
  SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE)
  / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES
  WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema')
  and ENGINE<>'InnoDB';
  ```

**InnoDB 테이블당 파일 테이블스페이스를 활성화하는 방법**
+ DB 인스턴스의 파라미터 그룹에서 *innodb\$1file\$1per\$1table* 파라미터를 `1`로 설정합니다.

**InnoDB 테이블당 파일 테이블스페이스를 비활성화하는 방법**
+ DB 인스턴스의 파라미터 그룹에서 *innodb\$1file\$1per\$1table* 파라미터를 `0`으로 설정합니다.

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

InnoDB 테이블당 파일 테이블스페이스를 활성화하거나 비활성화한 경우 `ALTER TABLE` 명령을 실행하여 아래의 예와 같이 테이블을 전역 테이블스페이스에서 자체 테이블스페이스로 이동하거나 자체 테이블스페이스에서 전역 테이블스페이스로 이동할 수 있습니다.

```
ALTER TABLE table_name TABLESPACE=innodb_file_per_table;
```

## MySQL Keyring Plugin 지원 안 됨
<a name="MySQL.Concepts.Limits.KeyRing"></a>

현재 Amazon RDS for MySQL에서는 MySQL `keyring_aws` Amazon Web Services Keyring Plugin이 지원되지 않습니다.

## 사용자 지정 포트
<a name="MySQL.Concepts.KnownIssuesAndLimitations.CustomPorts"></a>

Amazon RDS는 MySQL 엔진의 사용자 지정 포트 33060으로의 연결을 차단합니다. MySQL 엔진에 사용할 다른 포트를 선택하세요.

## MySQL 저장 프로시저 제한 사항
<a name="MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures"></a>

다음 RDS for MySQL 버전에서는 사용자 이름이 16자보다 긴 MySQL 사용자가 소유한 세션 또는 쿼리를 [mysql.rds\$1kill](mysql-stored-proc-ending.md#mysql_rds_kill) 및 [mysql.rds\$1kill\$1query](mysql-stored-proc-ending.md#mysql_rds_kill_query) 저장 프로시저로 종료할 수 없습니다.
+ 8.0.32 이하 8 버전
+ 5.7.41 이하 5.7 버전

## 외부 소스 인스턴스를 사용하여 GTID 기반 복제
<a name="MySQL.Concepts.KnownIssuesAndLimitations.GTID"></a>

Amazon RDS는 외부 MySQL 인스턴스에서 구성 중에 GTID\$1PURGED를 설정해야 하는 Amazon RDS for MySQL DB 인스턴스로의 글로벌 트랜잭션 식별자(GTID) 기반 복제를 지원합니다. 그러나 RDS for MySQL 8.0.37 이상 버전에서만 이 기능을 지원합니다.

## MySQL 기본 인증 플러그인
<a name="MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin"></a>

RDS for MySQL 버전 8.0.34 이상 8.0 버전에서 `mysql_native_password` 플러그인을 사용합니다. `default_authentication_plugin` 설정은 변경할 수 없습니다.

RDS for MySQL 버전 8.4 이상 버전은 `caching_sha2_password` 플러그인을 기본 인증 플러그인으로 사용합니다. MySQL 8.4의 기본 인증 플러그인을 변경할 수 있습니다. `mysql_native_password` 플러그인은 여전히 MySQL 8.4에서 작동하지만 이 플러그인의 지원은 MySQL 8.4와 함께 종료됩니다. 기본 인증 플러그인을 변경하려면 사용자 지정 파라미터 그룹을 만들고 `authentication_policy` 파라미터 값을 수정합니다. 자세한 내용은 [기본 및 사용자 지정 파라미터 그룹](parameter-groups-overview.md#parameter-groups-overview.custom) 섹션을 참조하세요.

## innodb\$1buffer\$1pool\$1size 재정의
<a name="MySQL.Concepts.KnownIssuesAndLimitations.innodb-bp-size"></a>

마이크로 또는 소형 DB 인스턴스 클래스의 경우 `innodb_buffer_pool_size` 파라미터의 기본값이 다음 명령을 실행하여 반환되는 값과 다를 수 있습니다.

```
mysql> SELECT @@innodb_buffer_pool_size;
```

이러한 차이는 Amazon RDS가 DB 인스턴스 클래스 관리의 일환으로 기본값을 재정의해야 할 때 발생할 수 있습니다. 필요한 경우 기본값을 재정의하고 DB 인스턴스 클래스가 지원하는 값으로 설정할 수 있습니다. 유효한 값을 결정하려면 메모리 사용량과 DB 인스턴스의 총 가용 메모리를 더하세요. 자세한 내용은 [Amazon RDS 인스턴스 유형](https://aws.amazon.com/rds/instance-types/)을 참조하세요.

DB 인스턴스의 메모리가 4GB뿐인 경우 `innodb_buffer_pool_size`를 8GB로 설정할 수 없지만 다른 파라미터에 할당한 메모리 양에 따라 3GB로 설정할 수 있습니다.

입력한 값이 너무 크면 Amazon RDS는 값을 다음 한도까지 낮춥니다.
+ 마이크로 DB 인스턴스 클래스: 256MB
+ db.t4g 마이크로 DB 인스턴스 클래스: 128MB

## MySQL 5.7에서 MySQL 8.4로 업그레이드
<a name="MySQL.Concepts.KnownIssuesAndLimitations.upgrade-8-4"></a>

MySQL 5.7에서 MySQL 8.4로 곧바로 업그레이드할 수 없습니다. 먼저 MySQL 5.7에서 MySQL 8.0으로 업그레이드한 다음 MySQL 8.0에서 MySQL 8.4로 업그레이드해야 합니다. 자세한 내용은 [RDS for MySQL 메이저 버전 업그레이드](USER_UpgradeDBInstance.MySQL.Major.md) 섹션을 참조하세요.

## InnoDB 페이지 압축
<a name="MySQL.Concepts.KnownIssuesAndLimitations.innodb-page-compression"></a>

InnoDB 페이지 압축은 파일 시스템 블록 크기가 1만 6,000인 Amazon RDS DB 인스턴스에서는 작동하지 않습니다. 파일 시스템 블록 크기가 InnoDB 페이지 크기보다 작아야 하기 때문입니다. 2024년 2월부터 새로 만들어지는 모든 DB 인스턴스의 파일 시스템 블록 크기는 1만 6,000이므로 페이지 플러싱 중에 처리량이 증가하고 IOPS 소비가 줄어듭니다.

# RDS for MySQL 저장 프로시저 참조
<a name="Appendix.MySQL.SQLRef"></a>

이 주제에서는 MySQL DB 엔진을 실행 중인 Amazon RDS 인스턴스에 사용할 수 있는 시스템 저장 프로시저를 설명합니다. 마스터 사용자는 이 프로시저를 실행해야 합니다.

**Topics**
+ [

# 글로벌 상태 기록 수집 및 유지
](mysql-stored-proc-gsh.md)
+ [

# 이진수 로그(binlog) 복제 구성, 시작 및 중지
](mysql-stored-proc-replicating.md)
+ [

# 세션 또는 쿼리 종료
](mysql-stored-proc-ending.md)
+ [

# 활성-활성 클러스터
](mysql-stored-proc-active-active-clusters.md)
+ [

# 다중 소스 복제 관리
](mysql-stored-proc-multi-source-replication.md)
+ [

# GTID를 사용한 트랜잭션 복제
](mysql-stored-proc-gtid.md)
+ [

# 쿼리 로그 교체
](mysql-stored-proc-logging.md)
+ [

# 이진수 로그 구성 설정 및 표시
](mysql-stored-proc-configuring.md)
+ [

# InnoDB 캐시 워밍
](mysql-stored-proc-warming.md)

# 글로벌 상태 기록 수집 및 유지
<a name="mysql-stored-proc-gsh"></a>

Amazon RDS는 시간에 따른 상태 변수 값의 스냅샷을 생성하고 이를 마지막 스냅샷 이후의 변경 사항과 함께 테이블에 쓰는 일련의 프로시저를 제공합니다. 이 인프라를 전역적 상태 이력이라고 합니다. 자세한 내용은 [RDS for MySQL의 글로벌 상태 기록 관리](Appendix.MySQL.CommonDBATasks.GoSH.md)를 참조하세요.

다음 저장 프로시저는 전역적 상태 이력을 수집하고 유지하는 방법을 관리합니다.

**Topics**
+ [

## mysql.rds\$1collect\$1global\$1status\$1history
](#mysql_rds_collect_global_status_history)
+ [

## mysql.rds\$1disable\$1gsh\$1collector
](#mysql_rds_disable_gsh_collector)
+ [

## mysql.rds\$1disable\$1gsh\$1rotation
](#mysql_rds_disable_gsh_rotation)
+ [

## mysql.rds\$1enable\$1gsh\$1collector
](#mysql_rds_enable_gsh_collector)
+ [

## mysql.rds\$1enable\$1gsh\$1rotation
](#mysql_rds_enable_gsh_rotation)
+ [

## mysql.rds\$1rotate\$1global\$1status\$1history
](#mysql_rds_rotate_global_status_history)
+ [

## mysql.rds\$1set\$1gsh\$1collector
](#mysql_rds_set_gsh_collector)
+ [

## mysql.rds\$1set\$1gsh\$1rotation
](#mysql_rds_set_gsh_rotation)

## mysql.rds\$1collect\$1global\$1status\$1history
<a name="mysql_rds_collect_global_status_history"></a>

전역적 상태 이력에 대해 요청 시 스냅샷을 생성합니다.

### 구문
<a name="rds_collect_global_status_history-syntax"></a>

 

```
CALL mysql.rds_collect_global_status_history;
```

## mysql.rds\$1disable\$1gsh\$1collector
<a name="mysql_rds_disable_gsh_collector"></a>

전역적 상태 이력에서 생성한 스냅샷을 비활성화합니다.

### 구문
<a name="mysql_rds_disable_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_disable_gsh_collector;
```

## mysql.rds\$1disable\$1gsh\$1rotation
<a name="mysql_rds_disable_gsh_rotation"></a>

`mysql.global_status_history` 테이블 회전을 비활성화합니다.

### 구문
<a name="mysql_rds_disable_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_disable_gsh_rotation;
```

## mysql.rds\$1enable\$1gsh\$1collector
<a name="mysql_rds_enable_gsh_collector"></a>

전역적 상태 이력을 활성화하여 `rds_set_gsh_collector`로 지정한 간격에 따라 기본 스냅샷을 생성합니다.

### 구문
<a name="mysql_rds_enable_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_enable_gsh_collector;
```

## mysql.rds\$1enable\$1gsh\$1rotation
<a name="mysql_rds_enable_gsh_rotation"></a>

`mysql.global_status_history` 테이블의 내용이 `rds_set_gsh_rotation`에서 설정한 주기에 따라 `mysql.global_status_history_old`로 회전되도록 회전을 활성화합니다.

### 구문
<a name="mysql_rds_enable_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_enable_gsh_rotation;
```

## mysql.rds\$1rotate\$1global\$1status\$1history
<a name="mysql_rds_rotate_global_status_history"></a>

필요에 따라 `mysql.global_status_history` 테이블의 내용을 `mysql.global_status_history_old`로 로테이션합니다.

### 구문
<a name="mysql_rds_rotate_global_status_history-syntax"></a>

 

```
CALL mysql.rds_rotate_global_status_history;
```

## mysql.rds\$1set\$1gsh\$1collector
<a name="mysql_rds_set_gsh_collector"></a>

전역적 상태 이력에서 생성하는 스냅샷 간격(분)을 지정합니다.

### 구문
<a name="mysql_rds_set_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_set_gsh_collector(intervalPeriod);
```

### 파라미터
<a name="mysql_rds_set_gsh_collector-parameters"></a>

 *intervalPeriod*   
스냅샷 주기(분)입니다. 기본값은 `5`입니다.

## mysql.rds\$1set\$1gsh\$1rotation
<a name="mysql_rds_set_gsh_rotation"></a>

`mysql.global_status_history` 테이블의 로테이션 주기(일)을 지정합니다.

### 구문
<a name="mysql_rds_set_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_set_gsh_rotation(intervalPeriod);
```

### 파라미터
<a name="mysql_rds_set_gsh_rotation-parameters"></a>

 *intervalPeriod*   
테이블 로테이션 주기(일)입니다. 기본값은 `7`입니다.

# 이진수 로그(binlog) 복제 구성, 시작 및 중지
<a name="mysql-stored-proc-replicating"></a>

다음 저장 프로시저는 트랜잭션이 외부 데이터베이스에서 RDS for MySQL로 또는 RDS for MySQL에서 외부 데이터베이스로 복제되는 방식을 제어합니다.

`caching_sha2_password`로 구성된 복제 사용자로 복제를 관리하기 위해 이러한 저장 프로시저를 사용하는 경우, `SOURCE_SSL=1`을 지정하여 TLS를 구성해야 합니다. `caching_sha2_password`는 RDS for MySQL 8.4의 기본 인증 플러그인입니다. 자세한 내용은 [SSL/TLS를 사용하여 암호화](mysql-ssl-connections.md) 섹션을 참조하세요.

읽기 전용 복제본 구성, 사용 및 관리에 대한 자세한 내용은 [MySQL 읽기 전용 복제본 작업](USER_MySQL.Replication.ReadReplicas.md) 섹션을 참조하세요.

**Topics**
+ [

## vmysql.rds\$1next\$1master\$1log(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_next_master_log)
+ [

## mysql.rds\$1next\$1source\$1log(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_next_source_log)
+ [

## mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_reset_external_master)
+ [

## mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_reset_external_source)
+ [

## mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_set_external_master)
+ [

## mysql.rds\$1set\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_set_external_source)
+ [

## mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_set_external_master_with_auto_position)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_set_external_source_with_auto_position)
+ [

## mysql.rds\$1set\$1external\$1master\$1with\$1delay(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_set_external_master_with_delay)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1delay(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_set_external_source_with_delay)
+ [

## mysql.rds\$1set\$1external\$1source\$1gtid\$1purged
](#mysql_rds_set_external_source_gtid_purged)
+ [

## mysql.rds\$1set\$1master\$1auto\$1position(RDS for MySQL 메이저 버전 8.0 이하)
](#mysql_rds_set_master_auto_position)
+ [

## mysql.rds\$1set\$1source\$1auto\$1position(RDS for MySQL 메이저 버전 8.4 이상)
](#mysql_rds_set_source_auto_position)
+ [

## mysql.rds\$1set\$1source\$1delay
](#mysql_rds_set_source_delay)
+ [

## mysql.rds\$1skip\$1repl\$1error
](#mysql_rds_skip_repl_error)
+ [

## mysql.rds\$1start\$1replication
](#mysql_rds_start_replication)
+ [

## mysql.rds\$1start\$1replication\$1until
](#mysql_rds_start_replication_until)
+ [

## mysql.rds\$1stop\$1replication
](#mysql_rds_stop_replication)

## vmysql.rds\$1next\$1master\$1log(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_next_master_log"></a>

소스 데이터베이스 인스턴스 로그 위치를 소스 데이터베이스 인스턴스에서 다음 이진 로그의 시작으로 변경합니다. 읽기 전용 복제본에 대한 복제 I/O 오류 1236을 수신 중일 경우에만 이 프로시저를 사용하십시오.

### 구문
<a name="mysql_rds_next_master_log-syntax"></a>

 

```
CALL mysql.rds_next_master_log(
curr_master_log
);
```

### 파라미터
<a name="mysql_rds_next_master_log-parameters"></a>

 *curr\$1master\$1log*   
현재 마스터 로그 파일의 인덱스입니다. 예를 들어, 현재 파일의 이름이 `mysql-bin-changelog.012345`이면 인덱스는 12345입니다. 현재 마스터 로그 파일 이름을 확인하려면 `SHOW REPLICA STATUS` 명령을 실행하고 `Master_Log_File` 필드를 봅니다.

### 사용 노트
<a name="mysql_rds_next_master_log-usage-notes"></a>

마스터 사용자는 `mysql.rds_next_master_log` 프로시저를 실행해야 합니다.

**주의**  
복제 원본인 다중 AZ DB 인스턴스의 장애 조치 후 복제가 실패하고 `mysql.rds_next_master_log`의 `Last_IO_Errno`필드에서 I/O 오류 1236을 보고하는 경우에만 `SHOW REPLICA STATUS`를 호출합니다.  
장애 조치 이벤트가 발생하기 전에 원본 인스턴스의 트랜잭션이 디스크의 바이너리 로그에 기록되지 않은 경우 `mysql.rds_next_master_log`를 호출하면 읽기 전용 복제본에서 데이터가 손실될 수 있습니다. 소스 인스턴스 파라미터 `sync_binlog` 및 `innodb_support_xa`를 `1`로 설정하여 이런 상황이 발생할 가능성을 줄일 수 있으나, 성능이 저하될 수 있습니다. 자세한 내용은 [MySQL 읽기 전용 복제본의 문제 해결](USER_ReadRepl.Troubleshooting.md) 섹션을 참조하세요.

### 예제
<a name="mysql_rds_next_master_log-examples"></a>

RDS for MySQL 읽기 전용 복제본에서 복제가 실패한다고 가정해 보겠습니다. 읽기 전용 복제본에서 `SHOW REPLICA STATUS\G`를 실행하면 다음 결과가 반환됩니다.

```
*************************** 1. row ***************************
             Replica_IO_State:
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: MasterUser
                  Source_Port: 3306
                Connect_Retry: 10
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: relaylog.012340
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 30223232
              Relay_Log_Space: 5248928866
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Master: NULL
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 67285976
```

`Last_IO_Errno` 필드가 인스턴스에서 I/O 오류 1236을 수신하고 있음을 보여 줍니다. `Master_Log_File` 필드는 파일 이름이 `mysql-bin-changelog.012345`임을 보여 줍니다. 이는 로그 파일 인덱스가 `12345`임을 의미합니다. 오류를 해결하려면 다음 파라미터와 함께 `mysql.rds_next_master_log`를 호출합니다.

```
CALL mysql.rds_next_master_log(12345);
```

## mysql.rds\$1next\$1source\$1log(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_next_source_log"></a>

소스 데이터베이스 인스턴스 로그 위치를 소스 데이터베이스 인스턴스에서 다음 이진 로그의 시작으로 변경합니다. 읽기 전용 복제본에 대한 복제 I/O 오류 1236을 수신 중일 경우에만 이 프로시저를 사용하십시오.

### 구문
<a name="mysql_rds_next_source_log-syntax"></a>

 

```
CALL mysql.rds_next_source_log(
curr_source_log
);
```

### 파라미터
<a name="mysql_rds_next_source_log-parameters"></a>

 *curr\$1source\$1log*   
현재 소스 로그 파일의 인덱스입니다. 예를 들어, 현재 파일의 이름이 `mysql-bin-changelog.012345`이면 인덱스는 12345입니다. 현재 소스 로그 파일 이름을 확인하려면 `SHOW REPLICA STATUS` 명령을 실행하고 `Source_Log_File` 필드를 봅니다.

### 사용 노트
<a name="mysql_rds_next_source_log-usage-notes"></a>

관리 사용자는 `mysql.rds_next_source_log` 프로시저를 실행해야 합니다.

**주의**  
복제 원본인 다중 AZ DB 인스턴스의 장애 조치 후 복제가 실패하고 `mysql.rds_next_source_log`의 `Last_IO_Errno`필드에서 I/O 오류 1236을 보고하는 경우에만 `SHOW REPLICA STATUS`를 호출합니다.  
장애 조치 이벤트가 발생하기 전에 원본 인스턴스의 트랜잭션이 디스크의 바이너리 로그에 기록되지 않은 경우 `mysql.rds_next_source_log`를 호출하면 읽기 전용 복제본에서 데이터가 손실될 수 있습니다. 소스 인스턴스 파라미터 `innodb_support_xa` 및 `sync_binlog`를 `1`로 설정하여 이런 상황이 발생할 가능성을 줄일 수 있으나, 성능이 저하될 수 있습니다. 자세한 내용은 [MySQL 읽기 전용 복제본의 문제 해결](USER_ReadRepl.Troubleshooting.md) 섹션을 참조하세요.

### 예제
<a name="mysql_rds_next_source_log-examples"></a>

RDS for MySQL 읽기 전용 복제본에서 복제가 실패한다고 가정해 보겠습니다. 읽기 전용 복제본에서 `SHOW REPLICA STATUS\G`를 실행하면 다음 결과가 반환됩니다.

```
*************************** 1. row ***************************
             Replica_IO_State:
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: MasterUser
                  Source_Port: 3306
                Connect_Retry: 10
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: relaylog.012340
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 30223232
              Relay_Log_Space: 5248928866
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: NULL
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Client requested source to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 67285976
```

`Last_IO_Errno` 필드가 인스턴스에서 I/O 오류 1236을 수신하고 있음을 보여 줍니다. `Source_Log_File` 필드는 파일 이름이 `mysql-bin-changelog.012345`임을 보여 줍니다. 이는 로그 파일 인덱스가 `12345`임을 의미합니다. 오류를 해결하려면 다음 파라미터와 함께 `mysql.rds_next_source_log`를 호출합니다.

```
CALL mysql.rds_next_source_log(12345);
```

## mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_reset_external_master"></a>

이제 RDS for MySQL DB 인스턴스가 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되지 않도록 다시 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_reset_external_master-syntax"></a>

 

```
CALL mysql.rds_reset_external_master;
```

### 사용 노트
<a name="mysql_rds_reset_external_master-usage-notes"></a>

마스터 사용자는 `mysql.rds_reset_external_master` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 제거되도록 MySQL DB 인스턴스에서 실행해야 합니다.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

복제를 사용하여 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 데이터 가져오기에 대한 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 주제를 참조하십시오.

## mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_reset_external_source"></a>

이제 RDS for MySQL DB 인스턴스가 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되지 않도록 다시 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_reset_external_source-syntax"></a>

 

```
CALL mysql.rds_reset_external_source;
```

### 사용 노트
<a name="mysql_rds_reset_external_source-usage-notes"></a>

관리 사용자는 `mysql.rds_reset_external_source` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 제거되도록 MySQL DB 인스턴스에서 실행해야 합니다.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다.  
Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오. 복제를 사용하여 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 데이터 가져오기에 대한 자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 주제를 참조하십시오.

## mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_set_external_master"></a>

RDS for MySQL DB 인스턴스가 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

**참고**  
[mysql.rds\$1set\$1external\$1master\$1with\$1delay(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_set_external_master_with_delay) 저장 프로시저를 사용하여 외부 소스 데이터베이스 인스턴스 및 지연된 복제를 구성할 수 있습니다.

### 구문
<a name="mysql_rds_set_external_master-syntax"></a>

 

```
CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
);
```

### 파라미터
<a name="mysql_rds_set_external_master-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 데이터베이스 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작하는 `mysql_binary_log_file_name` 이진수 로그 내 위치입니다.  
소스 데이터베이스 인스턴스의 `SHOW MASTER STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`MASTER_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

### 사용 노트
<a name="mysql_rds_set_external_master-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_external_master` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 MySQL DB 인스턴스에서 실행해야 합니다.

`mysql.rds_set_external_master`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 MySQL의 외부 인스턴스에서 `replication_user_name` 및 `replication_user_password` 권한이 있는 복제 사용자를 나타내는 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 값을 지정해야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예입니다.

   **MySQL 5.7**

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

   **MySQL 8.0**

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

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 'repl\$1user' 사용자에게 모든 데이터베이스에 대한 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다.

   **MySQL 5.7**

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

   **MySQL 8.0**

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

암호화된 복제를 사용하려면 SSL 연결을 사용하도록 소스 데이터베이스 인스턴스를 구성합니다.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_master`을 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_reset_external_master)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_master`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

### 예제:
<a name="mysql_rds_set_external_master-examples"></a>

MySQL DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스가 구성됩니다.

```
call mysql.rds_set_external_master(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  1);
```

## mysql.rds\$1set\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_set_external_source"></a>

RDS for MySQL DB 인스턴스가 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_source-syntax"></a>

 

```
CALL mysql.rds_set_external_source (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
);
```

### 파라미터
<a name="mysql_rds_set_external_source-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 데이터베이스 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작하는 `mysql_binary_log_file_name` 이진수 로그 내 위치입니다.  
소스 데이터베이스 인스턴스의 `SHOW MASTER STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

### 사용 노트
<a name="mysql_rds_set_external_source-usage-notes"></a>

관리 사용자는 `mysql.rds_set_external_source` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 RDS for MySQL DB 인스턴스에서 실행해야 합니다.

 `mysql.rds_set_external_source`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 MySQL의 외부 인스턴스에서 `replication_user_name` 및 `replication_user_password` 권한이 있는 복제 사용자를 나타내는 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 값을 지정해야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예입니다.

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

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 'repl\$1user' 사용자에게 모든 데이터베이스에 대한 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다.

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

암호화된 복제를 사용하려면 SSL 연결을 사용하도록 소스 데이터베이스 인스턴스를 구성합니다. 또한 [mysql.rds\$1import\$1binlog\$1ssl\$1material](url-rds-user;mysql_rds_import_binlog_ssl_material.html) 프로시저를 사용하여 인증 기관(CA) 인증서, 클라이언트 인증서, 클라이언트 키를 DB 인스턴스나 DB 클러스터로 가져옵니다.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_source`를 직접 호출하여 RDS for MySQL DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 직접 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_reset_external_source)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_source`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

### 예제
<a name="mysql_rds_set_external_source-examples"></a>

RDS for MySQL DB 인스턴스에서 실행할 경우 다음 예시는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스를 구성합니다.

```
call mysql.rds_set_external_source(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  1);
```

## mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_set_external_master_with_auto_position"></a>

RDS for MySQL DB 인스턴스를 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성합니다. 또한 이 프로시저는 전역 트랜잭션 식별자(GTID)를 기반으로 한 지연된 복제 및 복제를 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_master_with_auto_position-syntax"></a>

 

```
CALL mysql.rds_set_external_master_with_auto_position (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
);
```

### 파라미터
<a name="mysql_rds_set_external_master_with_auto_position-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`MASTER_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 데이터베이스 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

### 사용 노트
<a name="mysql_rds_set_external_master_with_auto_position-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_external_master_with_auto_position` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 MySQL DB 인스턴스에서 실행해야 합니다.

이 프로시저는 모든 RDS for MySQL 5.7 버전 및 RDS for MySQL 8.0.26 이상의 8.0 버전에서 지원됩니다.

`mysql.rds_set_external_master_with_auto_position`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 `replication_user_name` 및 `replication_user_password`의 값을 지정해야 합니다. 이러한 값은 MySQL의 외부 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자를 나타내야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예제입니다.

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 `REPLICATION CLIENT` 사용자에게 모든 데이터베이스에 대한 `REPLICATION SLAVE` 및 `'repl_user'` 권한을 부여합니다.

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

자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 섹션을 참조하세요.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_master_with_auto_position` 직접 호출 전에 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](#mysql_rds_set_external_source_gtid_purged)를 직접 호출하여 외부 소스의 지정된 GTID 범위로 시스템 변수를 설정합니다.

`mysql.rds_set_external_master_with_auto_position`을 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_reset_external_master)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_master_with_auto_position`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

재해 복구의 경우 이 프로시저를 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 `mysql.rds_set_external_master_with_auto_position` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until_gtid` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제 작업에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하십시오.

### 예제:
<a name="mysql_rds_set_external_master_with_auto_position-examples"></a>

MySQL DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스가 구성됩니다. MySQL DB 인스턴스에서 최소 복제 지연을 1시간(3,600초)으로 설정합니다. Amazon RDS 외부에서 실행 중인 MySQL 소스 데이터베이스 인스턴스의 변경 사항은 최소 1시간 동안 MySQL DB 인스턴스 읽기 전용 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_master_with_auto_position(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_set_external_source_with_auto_position"></a>

RDS for MySQL DB 인스턴스를 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성합니다. 또한 이 프로시저는 전역 트랜잭션 식별자(GTID)를 기반으로 한 지연된 복제 및 복제를 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_source_with_auto_position-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
);
```

### 파라미터
<a name="mysql_rds_set_external_source_with_auto_position-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 데이터베이스 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

### 사용 노트
<a name="mysql_rds_set_external_source_with_auto_position-usage-notes"></a>

관리 사용자는 `mysql.rds_set_external_source_with_auto_position` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 MySQL DB 인스턴스에서 실행해야 합니다.

`mysql.rds_set_external_source_with_auto_position`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 `replication_user_name` 및 `replication_user_password`의 값을 지정해야 합니다. 이러한 값은 MySQL의 외부 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자를 나타내야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예제입니다.

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 `REPLICATION CLIENT` 사용자에게 모든 데이터베이스에 대한 `REPLICATION SLAVE` 및 `'repl_user'` 권한을 부여합니다.

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

자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 섹션을 참조하세요.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_source_with_auto_position` 직접 호출 전에 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](#mysql_rds_set_external_source_gtid_purged)를 직접 호출하여 외부 소스의 지정된 GTID 범위로 `gtid_purged` 시스템 변수를 설정합니다.

`mysql.rds_set_external_source_with_auto_position`을 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_reset_external_source)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_source_with_auto_position`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

재해 복구의 경우 이 프로시저를 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 `mysql.rds_set_external_source_with_auto_position` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until_gtid` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제 작업에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하십시오.

### 예제:
<a name="mysql_rds_set_external_source_with_auto_position-examples"></a>

MySQL DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스가 구성됩니다. MySQL DB 인스턴스에서 최소 복제 지연을 1시간(3,600초)으로 설정합니다. Amazon RDS 외부에서 실행 중인 MySQL 소스 데이터베이스 인스턴스의 변경 사항은 최소 1시간 동안 MySQL DB 인스턴스 읽기 전용 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_source_with_auto_position(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1master\$1with\$1delay(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_set_external_master_with_delay"></a>

Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 RDS for MySQL DB 인스턴스를 구성하고 지연 복제를 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_master_with_delay-syntax"></a>

 

```
CALL mysql.rds_set_external_master_with_delay(
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
);
```

### 파라미터
<a name="mysql_rds_set_external_master_with_delay-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 데이터베이스 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작할 `mysql_binary_log_file_name` 이진 로그 내 위치입니다.  
소스 데이터베이스 인스턴스의 `SHOW MASTER STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`MASTER_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 데이터베이스 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

### 사용 노트
<a name="mysql_rds_set_external_master_with_delay-usage-notes"></a>

 마스터 사용자는 `mysql.rds_set_external_master_with_delay` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 MySQL DB 인스턴스에서 실행해야 합니다.

 `mysql.rds_set_external_master_with_delay`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 `replication_user_name` 및 `replication_user_password`의 값을 지정해야 합니다. 이러한 값은 MySQL의 외부 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자를 나타내야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예제입니다.

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 `REPLICATION CLIENT` 사용자에게 모든 데이터베이스에 대한 `REPLICATION SLAVE` 및 `'repl_user'` 권한을 부여합니다.

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

자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 섹션을 참조하세요.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_master_with_delay`을 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_reset_external_master)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_master_with_delay`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

재해 복구의 경우 이 프로시저를 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 `mysql.rds_set_external_master_with_delay` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제 작업에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하십시오.

`mysql.rds_set_external_master_with_delay` 프로시저는 다음 버전의 RDS for MySQL에서 사용할 수 있습니다.
+ MySQL 8.0.26 및 8.0 버전 이상
+ 모든 5.6 버전

### 예제
<a name="mysql_rds_set_external_master_with_delay-examples"></a>

MySQL DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스가 구성됩니다. MySQL DB 인스턴스에서 최소 복제 지연을 1시간(3,600초)으로 설정합니다. Amazon RDS 외부에서 실행 중인 MySQL 소스 데이터베이스 인스턴스의 변경 사항은 최소 1시간 동안 MySQL DB 인스턴스 읽기 전용 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_master_with_delay(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_set_external_source_with_delay"></a>

Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 RDS for MySQL DB 인스턴스를 구성하고 지연 복제를 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_source_with_delay-syntax"></a>

```
CALL mysql.rds_set_external_source_with_delay (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
);
```

### 파라미터
<a name="mysql_rds_set_external_source_with_delay-parameters"></a>

 *host\$1name*   
소스 데이터베이스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
소스 데이터베이스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 외부 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 데이터베이스 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작할 `mysql_binary_log_file_name` 이진 로그 내 위치입니다.  
소스 데이터베이스 인스턴스의 `SHOW MASTER STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 데이터베이스 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

### 사용 노트
<a name="mysql_rds_set_external_source_with_delay-usage-notes"></a>

관리 사용자는 `mysql.rds_set_external_source_with_delay` 프로시저를 실행해야 합니다. 이 프로시저는 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본으로 구성되도록 MySQL DB 인스턴스에서 실행해야 합니다.

 `mysql.rds_set_external_source_with_delay`을 실행하기 전에 소스 데이터베이스 인스턴스가 되도록 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스를 구성해야 합니다. Amazon RDS 외부에서 실행하는 MySQL 인스턴스에 연결하려면 `replication_user_name` 및 `replication_user_password`의 값을 지정해야 합니다. 이러한 값은 MySQL의 외부 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자를 나타내야 합니다.

**MySQL의 외부 인스턴스를 소스 데이터베이스 인스턴스로 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 MySQL의 외부 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예제입니다.

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. MySQL의 외부 인스턴스에서 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 `REPLICATION CLIENT` 사용자에게 모든 데이터베이스에 대한 `REPLICATION SLAVE` 및 `'repl_user'` 권한을 부여합니다.

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

자세한 내용은 [외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성](MySQL.Procedural.Importing.External.Repl.md) 섹션을 참조하세요.

**참고**  
가능하면 읽기 전용 복제본을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하는 것이 좋습니다. 그렇게 하면 이 복제 및 다른 복제 관련 저장 프로시저만 사용하는 것이 좋습니다. 이러한 방법을 사용하면 Amazon RDS DB 인스턴스 간 더욱 복잡한 복제 토폴로지를 사용할 수 있습니다. 이러한 저장 프로시저는 주로 Amazon RDS 외부에서 실행되는 MySQL 인스턴스를 사용하여 복제할 수 있도록 하기 위한 것입니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_source_with_delay`을 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_reset_external_source)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_source_with_delay`를 호출하면 Amazon RDS는 `set master`의 시간, 사용자 및 작업을 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 기록합니다.

재해 복구의 경우 이 프로시저를 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 `mysql.rds_set_external_source_with_delay` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제 작업에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하십시오.

### 예제:
<a name="mysql_rds_set_external_master_with_delay-examples"></a>

MySQL DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MySQL 인스턴스의 읽기 전용 복제본이 되도록 DB 인스턴스가 구성됩니다. MySQL DB 인스턴스에서 최소 복제 지연을 1시간(3,600초)으로 설정합니다. Amazon RDS 외부에서 실행 중인 MySQL 소스 데이터베이스 인스턴스의 변경 사항은 최소 1시간 동안 MySQL DB 인스턴스 읽기 전용 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_source_with_delay(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1gtid\$1purged
<a name="mysql_rds_set_external_source_gtid_purged"></a>

외부 소스의 지정된 GTID 범위를 사용하여 [gtid\$1purged](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_gtid_purged) 시스템 변수를 설정합니다. `gtid_purged` 값은 자동 위치 지정을 사용하여 복제를 재개하도록 GTID 기반 복제를 구성하는 데 필요합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 섹션을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_source_gtid_purged-syntax"></a>

 

```
CALL mysql.rds_set_external_source_gtid_purged(
  server_uuid
  , start_pos
  , end_pos
);
```

### 파라미터
<a name="mysql_rds_set_external_source_gtid_purged-parameters"></a>

 *server\$1uuid*   
GTID 범위를 가져오는 외부 서버의 범용 고유 식별자(UUID)입니다.

 *start\$1pos*   
설정할 GTID 범위의 시작 위치입니다.

 *end\$1pos*   
설정할 GTID 범위의 종료 위치입니다.

### 사용 노트
<a name="mysql_rds_set_external_source_gtid_purged-usage-notes"></a>

`mysql.rds_set_external_source_gtid_purged` 프로시저는 MySQL 8.0.37 이상의 8.0 버전에서만 사용할 수 있습니다.

[mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_set_external_master_with_auto_position), [mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_set_external_source_with_auto_position) 또는 [mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel](mysql-stored-proc-multi-source-replication.md#mysql_rds_set_external_source_with_auto_position_for_channel)을 직접 호출하기 전에 `mysql.rds_set_external_source_gtid_purged`를 직접 호출합니다.

`mysql.rds_set_external_source_gtid_purged` 직접 호출 전에 데이터베이스의 모든 활성 복제 채널을 중지해야 합니다. 채널 상태를 확인하려면 `SHOW REPLICA STATUS` MySQL 문을 사용합니다. 채널에서 복제를 중지하려면 [mysql.rds\$1stop\$1replication\$1for\$1channel](mysql-stored-proc-multi-source-replication.md#mysql_rds_stop_replication_for_channel)을 직접 호출합니다.

지정하는 GTID 범위는 기존 `GTID_PURGED` 값의 상위 집합이어야 합니다. 이 저장 프로시저는 `GTID_PURGED` 값을 설정하기 전에 다음 값을 확인합니다.
+ `server_uuid`는 유효합니다.
+ `start_pos` 값이 `0`보다 크거나 `end_pos`보다 작습니다.
+ `end_pos` 값이 `start_pos`보다 크거나 같습니다.

외부 서버의 GTID 집합에 여러 범위의 값이 포함된 경우 다른 GTID 집합 값을 사용하여 프로시저를 여러 번 직접 호출해 보세요.

`mysql.rds_set_external_source_gtid_purged`를 직접 호출하면 Amazon RDS는 `set gtid_purged`의 시간, 사용자 및 작업을 `mysql.rds_history` 테이블에 기록합니다.

복제에 사용하는 백업의 `gtid_purged` 값을 적절하게 설정하지 않으면 복제 프로세스 중에 트랜잭션이 누락되거나 중복될 수 있습니다. 다음 단계를 수행하여 올바른 `gtid_purged` 값을 설정합니다.

**복제본에 gtid\$1purged 값을 설정하려면**

1. 복제 시작 지점으로 사용할 시점 또는 특정 백업 파일을 결정합니다. 이는 논리적 백업(mysqldump 파일) 또는 물리적 백업(Amazon RDS 스냅샷)일 수 있습니다.

1. `gtid_executed` 값을 결정합니다. 이 값은 서버에서 커밋된 모든 GTID 집합을 나타냅니다. 이 값을 검색하려면 소스 인스턴스에서 다음 중 하나를 수행합니다.
   + 백업을 수행할 때 SQL 문(`SELECT @@GLOBAL.GTID_EXECUTED;`)을 실행합니다.
   + 관련 옵션이 해당 백업 유틸리티에 포함되어 있는 경우 백업 파일에서 값을 추출합니다. 자세한 내용은 MySQL 설명서의 [set-gtid-purged](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html#option_mysqldump_set-gtid-purged) 옵션을 참조하세요.

1. `mysql.rds_set_external_source_gtid_purged`에 대한 직접 호출에 사용할 `gtid_purged` 값을 결정합니다. `gtid_purged` 값에는 소스 인스턴스에서 실행되어 복제에 더 이상 필요하지 않은 GTID가 모두 포함되어야 합니다. 따라서 `gtid_purged` 값은 이전 단계에서 검색한 `gtid_executed` 값의 하위 집합이어야 합니다.

   `gtid_purged` 값을 확인하려면 백업에 포함되지 않아 복제에 더 이상 필요하지 않은 GTID를 식별합니다. 바이너리 로그를 분석하거나 mysqlbinlog와 같은 도구를 사용하여 바이너리 로그에서 제거된 GTID를 찾으면 됩니다.

   또는 백업 지점까지의 모든 바이너리 로그를 포함하는 일관된 백업이 있는 경우 백업 지점의 `gtid_executed` 값과 동일하게 `gtid_purged` 값을 설정할 수 있습니다.

1. 백업과 일치하는 적절한 `gtid_purged` 값을 결정한 후 RDS for MySQL DB 인스턴스에서 `mysql.rds_set_external_source_gtid_purged` 저장 프로시저를 직접 호출하여 값을 설정합니다.

### 예제
<a name="mysql_rds_set_external_source_gtid_purged-examples"></a>

MySQL DB 인스턴스에서 실행하는 경우 다음 예제에서는 UUID가 `12345678-abcd-1234-efgh-123456789abc`, 시작 위치가 `1`, 종료 위치가 `100`인 외부 MySQL 서버의 GTID 범위를 설정합니다. 결과 GTID 값은 `+12345678-abcd-1234-efgh-123456789abc:1-100`으로 설정됩니다.

```
CALL mysql.rds_set_external_source_gtid_purged('12345678-abcd-1234-efgh-123456789abc', 1, 100);
```

## mysql.rds\$1set\$1master\$1auto\$1position(RDS for MySQL 메이저 버전 8.0 이하)
<a name="mysql_rds_set_master_auto_position"></a>

복제 모드를 바이너리 로그 파일 위치 또는 전역 트랜잭션 식별자(GTID)를 기반으로 설정합니다.

### 구문
<a name="mysql_rds_set_master_auto_position-syntax"></a>

 

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

### 파라미터
<a name="mysql_rds_set_master_auto_position-parameters"></a>

 *auto\$1position\$1mode*   
로그 파일 위치 복제 또는 GTID를 기반으로 하는 복제를 사용할지 여부를 나타내는 값:  
+ `0` – 바이너리 로그 파일 위치를 기반으로 한 복제 방법을 사용합니다. 기본값은 `0`입니다.
+ `1` – GTID 기반 복제 방법을 사용합니다.

### 사용 노트
<a name="mysql_rds_set_master_auto_position-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_master_auto_position` 프로시저를 실행해야 합니다.

이 프로시저는 모든 RDS for MySQL 5.7 버전 및 RDS for MySQL 8.0.26 이상의 8.0 버전에서 지원됩니다.

## mysql.rds\$1set\$1source\$1auto\$1position(RDS for MySQL 메이저 버전 8.4 이상)
<a name="mysql_rds_set_source_auto_position"></a>

복제 모드를 바이너리 로그 파일 위치 또는 전역 트랜잭션 식별자(GTID)를 기반으로 설정합니다.

### 구문
<a name="mysql_rds_set_source_auto_position-syntax"></a>

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

### 파라미터
<a name="mysql_rds_set_source_auto_position-parameters"></a>

*auto\$1position\$1mode*  
로그 파일 위치 복제 또는 GTID를 기반으로 하는 복제를 사용할지 여부를 나타내는 값:  
+  `0` – 바이너리 로그 파일 위치를 기반으로 한 복제 방법을 사용합니다. 기본값은 `0`입니다.
+  `1` – GTID 기반 복제 방법을 사용합니다.

### 사용 노트
<a name="mysql_rds_set_source_auto_position-usage-notes"></a>

관리 사용자는 `mysql.rds_set_source_auto_position` 프로시저를 실행해야 합니다.

## mysql.rds\$1set\$1source\$1delay
<a name="mysql_rds_set_source_delay"></a>

소스 데이터베이스 인스턴스에서 현재 읽기 전용 복제본으로의 복제를 지연할 최소 시간(초)을 설정합니다. 읽기 전용 복제본에 연결된 경우에 이 프로시저를 사용하여 소스 데이터베이스 인스턴스에서 복제를 지연합니다.

### 구문
<a name="mysql_rds_set_source_delay-syntax"></a>

```
CALL mysql.rds_set_source_delay(
delay
);
```

### 파라미터
<a name="mysql_rds_set_source_delay-parameters"></a>

 *delay*   
소스 데이터베이스 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

### 사용 노트
<a name="mysql_rds_set_source_delay-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_source_delay` 프로시저를 실행해야 합니다.

재해 복구의 경우 이 프로시저를 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 저장 프로시저 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 `mysql.rds_set_source_delay` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until` 또는 `mysql.rds_start_replication_until_gtid` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하십시오.

`mysql.rds_set_source_delay` 프로시저는 다음 버전의 RDS for MySQL에서 사용할 수 있습니다.
+ 모든 RDS for MySQL 8.4 버전
+ MySQL 8.0.26 및 8.0 버전 이상
+ 모든 5.6 버전

### 예제
<a name="mysql_rds_set_source_delay-examples"></a>

소스 데이터베이스 인스턴스에서 현재 읽기 전용 복제본으로의 복제를 최소 1시간(3,600초) 동안 지연하려면 다음 파라미터를 사용하여 `mysql.rds_set_source_delay`를 호출하면 됩니다.

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

## mysql.rds\$1skip\$1repl\$1error
<a name="mysql_rds_skip_repl_error"></a>

MySQL DB 읽기 전용 복제본의 복제 오류를 건너뛰고 삭제합니다.

### 구문
<a name="mysql_rds_skip_repl_error-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error;
```

### 사용 노트
<a name="mysql_rds_skip_repl_error-usage-notes"></a>

마스터 사용자는 읽기 전용 복제본에서 `mysql.rds_skip_repl_error` 프로시저를 실행해야 합니다. 이 프로시저에 대한 자세한 내용은 [mysql.rds\$1skip\$1repl\$1error 프로시저 호출](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure)를 참조하세요.

오류가 있는지 여부를 판별하려면 MySQL `SHOW REPLICA STATUS\G` 명령을 실행합니다. 중대한 복제 오류가 아닌 경우 `mysql.rds_skip_repl_error`를 사용하여 오류를 건너뛸 수 있습니다. 오류가 여러 개인 경우 `mysql.rds_skip_repl_error`는 첫 번째 오류를 삭제한 후 다른 오류가 있음을 경고합니다. `SHOW REPLICA STATUS\G`를 사용하여 다음 오류에 대한 적합한 조치를 결정할 수 있습니다. 반환된 값에 대한 자세한 내용은 MySQL 설명서의 [SHOW SLAVE STATUS 문](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)을 참조하세요.

Amazon RDS의 복제 오류 해결에 대한 자세한 내용은 [MySQL 읽기 전용 복제본의 문제 해결](USER_ReadRepl.Troubleshooting.md) 주제를 참조하십시오.

#### 복제 중지 오류
<a name="skip_repl_error.stopped-error"></a>

`mysql.rds_skip_repl_error` 프로시저를 호출할 때 복제본이 중단되었거나 사용 중지되었다는 오류 메시지가 표시될 수 있습니다.

읽기 전용 복제본 대신 기본 인스턴스에서 프로시저를 실행하면 이 오류 메시지가 나타납니다. 이 프로시저가 작동하려면 읽기 전용 복제본에서 이 프로시저를 실행해야 합니다.

이 오류 메시지는 읽기 전용 복제본에서 프로시저를 실행하지만 복제를 성공적으로 다시 시작할 수 없는 경우에도 나타날 수 있습니다.

많은 수의 오류를 건너뛰어야 하는 경우, 복제 지연이 바이너리 로그(binlog) 파일의 기본값 보관 기간 이상으로 늘어날 수 있습니다. 이 경우 binlog 파일이 읽기 전용 복제본에서 재생되기 전에 지워지기 때문에 치명적 오류가 발생할 수 있습니다. 이 제거는 복제를 중지시키며, 복제 오류를 건너뛰기 위해 더 이상 `mysql.rds_skip_repl_error` 명령을 호출할 수 없습니다.

이 문제는 소스 데이터베이스 인스턴스에서 binlog 파일이 보관되는 시간을 늘려서 완화할 수 있습니다. binlog 보관 시간을 늘린 후에 복제를 재시작하고 필요에 따라 `mysql.rds_skip_repl_error` 명령을 호출할 수 있습니다.

binlog 보관 기간을 설정하려면 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 프로시저를 사용하여 `'binlog retention hours'` 구성 파라미터와 DB 클러스터에 binlog 파일을 보관할 시간을 함께 지정하십시오. 다음 예제에서는 binlog 파일의 보관 기간을 48시간으로 설정합니다.

```
CALL mysql.rds_set_configuration('binlog retention hours', 48);
```

## mysql.rds\$1start\$1replication
<a name="mysql_rds_start_replication"></a>

RDS for MySQL DB 인스턴스에서 복제를 시작합니다.

**참고**  
[mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저를 사용하여 RDS for MySQL DB 인스턴스에서 복제를 시작하고 지정된 바이너리 로그 파일 위치에서 복제를 중지할 수 있습니다.

### 구문
<a name="mysql_rds_start_replication-syntax"></a>

 

```
CALL mysql.rds_start_replication;
```

### 사용 노트
<a name="mysql_rds_start_replication-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication` 프로시저를 실행해야 합니다.

Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 데이터를 가져오려면 [mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_set_external_master) 또는 [mysql.rds\$1set\$1external\$1source(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_set_external_source)를 직접 호출하여 복제 구성을 빌드한 다음, 읽기 전용 복제본에서 `mysql.rds_start_replication`을 직접 호출하여 복제 프로세스를 시작합니다. 자세한 내용은 [Amazon RDS for MySQL DB 인스턴스로 백업 복원](MySQL.Procedural.Importing.md) 섹션을 참조하세요.

Amazon RDS 외부의 MySQL 인스턴스로 데이터를 내보내려면 읽기 전용 복제본에서 `mysql.rds_start_replication` 및 `mysql.rds_stop_replication`을 호출하여 바이너리 로그 삭제 등의 몇 가지 복제 작업을 제어합니다. 자세한 내용은 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md) 섹션을 참조하세요.

읽기 전용 복제본에서 `mysql.rds_start_replication`을 호출하여 이전에 `mysql.rds_stop_replication`을 호출하여 중지한 복제 프로세스를 재시작할 수도 있습니다. 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 섹션을 참조하세요.

## mysql.rds\$1start\$1replication\$1until
<a name="mysql_rds_start_replication_until"></a>

RDS for MySQL DB 인스턴스에서 복제를 시작하고 지정된 바이너리 로그 파일 위치에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_start_replication_until-syntax"></a>

 

```
CALL mysql.rds_start_replication_until (
replication_log_file
  , replication_stop_point
);
```

### 파라미터
<a name="mysql_rds_start_replication_until-parameters"></a>

 *replication\$1log\$1file*   
복제 정보를 포함하는 소스 데이터베이스 인스턴스의 이진 로그 이름입니다.

 *replication\$1stop\$1point *   
복제를 중지할 `replication_log_file` 바이너리 로그 내 위치입니다.

### 사용 노트
<a name="mysql_rds_start_replication_until-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication_until` 프로시저를 실행해야 합니다.

`mysql.rds_start_replication_until` 프로시저는 다음 버전의 RDS for MySQL에서 사용할 수 있습니다.
+ 모든 RDS for MySQL 8.4 버전
+ MySQL 8.0.26 및 8.0 버전 이상
+ 모든 5.6 버전

이 프로시저는 지연 복제에서 재해 복구를 위해 사용할 있습니다. 지연된 복제를 구성한 경우 이 프로시저를 사용하여 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드할 수 있습니다. 이 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

다음 저장 프로시저를 사용하여 지연 복제를 구성할 수 있습니다.
+ [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration)
+ [mysql.rds\$1set\$1external\$1master\$1with\$1delay(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](#mysql_rds_set_external_master_with_delay)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1delay(RDS for MySQL 메이저 버전 8.4 이상)](#mysql_rds_set_external_source_with_delay)
+ [mysql.rds\$1set\$1source\$1delay](#mysql_rds_set_source_delay)

`replication_log_file` 파라미터에 지정된 파일 이름은 소스 데이터베이스 인스턴스 binlog 파일 이름과 일치해야 합니다.

`replication_stop_point` 파라미터가 과거에 해당하는 중지 위치를 지정하는 경우 복제가 즉시 중지됩니다.

### 예제
<a name="mysql_rds_start_replication_until-examples"></a>

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

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

## mysql.rds\$1stop\$1replication
<a name="mysql_rds_stop_replication"></a>

MySQL DB 인스턴스에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_stop_replication-syntax"></a>

 

```
CALL mysql.rds_stop_replication;
```

### 사용 노트
<a name="mysql_rds_stop_replication-usage-notes"></a>

마스터 사용자는 `mysql.rds_stop_replication` 프로시저를 실행해야 합니다.

Amazon RDS 외부에서 실행 중인 MySQL 인스턴스에서 데이터를 가져오도록 복제를 구성하는 경우 가져오기가 완료된 후 읽기 전용 복제본에서 `mysql.rds_stop_replication`을 호출하여 복제 프로세스를 중지합니다. 자세한 내용은 [Amazon RDS for MySQL DB 인스턴스로 백업 복원](MySQL.Procedural.Importing.md) 섹션을 참조하세요.

Amazon RDS 외부의 MySQL 인스턴스로 데이터를 내보내도록 복제를 구성할 경우 읽기 전용 복제본에서 `mysql.rds_start_replication` 및 `mysql.rds_stop_replication`을 호출하여 이진 로그 삭제 등의 몇 가지 복제 작업을 제어합니다. 자세한 내용은 [복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기](MySQL.Procedural.Exporting.NonRDSRepl.md) 섹션을 참조하세요.

`mysql.rds_stop_replication`을 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 중지할 수도 있습니다. 일반적으로 읽기 전용 복제본에서 대규모 인덱스 생성과 같이 읽기 전용 복제본에서 장기 실행 작업을 수행하려는 경우 복제를 중지합니다. 읽기 전용 복제본에서 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)을 호출하여 중지한 복제 프로세스를 재시작할 수 있습니다. 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 섹션을 참조하세요.

# 세션 또는 쿼리 종료
<a name="mysql-stored-proc-ending"></a>

다음 저장 프로시저는 세션 또는 쿼리를 종료합니다.

**Topics**
+ [

## mysql.rds\$1kill
](#mysql_rds_kill)
+ [

## mysql.rds\$1kill\$1query
](#mysql_rds_kill_query)

## mysql.rds\$1kill
<a name="mysql_rds_kill"></a>

MySQL Server와의 연결을 종료합니다.

### 구문
<a name="mysql_rds_kill-syntax"></a>

```
CALL mysql.rds_kill(processID);
```

### 파라미터
<a name="mysql_rds_kill-parameters"></a>

 *processID*   
종료할 연결 스레드의 ID입니다.

### 사용 노트
<a name="mysql_rds_kill-usage-notes"></a>

MySQL Server에 대한 각 연결은 별개의 스레드로 실행됩니다. 연결을 종료하려면 `mysql.rds_kill` 프로시저를 사용하여 해당 연결의 스레드 ID를 전달합니다. 스레드 ID를 확인하려면 MySQL [SHOW PROCESSLIST](https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html) 명령을 사용합니다.

제한 사항에 대한 자세한 내용은 [MySQL 저장 프로시저 제한 사항](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures) 섹션을 참조하세요.

### 예시
<a name="mysql_rds_kill-examples"></a>

다음 예제는 스레드 ID가 4243인 연결을 종료합니다.

```
CALL mysql.rds_kill(4243);
```

## mysql.rds\$1kill\$1query
<a name="mysql_rds_kill_query"></a>

MySQL Server에서 실행 중인 쿼리를 종료합니다.

### 구문
<a name="mysql_rds_kill_query-syntax"></a>

```
CALL mysql.rds_kill_query(processID);
```

### 파라미터
<a name="mysql_rds_kill_query-parameters"></a>

 *processID*   
종료할 쿼리를 실행 중인 프로세스 또는 스레드의 ID입니다.

### 사용 노트
<a name="mysql_rds_kill_query-usage-notes"></a>

MySQL Server에서 실행 중인 쿼리를 중지하려면 `mysql_rds_kill_query` 프로시저를 사용하여 해당 쿼리를 실행 중인 스레드의 연결 ID를 전달합니다. 그러면 프로시저가 연결을 종료합니다.

ID를 확인하려면 MySQL [INFORMATION\$1SCHEMA PROCESSLIST 테이블](https://dev.mysql.com/doc/refman/8.0/en/information-schema-processlist-table.html)을 쿼리하거나 MySQL [SHOW PROCESSLIST](https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html) 명령을 사용합니다. `SHOW PROCESSLIST` 또는 `SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST`에서 가져온 ID 열의 값은 *processID*입니다.

제한 사항에 대한 자세한 내용은 [MySQL 저장 프로시저 제한 사항](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures) 섹션을 참조하세요.

### 예시
<a name="mysql_rds_kill_query-examples"></a>

다음 예시는 쿼리 스레드 ID가 230040인 쿼리를 중지합니다.

```
CALL mysql.rds_kill_query(230040);
```

# 활성-활성 클러스터
<a name="mysql-stored-proc-active-active-clusters"></a>

다음 저장 프로시저는 RDS for MySQL의 활성-활성 클러스터를 설정하고 관리합니다. 자세한 내용은 [RDS for MySQL 액티브-액티브 클러스터 구성](mysql-active-active-clusters.md) 단원을 참조하십시오.

이러한 저장 프로시저는 다음 버전을 실행하는 RDS for MySQL DB 인스턴스에서만 사용할 수 있습니다.
+ 모든 MySQL 8.4 버전
+ MySQL 8.0.35 이상 마이너 버전

**Topics**
+ [

## mysql.rds\$1group\$1replication\$1advance\$1gtid
](#mysql_rds_group_replication_advance_gtid)
+ [

## mysql.rds\$1group\$1replication\$1create\$1user
](#mysql_rds_group_replication_create_user)
+ [

## mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel
](#mysql_rds_group_replication_set_recovery_channel)
+ [

## mysql.rds\$1group\$1replication\$1start
](#mysql_rds_group_replication_start)
+ [

## mysql.rds\$1group\$1replication\$1stop
](#mysql_rds_group_replication_stop)

## mysql.rds\$1group\$1replication\$1advance\$1gtid
<a name="mysql_rds_group_replication_advance_gtid"></a>

현재 DB 인스턴스에 자리 표시자 GTID를 생성합니다.

### 구문
<a name="mysql_rds_group_replication_advance_gtid-syntax"></a>

```
CALL mysql.rds_group_replication_advance_gtid(
begin_id
, end_id
, server_uuid
);
```

### 파라미터
<a name="mysql_rds_group_replication_advance_gtid-parameters"></a>

 *begin\$1id*   
생성할 시작 트랜잭션 ID입니다.

 *end\$1id*   
생성할 종료 트랜잭션 ID입니다.

 *begin\$1id*   
생성할 트랜잭션을 위한 `group_replication_group_name`입니다. `group_replication_group_name`은 DB 인스턴스와 연결된 DB 파라미터 그룹에 UUID로 지정됩니다.

### 사용 노트
<a name="mysql_rds_group_replication_advance_gtid-usage-notes"></a>

활성-활성 클러스터에서 DB 인스턴스가 그룹에 가입하려면 새 DB 인스턴스에서 실행되는 모든 GTID 트랜잭션이 클러스터의 다른 구성원에 존재해야 합니다. 드문 경우지만, 인스턴스를 그룹에 조인하기 전에 트랜잭션을 실행하면 새 DB 인스턴스에서 더 많은 트랜잭션이 발생할 수 있습니다. 이 경우 기존 트랜잭션을 제거할 수는 없지만 이 프로시저를 사용하여 그룹의 다른 DB 인스턴스에 해당하는 자리 표시자 GTID를 만들 수 있습니다. 그러기 전에 트랜잭션이 **복제된 데이터에 영향을 주지 않는지 확인하세요.

이 프로시저를 직접 호출하면 `server_uuid:begin_id-end_id`의 GTID 트랜잭션이 빈 콘텐츠와 함께 생성됩니다. 복제 문제를 방지하려면 다른 조건에서는 이 프로시저를 사용하지 마세요.

**중요**  
활성-활성 클러스터가 정상적으로 작동할 때는 이 프로시저를 직접 호출하지 마세요. 생성 중인 트랜잭션으로 인해 발생할 수 있는 결과를 이해하지 못하면 이 프로시저를 직접 호출하지 마세요. 이 프로시저를 직접 호출하면 데이터가 일치하지 않을 수 있습니다.

### 예제
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

다음 예제는 현재 DB 인스턴스에 자리 표시자 GTID를 만듭니다.

```
CALL mysql.rds_group_replication_advance_gtid(5, 6, '11111111-2222-3333-4444-555555555555');
```

## mysql.rds\$1group\$1replication\$1create\$1user
<a name="mysql_rds_group_replication_create_user"></a>

DB 인스턴스의 그룹 복제를 위한 복제 사용자 `rdsgrprepladmin`를 생성합니다.

### 구문
<a name="mysql_rds_group_replication_create_user-syntax"></a>

```
CALL mysql.rds_group_replication_create_user(
replication_user_password
);
```

### 파라미터
<a name="mysql_rds_group_replication_create_user-parameters"></a>

 *replication\$1user\$1password*   
복제 사용자 `rdsgrprepladmin`의 암호입니다.

### 사용 노트
<a name="mysql_rds_group_replication_create_user-usage-notes"></a>
+ 활성-활성 클러스터의 모든 DB 인스턴스에서 복제 사용자 `rdsgrprepladmin`의 암호가 동일해야 합니다.
+ `rdsgrprepladmin` 사용자 이름은 그룹 복제 연결용으로 예약되어 있습니다. 마스터 사용자를 포함한 다른 사용자는 이 사용자 이름을 가질 수 없습니다.

### 예제
<a name="mysql_rds_group_replication_create_user-examples"></a>

다음 예제는 DB 인스턴스에서 그룹 복제를 위한 복제 사용자 `rdsgrprepladmin`를 생성합니다.

```
CALL mysql.rds_group_replication_create_user('password');
```

## mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel
<a name="mysql_rds_group_replication_set_recovery_channel"></a>

활성-활성 클러스터의 `group_replication_recovery` 채널을 설정합니다. 이 프로시저에서는 예약된 `rdsgrprepladmin` 사용자를 사용하여 채널을 구성합니다.

### 구문
<a name="mysql_rds_group_replication_set_recovery_channel-syntax"></a>

```
CALL mysql.rds_group_replication_set_recovery_channel(
replication_user_password);
```

### 파라미터
<a name="mysql_rds_group_replication_set_recovery_channel-parameters"></a>

 *replication\$1user\$1password*   
복제 사용자 `rdsgrprepladmin`의 암호입니다.

### 사용 노트
<a name="mysql_rds_group_replication_set_recovery_channel-usage-notes"></a>

활성-활성 클러스터의 모든 DB 인스턴스에서 복제 사용자 `rdsgrprepladmin`의 암호가 동일해야 합니다. `mysql.rds_group_replication_create_user`를 직접 호출하면 암호가 지정됩니다.

### 예제
<a name="mysql_rds_group_replication_set_recovery_channel-examples"></a>

다음 예에서는 활성-활성 클러스터의 `group_replication_recovery` 채널을 설정합니다.

```
CALL mysql.rds_group_replication_set_recovery_channel('password');
```

## mysql.rds\$1group\$1replication\$1start
<a name="mysql_rds_group_replication_start"></a>

현재 DB 인스턴스에서 그룹 복제를 시작합니다.

### 구문
<a name="mysql_rds_group_replication_start-syntax"></a>

```
CALL mysql.rds_group_replication_start(
bootstrap
);
```

### 파라미터
<a name="mysql_rds_group_replication_start-parameters"></a>

 *부트스트랩*   
새 그룹을 초기화할지 기존 그룹에 가입할지를 지정하는 값입니다. `1`은 현재 DB 인스턴스로 새 그룹을 초기화합니다. `0`은 DB 인스턴스와 연결된 DB 파라미터 그룹의 `group_replication_group_seeds` 파라미터에 정의된 엔드포인트에 연결하여 현재 DB 인스턴스를 기존 그룹에 조인합니다.

### 예제
<a name="mysql_rds_group_replication_start-examples"></a>

다음 예제는 현재 DB 인스턴스로 새 그룹을 초기화합니다.

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

## mysql.rds\$1group\$1replication\$1stop
<a name="mysql_rds_group_replication_stop"></a>

현재 DB 인스턴스에서 그룹 복제를 중지합니다.

### 구문
<a name="mysql_rds_group_replication_stop-syntax"></a>

```
CALL mysql.rds_group_replication_stop();
```

### 사용 노트
<a name="mysql_rds_group_replication_stop-usage-notes"></a>

DB 인스턴스에서 복제를 중지해도 활성-활성 클러스터의 다른 DB 인스턴스에는 영향을 주지 않습니다.

# 다중 소스 복제 관리
<a name="mysql-stored-proc-multi-source-replication"></a>

다음 저장 프로시저는 RDS for MySQL의 다중 소스 복제본에서 복제 채널을 설정하고 관리합니다. 자세한 내용은 [Amazon RDS for MySQL용 다중 소스 복제 구성](mysql-multi-source-replication.md) 단원을 참조하십시오.

이러한 저장 프로시저는 다음 엔진 버전을 실행하는 RDS for MySQL DB 인스턴스에서만 사용할 수 있습니다.
+ 모든 8.4 버전
+ 8.0.35 이상 마이너 버전
+ 5.7.44 이상 마이너 버전

`caching_sha2_passwword`로 구성된 복제 사용자로 복제를 관리하기 위해 저장 프로시저를 사용하는 경우, `SOURCE_SSL=1`을 지정하여 TLS를 구성해야 합니다. `caching_sha2_password`는 RDS for MySQL 8.4의 기본 인증 플러그인입니다.

**참고**  
이 설명서에서는 소스 DB 인스턴스를 RDS for MySQL DB 인스턴스라고 하지만, 이러한 프로시저는 Amazon RDS 외부에서 실행되는 MySQL 인스턴스에도 적용됩니다.

**Topics**
+ [

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
](#mysql_rds_next_source_log_for_channel)
+ [

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
](#mysql_rds_reset_external_source_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
](#mysql_rds_set_external_source_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
](#mysql_rds_set_external_source_with_auto_position_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
](#mysql_rds_set_external_source_with_delay_for_channel)
+ [

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
](#mysql_rds_set_source_auto_position_for_channel)
+ [

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
](#mysql_rds_set_source_delay_for_channel)
+ [

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
](#mysql_rds_skip_repl_error_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1for\$1channel
](#mysql_rds_start_replication_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
](#mysql_rds_start_replication_until_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
](#mysql_rds_start_replication_until_gtid_for_channel)
+ [

## mysql.rds\$1stop\$1replication\$1for\$1channel
](#mysql_rds_stop_replication_for_channel)

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
<a name="mysql_rds_next_source_log_for_channel"></a>

소스 DB 인스턴스 로그 위치를 채널에 대한 소스 DB 인스턴스에서 다음 이진 로그의 시작으로 변경합니다. 다중 소스 복제본에 대한 복제 I/O 오류 1236을 수신 중일 경우에만 이 프로시저를 사용하세요.

### 구문
<a name="mysql_rds_next_source_log_for_channel-syntax"></a>

 

```
CALL mysql.rds_next_source_log_for_channel(
curr_master_log,
channel_name           
);
```

### 파라미터
<a name="mysql_rds_next_source_log_for_channel-parameters"></a>

 *curr\$1master\$1log*  
현재 소스 로그 파일의 인덱스입니다. 예를 들어, 현재 파일의 이름이 `mysql-bin-changelog.012345`이면 인덱스는 12345입니다. 현재 소스 로그 파일 이름을 확인하려면 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` 명령을 실행하고 `Source_Log_File` 필드를 봅니다.

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_next_source_log_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_next_source_log_for_channel` 프로시저를 실행해야 합니다. 예를 들어 IO\$1Thread 오류가 있는 경우 이 프로시저를 사용하여 현재 바이너리 로그 파일의 모든 이벤트를 건너뛰고 `channel_name`에서 지정된 채널의 다음 바이너리 로그 파일에서 복제를 재개할 수 있습니다.

### 예제
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

다중 소스 복제본의 채널에서 복제가 실패했다고 가정해 보겠습니다. 다중 소스 복제본에서 `SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G`를 실행하면 다음 결과가 반환됩니다.

```
mysql> SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: ReplicationUser
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:.
              .
              .
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
               .
               .
                 Channel_name: channel_1
              .
              .
 -- Some fields are omitted in this example output
```

`Last_IO_Errno` 필드가 인스턴스에서 I/O 오류 1236을 수신하고 있음을 보여 줍니다. `Source_Log_File` 필드는 파일 이름이 `mysql-bin-changelog.012345`임을 보여 줍니다. 이는 로그 파일 인덱스가 `12345`임을 의미합니다. 오류를 해결하려면 다음 파라미터와 함께 `mysql.rds_next_source_log_for_channel`을 직접 호출합니다.

```
CALL mysql.rds_next_source_log_for_channel(12345,'channel_1');
```

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
<a name="mysql_rds_reset_external_source_for_channel"></a>

지정된 채널에서 복제 프로세스를 중지하고 다중 소스 복제본에서 채널 및 관련 구성을 제거합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 단원을 참조하십시오.

### 구문
<a name="mysql_rds_reset_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_reset_external_source_for_channel (channel_name);
```

### 파라미터
<a name="mysql_rds_reset_external_source_for_channel-parameters"></a>

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_reset_external_source_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_reset_external_source_for_channel` 프로시저를 실행해야 합니다. 이 프로시저를 수행하면 제거되는 채널에 속하는 모든 릴레이 로그가 삭제됩니다.

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
<a name="mysql_rds_set_external_source_for_channel"></a>

RDS for MySQL DB 인스턴스의 복제 채널을 구성하여 다른 RDS for MySQL DB 인스턴스의 데이터를 복제합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 단원을 참조하십시오.

**참고**  
대신 [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel) 저장 프로시저를 사용하여 이 채널에 지연 복제를 구성할 수 있습니다.

### 구문
<a name="mysql_rds_set_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_set_external_source_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , channel_name
);
```

### 파라미터
<a name="mysql_rds_set_external_source_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 소스 DB 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
RDS for MySQL 소스 DB 인스턴스에서 사용한 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하세요.

 *replication\$1user\$1name*   
RDS for MySQL 소스 DB 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 소스 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 DB 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작하는 `mysql_binary_log_file_name` 이진수 로그 내 위치입니다.  
소스 DB 인스턴스의 `SHOW BINARY LOG STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.  
이전 버전의 MySQL에는 `SHOW MASTER STATUS` 대신 `SHOW BINARY LOG STATUS`가 사용되었습니다. 8.4 이전 MySQL 버전을 사용하는 경우 `SHOW MASTER STATUS`를 사용합니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *channel\$1name*   
복제 채널의 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_set_external_source_for_channel-usage-notes"></a>

 마스터 사용자는 `mysql.rds_set_external_source_for_channel` 프로시저를 실행해야 합니다. 이 프로시저는 복제 채널을 생성할 대상 RDS for MySQL DB 인스턴스에서 실행해야 합니다.

 `mysql.rds_set_external_source_for_channel`을 실행하기 전에 다중 소스 복제본에 필요한 권한을 가진 소스 DB 인스턴스의 복제 사용자를 구성하세요. 다중 소스 복제본을 소스 DB 인스턴스에 연결하려면 소스 DB 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자의 `replication_user_name` 값과 `replication_user_password` 값을 지정해야 합니다.

**소스 DB 인스턴스에서 복제 사용자를 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 소스 DB 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예입니다.
**중요**  
보안 모범 사례로 다음 예제에 표시된 자리 표시자 값 이외의 암호를 지정하는 것이 좋습니다.

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 소스 DB 인스턴스의 경우 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 'repl\$1user' 사용자에게 모든 데이터베이스에 대한 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다.

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

암호화된 복제를 사용하려면 SSL 연결을 사용하도록 소스 DB 인스턴스를 구성합니다.

`mysql.rds_set_external_source_for_channel`을 직접 호출하여 이 복제 채널을 구성한 후 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)을 직접 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel)을 직접 호출하여 채널에서 복제를 중지하고 복제본에서 채널 구성을 제거할 수 있습니다.

`mysql.rds_set_external_source_for_channel`을 직접 호출하면 Amazon RDS는 채널별 세부 정보 없이 `mysql.rds_history` 테이블에 시간, 사용자 및 `set channel source`의 작업을 기록하고 `mysql.rds_replication_status` 테이블에는 채널 이름과 함께 이들 정보를 기록합니다. 이 정보는 내부 사용 및 모니터링 목적으로만 기록됩니다. 감사 목적으로 전체 프로시저 직접 호출을 기록하려면 애플리케이션의 특정 요구 사항에 따라 감사 로그 또는 일반 로그를 활성화하는 것이 좋습니다.

### 예시
<a name="mysql_rds_set_external_source_for_channel-examples"></a>

RDS for MySQL DB 인스턴스에서 실행할 때 다음 예제는 이 DB 인스턴스에 `channel_1` 이름이 지정된 복제 채널을 구성하여 `sourcedb.example.com` 호스트와 `3306` 포트로 지정된 소스의 데이터를 복제합니다.

```
call mysql.rds_set_external_source_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  0,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_external_source_with_auto_position_for_channel"></a>

RDS for MySQL DB 인스턴스에서 복제 채널을 구성하고 복제 지연 옵션을 설정합니다. 전역 트랜잭션 식별자(GTID)를 기반으로 한 복제입니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 단원을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
  , channel_name
);
```

### 파라미터
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 소스 DB 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
RDS for MySQL 소스 DB 인스턴스에서 사용한 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하세요.

 *replication\$1user\$1name*   
RDS for MySQL 소스 DB 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 소스 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 DB 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

 *channel\$1name*   
복제 채널의 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_external_source_with_auto_position_for_channel` 프로시저를 실행해야 합니다. 이 프로시저는 복제 채널을 생성할 대상 RDS for MySQL DB 인스턴스에서 실행해야 합니다.

`rds_set_external_source_with_auto_position_for_channel`을 실행하기 전에 다중 소스 복제본에 필요한 권한을 가진 소스 DB 인스턴스의 복제 사용자를 구성하세요. 다중 소스 복제본을 소스 DB 인스턴스에 연결하려면 소스 DB 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자의 `replication_user_name` 값과 `replication_user_password` 값을 지정해야 합니다.

**소스 DB 인스턴스에서 복제 사용자를 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 소스 DB 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예입니다.
**중요**  
보안 모범 사례로 다음 예제에 표시된 자리 표시자 값 이외의 암호를 지정하는 것이 좋습니다.

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 소스 DB 인스턴스의 경우 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 'repl\$1user' 사용자에게 모든 데이터베이스에 대한 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다.

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

암호화된 복제를 사용하려면 SSL 연결을 사용하도록 소스 DB 인스턴스를 구성합니다.

`mysql.rds_set_external_source_with_auto_position_for_channel` 직접 호출 전에 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_gtid_purged)를 직접 호출하여 외부 소스의 지정된 GTID 범위로 시스템 변수를 설정합니다.

`mysql.rds_set_external_source_with_auto_position_for_channel`을 직접 호출하여 Amazon RDS DB 인스턴스를 지정된 채널의 읽기 복제본으로 구성한 후, 읽기 복제본에서 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)을 직접 호출하여 해당 채널에서 복제 프로세스를 시작할 수 있습니다.

`mysql.rds_set_external_source_with_auto_position_for_channel`을 직접 호출하여 이 복제 채널을 구성한 후 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)을 직접 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel)을 직접 호출하여 채널에서 복제를 중지하고 복제본에서 채널 구성을 제거할 수 있습니다.

### 예시
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-examples"></a>

MySQL용 RDS DB 인스턴스에서 실행할 때 다음 예제는 이 DB 인스턴스에 `channel_1` 이름이 지정된 복제 채널을 구성하여 `sourcedb.example.com` 호스트 및 `3306` 포트로 지정된 소스에서 데이터를 복제하도록 구성하고 최소 복제 지연 시간을 1시간(3,600초)으로 설정합니다. 즉 소스 RDS for MySQL DB 인스턴스의 변경 사항은 최소 1시간 동안 다중 소스 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_source_with_auto_position_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
<a name="mysql_rds_set_external_source_with_delay_for_channel"></a>

RDS for MySQL DB 인스턴스의 복제 채널을 지정된 복제 지연으로 구성합니다.

**중요**  
이 프로시저를 실행하려면 `autocommit`를 활성화해야 합니다. 활성화하려면 `autocommit` 파라미터를 `1`로 설정합니다. 파라미터 수정에 대한 자세한 정보는 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md) 단원을 참조하십시오.

### 구문
<a name="mysql_rds_set_external_source_with_delay_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_delay_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
  , channel_name
);
```

### 파라미터
<a name="mysql_rds_set_external_source_with_delay_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 소스 DB 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
RDS for MySQL 소스 DB 인스턴스에서 사용한 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH(Secure Shell)에 의해 공개되는 포트 이름을 지정하세요.

 *replication\$1user\$1name*   
RDS for MySQL 소스 DB 인스턴스에서 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 보유한 사용자의 ID입니다. 소스 인스턴스를 사용한 복제에만 사용되는 계정을 제공하는 것이 좋습니다.

 *replication\$1user\$1password*   
`replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *mysql\$1binary\$1log\$1file\$1name*   
복제 정보를 포함하는 소스 DB 인스턴스의 이진 로그 이름입니다.

 *mysql\$1binary\$1log\$1file\$1location*   
복제 시 복제 정보를 읽기 시작할 `mysql_binary_log_file_name` 이진 로그 내 위치입니다.  
소스 데이터베이스 인스턴스의 `SHOW BINARY LOG STATUS`를 실행하여 binlog 파일 이름 및 위치를 확인할 수 있습니다.  
이전 버전의 MySQL에는 `SHOW MASTER STATUS` 대신 `SHOW BINARY LOG STATUS`가 사용되었습니다. 8.4 이전 MySQL 버전을 사용하는 경우 `SHOW MASTER STATUS`를 사용합니다.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`SOURCE_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

 *delay*   
소스 DB 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

 *channel\$1name*   
복제 채널의 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_set_external_source_with_delay_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_external_source_with_delay_for_channel` 프로시저를 실행해야 합니다. 이 프로시저는 복제 채널을 생성할 대상 RDS for MySQL DB 인스턴스에서 실행해야 합니다.

`mysql.rds_set_external_source_with_delay_for_channel`을 실행하기 전에 다중 소스 복제본에 필요한 권한을 가진 소스 DB 인스턴스의 복제 사용자를 구성하세요. 다중 소스 복제본을 소스 DB 인스턴스에 연결하려면 소스 DB 인스턴스에 대해 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 가진 복제 사용자의 `replication_user_name` 값과 `replication_user_password` 값을 지정해야 합니다.

**소스 DB 인스턴스에서 복제 사용자를 구성하려면**

1. 선택한 MySQL 클라이언트를 사용하여 소스 DB 인스턴스에 연결하고 복제에 사용될 사용자 계정을 생성합니다. 다음은 예입니다.
**중요**  
보안 모범 사례로 다음 예제에 표시된 자리 표시자 값 이외의 암호를 지정하는 것이 좋습니다.

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 소스 DB 인스턴스의 경우 복제 사용자에게 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다. 다음 예제에서는 도메인의 'repl\$1user' 사용자에게 모든 데이터베이스에 대한 `REPLICATION CLIENT` 및 `REPLICATION SLAVE` 권한을 부여합니다.

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

암호화된 복제를 사용하려면 SSL 연결을 사용하도록 소스 DB 인스턴스를 구성합니다.

`mysql.rds_set_external_source_with_delay_for_channel`을 직접 호출하여 이 복제 채널을 구성한 후 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)을 직접 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel)을 직접 호출하여 채널에서 복제를 중지하고 복제본에서 채널 구성을 제거할 수 있습니다.

`mysql.rds_set_external_source_with_delay_for_channel`을 직접 호출하면 Amazon RDS는 채널별 세부 정보 없이 `mysql.rds_history` 테이블에 시간, 사용자 및 `set channel source`의 작업을 기록하고 `mysql.rds_replication_status` 테이블에는 채널 이름과 함께 이들 정보를 기록합니다. 이 정보는 내부 사용 및 모니터링 목적으로만 기록됩니다. 감사 목적으로 전체 프로시저 직접 호출을 기록하려면 애플리케이션의 특정 요구 사항에 따라 감사 로그 또는 일반 로그를 활성화하는 것이 좋습니다.

### 예시
<a name="mysql_rds_set_external_source_with_delay_for_channel-examples"></a>

MySQL용 RDS DB 인스턴스에서 실행할 때 다음 예제는 이 DB 인스턴스에 `channel_1` 이름이 지정된 복제 채널을 구성하여 `sourcedb.example.com` 호스트 및 `3306` 포트로 지정된 소스에서 데이터를 복제하도록 구성하고 최소 복제 지연 시간을 1시간(3,600초)으로 설정합니다. 즉 소스 RDS for MySQL DB 인스턴스의 변경 사항은 최소 1시간 동안 다중 소스 복제본에 적용되지 않습니다.

```
call mysql.rds_set_external_source_with_delay_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_source_auto_position_for_channel"></a>

지정된 채널의 복제 모드를 바이너리 로그 파일 위치 또는 글로벌 트랜잭션 식별자(GTID)를 기반으로 설정합니다.

### 구문
<a name="mysql_rds_set_source_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_source_auto_position_for_channel (
auto_position_mode
 , channel_name
);
```

### 파라미터
<a name="mysql_rds_set_source_auto_position_for_channel-parameters"></a>

 *auto\$1position\$1mode*   
로그 파일 위치 복제 또는 GTID를 기반으로 하는 복제를 사용할지 여부를 나타내는 값:  
+ `0` – 바이너리 로그 파일 위치를 기반으로 한 복제 방법을 사용합니다. 기본값은 `0`입니다.
+ `1` – GTID 기반 복제 방법을 사용합니다.

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_set_source_auto_position_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_source_auto_position_for_channel` 프로시저를 실행해야 합니다. 이 프로시저는 지정된 채널에서 복제를 다시 시작하여 지정된 자동 위치 모드를 적용합니다.

### 예시
<a name="mysql_rds_set_source_auto_position_for_channel-examples"></a>

다음 예제에서는 GTID 기반 복제 방법을 사용하도록 channel\$11의 자동 위치 모드를 설정합니다.

```
call mysql.rds_set_source_auto_position_for_channel(1,'channel_1');
```

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
<a name="mysql_rds_set_source_delay_for_channel"></a>

소스 데이터베이스 인스턴스에서 지정된 채널의 다중 소스 복제본으로 복제를 지연할 최소 시간(초)을 설정합니다.

### 구문
<a name="mysql_rds_set_source_delay_for_channel-syntax"></a>

```
CALL mysql.rds_set_source_delay_for_channel(delay, channel_name);
```

### 파라미터
<a name="mysql_rds_set_source_delay_for_channel-parameters"></a>

 *delay*   
소스 DB 인스턴스에서 복제를 지연할 최소 시간(초)입니다.  
이 파라미터에 대한 제한은 1일(86,400초)입니다.

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_set_source_delay_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_set_source_delay_for_channel` 프로시저를 실행해야 합니다. 프로시저를 사용하려면 우선 `mysql.rds_stop_replication_for_channel`을 직접 호출하여 복제를 중지합니다. 그런 다음 이 프로시저를 직접 호출하여 복제 지연 값을 설정합니다. 지연이 설정되면 `mysql.rds_start_replication_for_channel`을 직접 호출하여 복제를 다시 시작합니다.

### 예시
<a name="mysql_rds_set_source_delay_for_channel-examples"></a>

다음 예제에서는 다중 소스 복제본의 `channel_1`에 있는 소스 데이터베이스 인스턴스에서 최소 1시간(3,600초) 동안 지연을 설정합니다.

```
CALL mysql.rds_set_source_delay_for_channel(3600,'channel_1');
```

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
<a name="mysql_rds_skip_repl_error_for_channel"></a>

지정된 채널의 MySQL DB 다중 소스 복제본의 바이너리 로그 이벤트를 건너뛰고 지정된 채널의 복제 오류를 삭제합니다.

### 구문
<a name="mysql_rds_skip_repl_error_for_channel-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error_for_channel(channel_name);
```

### 파라미터
<a name="mysql_rds_skip_repl_error_for_channel-parameters"></a>

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_skip_repl_error_for_channel-usage-notes"></a>

마스터 사용자는 읽기 전용 복제본에서 `mysql.rds_skip_repl_error_for_channel` 프로시저를 실행해야 합니다. `mysql.rds_skip_repl_error`가 읽기 복제본의 오류를 건너뛰는 것과 비슷한 방식으로 이 프로시저를 사용할 수 있습니다. 자세한 내용은 [mysql.rds\$1skip\$1repl\$1error 프로시저 호출](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure) 단원을 참조하십시오.

**참고**  
GTID 기반 복제의 오류를 건너뛰려면 이 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 프로시저를 대신 사용할 것을 권장합니다.

오류가 있는지 여부를 판별하려면 MySQL `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` 명령을 실행합니다. 중대한 복제 오류가 아닌 경우 `mysql.rds_skip_repl_error_for_channel`를 사용하여 오류를 건너뛸 수 있습니다. 오류가 여러 개인 경우 `mysql.rds_skip_repl_error_for_channel`은 지정된 복제 채널의 첫 번째 오류를 삭제한 후 다른 오류가 있음을 경고합니다. `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G`를 사용하여 다음 오류에 대한 적합한 조치를 결정할 수 있습니다. 반환된 값에 대한 자세한 내용은 MySQL 설명서의 [SHOW SLAVE STATUS 문](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)을 참조하세요.

## mysql.rds\$1start\$1replication\$1for\$1channel
<a name="mysql_rds_start_replication_for_channel"></a>

RDS for MySQL DB 인스턴스에서 지정된 채널의 다중 소스 복제본으로의 복제를 시작합니다.

**참고**  
[mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel) 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel) 저장 프로시저를 사용하여 RDS for MySQL DB 인스턴스에서 복제를 시작하고 지정된 바이너리 로그 파일 위치에서 복제를 중지할 수 있습니다.

### 구문
<a name="mysql_rds_start_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_for_channel(channel_name);
```

### 파라미터
<a name="mysql_rds_start_replication_for_channel-parameters"></a>

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_start_replication_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication_for_channel` 프로시저를 실행해야 합니다. 소스 RDS for MySQL DB 인스턴스에서 데이터를 가져온 후 다중 소스 복제본에서 이 명령을 실행하여 지정된 채널에서 복제를 시작합니다.

### 예시
<a name="mysql_rds_start_replication_for_channel-examples"></a>

다음 예제에서는 다중 소스 복제본의 `channel_1`에서 복제를 시작합니다.

```
CALL mysql.rds_start_replication_for_channel('channel_1');
```

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
<a name="mysql_rds_start_replication_until_for_channel"></a>

지정된 채널의 RDS for MySQL DB 인스턴스에서 복제를 시작하고 지정된 바이너리 로그 파일 위치에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_start_replication_until_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_for_channel (
replication_log_file
  , replication_stop_point
  , channel_name
);
```

### 파라미터
<a name="mysql_rds_start_replication_until_for_channel-parameters"></a>

 *replication\$1log\$1file*   
복제 정보를 포함하는 소스 DB 인스턴스의 이진 로그 이름입니다.

 *replication\$1stop\$1point *   
복제를 중지할 `replication_log_file` 바이너리 로그 내 위치입니다.

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_start_replication_until_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication_until_for_channel` 프로시저를 실행해야 합니다. 이 프로시저를 사용하면 복제가 시작되었다가 지정된 binlog 파일 위치에 도달하면 복제가 중지됩니다. 이 프로시저는 `SQL_THREAD` 및 `IO_THREAD`를 모두 중지합니다.

`replication_log_file` 파라미터에 지정된 파일 이름은 소스 DB 인스턴스 binlog 파일 이름과 일치해야 합니다.

`replication_stop_point` 파라미터가 과거에 해당하는 중지 위치를 지정하는 경우 복제가 즉시 중지됩니다.

### 예시
<a name="mysql_rds_start_replication_until_for_channel-examples"></a>

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

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

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
<a name="mysql_rds_start_replication_until_gtid_for_channel"></a>

RDS for MySQL DB 인스턴스에서 지정된 채널에 복제를 시작하고 지정된 전역 트랜잭션 식별자(GTID)에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_start_replication_until_gtid_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid_for_channel(gtid,channel_name);
```

### 파라미터
<a name="mysql_rds_start_replication_until_gtid_for_channel-parameters"></a>

 *gtid*   
GTID 이후 복제를 중지합니다.

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_start_replication_until_gtid_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication_until_gtid_for_channel` 프로시저를 실행해야 합니다. 이 프로시저는 지정된 채널에서 복제를 시작하고 지정된 GTID 값까지 모든 변경 내용을 적용합니다. 그런 다음 채널에서의 복제가 중지됩니다.

`gtid` 파라미터가 복제본으로 이미 실행한 트랜잭션을 지정하는 경우 복제가 즉시 중지됩니다.

이 프로시저를 실행하기 전에 `replica_parallel_workers` 또는 `slave_parallel_workers` 값을 `0`으로 설정하여 멀티스레드 복제를 비활성화해야 합니다.

### 예시
<a name="mysql_rds_start_replication_until_gtid_for_channel-examples"></a>

다음 예제에서는 `channel_1`에서 복제를 시작하고 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23`에 도달할 때까지 변경 사항을 복제합니다.

```
call mysql.rds_start_replication_until_gtid_for_channel('3E11FA47-71CA-11E1-9E33-C80AA9429562:23','channel_1');
```

## mysql.rds\$1stop\$1replication\$1for\$1channel
<a name="mysql_rds_stop_replication_for_channel"></a>

지정된 채널의 MySQL DB 인스턴스에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_stop_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_stop_replication_for_channel(channel_name);
```

### 파라미터
<a name="mysql_rds_stop_replication_for_channel-parameters"></a>

 *channel\$1name*   
다중 소스 복제본의 복제 채널 이름입니다. 각 복제 채널은 특정 호스트 및 포트에서 실행되는 단일 소스 RDS for MySQL DB 인스턴스로부터 바이너리 로그 이벤트를 수신합니다.

### 사용 노트
<a name="mysql_rds_stop_replication_for_channel-usage-notes"></a>

마스터 사용자는 `mysql.rds_stop_replication_for_channel` 프로시저를 실행해야 합니다.

### 예시
<a name="mysql_rds_stop_replication_for_channel-examples"></a>

다음 예시에서는 다중 소스 복제본의 `channel_1`에서 복제를 중지합니다.

```
CALL mysql.rds_stop_replication_for_channel('channel_1');
```

# GTID를 사용한 트랜잭션 복제
<a name="mysql-stored-proc-gtid"></a>

다음 저장 프로시저는 RDS for MySQL에서 전역 트랜잭션 식별자(GTID)를 사용하여 트랜잭션을 복제하는 방법을 제어합니다. RDS for MySQL에서 GTID 기반 복제에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 섹션을 참조하세요.

`caching_sha2_password`로 구성된 복제 사용자로 복제를 관리하기 위해 저장 프로시저를 사용하는 경우, `SOURCE_SSL=1`을 지정하여 TLS를 구성해야 합니다. `caching_sha2_password`는 RDS for MySQL 8.4의 기본 인증 플러그인입니다.

**Topics**
+ [

## mysql.rds\$1skip\$1transaction\$1with\$1gtid
](#mysql_rds_skip_transaction_with_gtid)
+ [

## mysql.rds\$1start\$1replication\$1until\$1gtid
](#mysql_rds_start_replication_until_gtid)

## mysql.rds\$1skip\$1transaction\$1with\$1gtid
<a name="mysql_rds_skip_transaction_with_gtid"></a>

MySQL DB 인스턴스에서 지정된 전역 트랜잭션 식별자(GTID)를 사용하여 트랜잭션 복제를 건너 뜁니다.

특정 GTID 트랜잭션이 문제의 원인으로 알려진 경우 재해 복구를 위해 이 프로시저를 사용할 수 있습니다. 이 저장 프로시저를 사용하여 문제의 트랜잭션을 건너 뛰십시오. 문제의 트랜잭션의 예로는 복제를 비활성화하거나 중요한 데이터를 삭제하거나 DB 인스턴스를 사용할 수 없도록 하는 트랜잭션이 포함됩니다.

### 구문
<a name="mysql_rds_skip_transaction_with_gtid-syntax"></a>

 

```
CALL mysql.rds_skip_transaction_with_gtid (
gtid_to_skip
);
```

### 파라미터
<a name="mysql_rds_skip_transaction_with_gtid-parameters"></a>

 *gtid\$1to\$1skip*   
건너 뛸 복제 트랜잭션의 GTID입니다.

### 사용 노트
<a name="mysql_rds_skip_transaction_with_gtid-usage-notes"></a>

마스터 사용자는 `mysql.rds_skip_transaction_with_gtid` 프로시저를 실행해야 합니다.

이 프로시저는 모든 RDS for MySQL 5.7 버전, 모든 RDS for MySQL 8.0 버전, 모든 RDS for MySQL 8.4 버전에서 지원됩니다.

### 예제
<a name="mysql_rds_skip_transaction_with_gtid-examples"></a>

다음 예에서는 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23`을 사용하여 트랜잭션의 복제를 건너뜁니다.

```
CALL mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');
```

## mysql.rds\$1start\$1replication\$1until\$1gtid
<a name="mysql_rds_start_replication_until_gtid"></a>

RDS for MySQL DB 인스턴스에서 복제를 시작하고 지정된 글로벌 트랜잭션 식별자(GTID) 바로 다음에서 복제를 중지합니다.

### 구문
<a name="mysql_rds_start_replication_until_gtid-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid(gtid);
```

### 파라미터
<a name="mysql_rds_start_replication_until_gtid-parameters"></a>

 *gtid*   
GTID 이후 복제를 중지해야 합니다.

### 사용 노트
<a name="mysql_rds_start_replication_until_gtid-usage-notes"></a>

마스터 사용자는 `mysql.rds_start_replication_until_gtid` 프로시저를 실행해야 합니다.

이 프로시저는 모든 RDS for MySQL 5.7 버전, 모든 RDS for MySQL 8.0 버전, 모든 RDS for MySQL 8.4 버전에서 지원됩니다.

이 프로시저는 지연 복제에서 재해 복구를 위해 사용할 있습니다. 지연된 복제를 구성한 경우 이 프로시저를 사용하여 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드할 수 있습니다. 이 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

다음 저장 프로시저를 사용하여 지연 복제를 구성할 수 있습니다.
+ [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration)
+ [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)
+ [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\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay)

`gtid` 파라미터가 복제본으로 이미 실행한 트랜잭션을 지정하는 경우 복제가 즉시 중지됩니다.

### 예제
<a name="mysql_rds_start_replication_until_gtid-examples"></a>

다음 예제에서는 복제를 시작하고 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23`에 도달할 때까지 변경 사항을 복제합니다.

```
call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');
```

# 쿼리 로그 교체
<a name="mysql-stored-proc-logging"></a>

다음 저장 프로시저는 MySQL 로그를 백업 테이블로 로테이션합니다. 자세한 내용은 [ MySQL 데이터베이스 로그 파일](USER_LogAccess.Concepts.MySQL.md) 단원을 참조하십시오.

**Topics**
+ [

## mysql.rds\$1rotate\$1general\$1log
](#mysql_rds_rotate_general_log)
+ [

## mysql.rds\$1rotate\$1slow\$1log
](#mysql_rds_rotate_slow_log)

## mysql.rds\$1rotate\$1general\$1log
<a name="mysql_rds_rotate_general_log"></a>

`mysql.general_log` 테이블을 백업 테이블로 로테이션합니다.

### 구문
<a name="mysql_rds_rotate_general_log-syntax"></a>

 

```
CALL mysql.rds_rotate_general_log;
```

### 사용 노트
<a name="mysql_rds_rotate_general_log-usage-notes"></a>

`mysql.rds_rotate_general_log` 프로시저를 호출하여 `mysql.general_log` 테이블을 백업 테이블로 로테이션할 수 있습니다. 로그 테이블이 순환되면 현재 로그 테이블은 백업 로그 테이블에 복사되며 현재 로그 테이블의 해당 항목들은 제거됩니다. 백업 로그 테이블이 이미 존재할 경우, 현재 로그 테이블이 백업으로 복사되기 전에 백업 로그 테이블이 삭제됩니다. 필요하다면 백업 로그 테이블을 쿼리할 수 있습니다. `mysql.general_log` 테이블에 대한 백업 로그 테이블 이름은 `mysql.general_log_backup`으로 지정됩니다.

이 절차는 `log_output` 파라미터를 `TABLE`로 설정한 경우에만 실행할 수 있습니다.

## mysql.rds\$1rotate\$1slow\$1log
<a name="mysql_rds_rotate_slow_log"></a>

`mysql.slow_log` 테이블을 백업 테이블로 로테이션합니다.

### 구문
<a name="mysql_rds_rotate_slow_log-syntax"></a>

 

```
CALL mysql.rds_rotate_slow_log;
```

### 사용 노트
<a name="mysql_rds_rotate_slow_log-usage-notes"></a>

`mysql.rds_rotate_slow_log` 프로시저를 호출하여 `mysql.slow_log` 테이블을 백업 테이블로 로테이션할 수 있습니다. 로그 테이블이 순환되면 현재 로그 테이블은 백업 로그 테이블에 복사되며 현재 로그 테이블의 해당 항목들은 제거됩니다. 백업 로그 테이블이 이미 존재할 경우, 현재 로그 테이블이 백업으로 복사되기 전에 백업 로그 테이블이 삭제됩니다.

필요하다면 백업 로그 테이블을 쿼리할 수 있습니다. `mysql.slow_log` 테이블에 대한 백업 로그 테이블 이름은 `mysql.slow_log_backup`으로 지정됩니다.

# 이진수 로그 구성 설정 및 표시
<a name="mysql-stored-proc-configuring"></a>

다음 저장 프로시저는 바이너리 로그 파일 유지에 대한 파라미터와 같은 구성 파라미터를 설정하고 표시합니다.

**Topics**
+ [

## mysql.rds\$1set\$1configuration
](#mysql_rds_set_configuration)
+ [

## mysql.rds\$1show\$1configuration
](#mysql_rds_show_configuration)

## mysql.rds\$1set\$1configuration
<a name="mysql_rds_set_configuration"></a>

바이너리 로그를 보관할 기간(시간) 또는 복제를 지연할 시간(초)을 지정합니다.

### 구문
<a name="mysql_rds_set_configuration-syntax"></a>

 

```
CALL mysql.rds_set_configuration(name,value);
```

### 파라미터
<a name="mysql_rds_set_configuration-parameters"></a>

 *이름*   
설정할 구성 파라미터의 이름입니다.

 *USD 상당*   
구성 파라미터의 값입니다.

### 사용 노트
<a name="mysql_rds_set_configuration-usage-notes"></a>

`mysql.rds_set_configuration` 프로시저는 다음 구성 파라미터를 지원합니다.
+ [binlog retention hours](#mysql_rds_set_configuration-usage-notes.binlog-retention-hours)
+ [소스 지연](#mysql_rds_set_configuration-usage-notes.source-delay)
+ [target delay](#mysql_rds_set_configuration-usage-notes.target-delay)

구성 파라미터는 영구적으로 저장되며 DB 인스턴스 재부팅 또는 장애 조치 이후에도 유지됩니다.

#### binlog retention hours
<a name="mysql_rds_set_configuration-usage-notes.binlog-retention-hours"></a>

`binlog retention hours` 파라미터는 이진 로그 파일을 보관할 기간(시간)을 지정하는 데 사용됩니다. Amazon RDS는 일반적으로 가능한 한 빨리 바이너리 로그를 삭제하지만 RDS 외부의 MySQL 데이터베이스 복제에는 바이너리 로그가 필요할 수 있습니다.

`binlog retention hours`의 기본값은 `NULL`입니다. RDS for MySQL의 경우 `NULL`은 바이너리 로그가 유지되지 않음을 의미합니다(0시간).

DB 인스턴스에 대한 바이너리 로그를 유지할 기간(시간)을 지정하려면 다음 예에 나와 있는 것처럼 `mysql.rds_set_configuration` 저장 프로시저를 사용하여 복제 수행에 충분한 기간을 지정합니다.

`call mysql.rds_set_configuration('binlog retention hours', 24);`

**참고**  
`binlog retention hours`에는 `0` 값을 사용할 수 없습니다.

MySQL DB 인스턴스의 경우 최대 `binlog retention hours` 값은 168(7일)입니다.

보존 기간을 설정한 후, DB 인스턴스 스토리지의 사용량을 모니터링하여 보존된 바이너리 로그가 너무 많은 스토리지를 차지하지 않도록 합니다.

다중 AZ DB 클러스터 배포의 경우 라이터 DB 인스턴스에서만 이진 로그 유지를 구성할 수 있으며, 설정은 모든 리더 DB 인스턴스에 비동기적으로 전파됩니다. DB 클러스터의 이진 로그가 총 로컬 스토리지 공간의 절반을 초과하는 경우 Amazon RDS는 자동으로 오래된 로그를 EBS 볼륨으로 이동합니다. 하지만 최신 로그는 로컬 스토리지에 남아 있으므로 호스트 교체가 필요한 장애가 발생하거나 데이터베이스를 확장 또는 축소하는 경우 손실될 수 있습니다.

#### 소스 지연
<a name="mysql_rds_set_configuration-usage-notes.source-delay"></a>

`source delay` 파라미터를 사용하여 읽기 전용 복제본에서 소스 DB 인스턴스로의 복제를 지연할 시간(초)을 지정합니다. Amazon RDS에서는 일반적으로 변경 사항을 최대한 빨리 복제하지만, 일부 환경에서는 복제를 지연하기를 원할 수 있습니다. 예를 들어, 복제가 지연될 경우 지연된 읽기 전용 복제본을 재해 직전 시간으로 롤포워드할 수 있습니다. 실수로 테이블이 삭제된 경우 지연된 복제를 사용하여 테이블을 빠르게 복구할 수 있습니다. `target delay`의 기본값은 `0`입니다(복제를 지연하지 않음).

이 파라미터를 사용하면 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 실행되고 CHANGE primary TO MASTER\$1DELAY = input value가 적용됩니다. 성공하면 프로시저가 `source delay` 파라미터를 `mysql.rds_configuration` 테이블에 저장합니다.

Amazon RDS에서 소스 DB 인스턴스에 대한 복제를 지연할 시간(초)을 지정하려면 `mysql.rds_set_configuration` 저장 프로시저를 사용하고 복제를 지연할 시간(초)을 지정합니다. 다음 예제에서는 복제를 1시간(3,600초) 이상 지연하도록 지정합니다.

`call mysql.rds_set_configuration('source delay', 3600);`

그러면 프로시저가 `mysql.rds_set_source_delay(3600)`를 실행합니다.

`source delay` 파라미터에 대한 제한은 1일(86,400초)입니다.

#### target delay
<a name="mysql_rds_set_configuration-usage-notes.target-delay"></a>

`target delay` 파라미터를 사용하여 DB 인스턴스와 이 인스턴스에서 생성되는 향후 RDS 관리 읽기 전용 복제본 간의 복제를 지연할 시간(초)을 지정합니다. RDS에서 관리되지 않는 읽기 전용 복제본에서는 이 파라미터가 무시됩니다. Amazon RDS에서는 일반적으로 변경 사항을 최대한 빨리 복제하지만, 일부 환경에서는 복제를 지연하기를 원할 수 있습니다. 예를 들어, 복제가 지연될 경우 지연된 읽기 전용 복제본을 재해 직전 시간으로 롤포워드할 수 있습니다. 실수로 테이블이 삭제된 경우 지연된 복제를 사용하여 테이블을 빠르게 복구할 수 있습니다. `target delay`의 기본값은 `0`입니다(복제를 지연하지 않음).

재해 복구의 경우 이 구성 파라미터를 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 저장 프로시저 또는 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 저장 프로시저와 함께 사용할 수 있습니다. 지연된 읽기 전용 복제본에 대한 변경 사항을 재해 직전 시간으로 롤포워드하려면 이 파라미터를 설정한 상태에서 `mysql.rds_set_configuration` 프로시저를 실행할 수 있습니다. `mysql.rds_start_replication_until` 또는 `mysql.rds_start_replication_until_gtid` 프로시저에서 복제를 중지한 이후에 [읽기 전용 복제본을 독립 DB 인스턴스로 승격](USER_ReadRepl.Promote.md)의 지침에 따라 읽기 전용 복제본을 새 기본 DB 인스턴스가 되도록 승격할 수 있습니다.

`mysql.rds_rds_start_replication_until_gtid` 프로시저를 사용하려면 GTID를 기반으로 한 복제를 활성화해야 합니다. 재해 원인으로 알려진 특정 GTID 기반 트랜잭션을 건너 뛰려면 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 저장 프로시저를 사용할 수 있습니다. GTID 기반 복제 작업에 대한 자세한 내용은 [GTID 기반 복제 사용](mysql-replication-gtid.md) 단원을 참조하십시오.

Amazon RDS에서 읽기 전용 복제본에 대한 복제를 지연할 시간(초)을 지정하려면 `mysql.rds_set_configuration` 저장 프로시저를 사용하고 복제를 지연할 시간(초)을 지정합니다. 다음 예제에서는 복제를 1시간(3,600초) 이상 지연하도록 지정합니다.

`call mysql.rds_set_configuration('target delay', 3600);`

`target delay` 파라미터에 대한 제한은 1일(86,400초)입니다.

## mysql.rds\$1show\$1configuration
<a name="mysql_rds_show_configuration"></a>

바이너리 로그가 유지되는 시간입니다.

### 구문
<a name="mysql_rds_show_configuration-syntax"></a>

 

```
CALL mysql.rds_show_configuration;
```

### 사용 노트
<a name="mysql_rds_show_configuration-usage-notes"></a>

Amazon RDS의 이진수 로그 보관 시간을 확인하려면 `mysql.rds_show_configuration` 저장 프로시저를 사용합니다.

### 예제
<a name="mysql_rds_show_configuration-examples"></a>

다음 예제는 보존 기간을 표시합니다.

```
call mysql.rds_show_configuration;
                name                         value     description
                binlog retention hours       24        binlog retention hours specifies the duration in hours before binary logs are automatically deleted.
```

# InnoDB 캐시 워밍
<a name="mysql-stored-proc-warming"></a>

다음 저장 프로시저는 RDS for MySQL DB 인스턴스에서 InnoDB 버퍼 풀을 저장 또는 로드하거나 로드를 취소합니다. 자세한 내용은 [Amazon RDS의 MySQL용 InnoDB 캐시 워밍](MySQL.Concepts.FeatureSupport.md#MySQL.Concepts.InnoDBCacheWarming) 단원을 참조하십시오.

**Topics**
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now
](#mysql_rds_innodb_buffer_pool_dump_now)
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort
](#mysql_rds_innodb_buffer_pool_load_abort)
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now
](#mysql_rds_innodb_buffer_pool_load_now)

## mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now
<a name="mysql_rds_innodb_buffer_pool_dump_now"></a>

버퍼 풀의 현재 상태를 디스크에 덤프합니다.

### 구문
<a name="mysql_rds_innodb_buffer_pool_dump_now-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_dump_now();
```

### 사용 노트
<a name="mysql_rds_innodb_buffer_pool_dump_now-usage"></a>

마스터 사용자는 `mysql.rds_innodb_buffer_pool_dump_now` 프로시저를 실행해야 합니다.

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort
<a name="mysql_rds_innodb_buffer_pool_load_abort"></a>

진행 중인 저장된 버퍼 풀 상태 로드를 취소합니다.

### 구문
<a name="mysql_rds_innodb_buffer_pool_load_abort-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_load_abort();
```

### 사용 노트
<a name="mysql_rds_innodb_buffer_pool_load_abort-usage"></a>

마스터 사용자는 `mysql.rds_innodb_buffer_pool_load_abort` 프로시저를 실행해야 합니다.

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now
<a name="mysql_rds_innodb_buffer_pool_load_now"></a>

디스크에서 버퍼 풀의 저장된 상태를 디스크에 로드합니다.

### 구문
<a name="mysql_rds_innodb_buffer_pool_load_now-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_load_now();
```

### 사용 노트
<a name="mysql_rds_innodb_buffer_pool_load_now-usage"></a>

마스터 사용자는 `mysql.rds_innodb_buffer_pool_load_now` 프로시저를 실행해야 합니다.