[AWS][DMS] MySQL to MySQL 복제 및 CDC 기능 이용하기

■ MySQL to MySQL 복제방법

MySQL을 소스로 사용하여 MySQL 타겟으로 복제를 진행하는 방법을 알아봅니다.

이 방법은

1. On-premise에서 AWS RDS로 복제하거나

2. AWS RDS에서 AWS RDS로 복제하거나

3. AWS RDS에서 On-premise로 복제하는 방식에 사용됩니다.

 

계정 및 권한 설정

1. 복제 유저.

개인적으로 권장사항은 사용할수만 있다면 관라자 권한, 즉 On-premise에서는 root, RSD에서는 Master username 권하고 싶습니다.

이 유저를 이용하면 최고관리자의 권한이기 때문에 모든 기능이 가능하며 별도 권한 설정도 필요없습니다.

하지만 내부의 보안 정책상 관리자 권한은 사용할 수 없고 별도의 계정으로 생성을 하고 그 유저를 이용해서 복제를 해야 한다면 몇가지 설정이 필요합니다. 소스, 타겟에 몇가지 권한이 필요하며 DBMS 환경설정도 필요합니다.

 

2. 필요 권한.

소스 RDS : REPLICATION CLIENT,  REPLICATION SLAVE, SUPER

타겟 RDS : 

CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON <schema>.* TO 
'<user acct>'@'%';
GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';

 

접속 파라미터

타겟 RDS에 접속 파라미터 셋팅.

initstmt=SET FOREIGN_KEY_CHECKS=0

이렇게 하면 일시적으로 참조제약을 비활성화 시켜 로드 속도를 향상시킵니다.

■ CDC 기능 사용시 확인할 사항

기본적으로 DMS는 DDL(CREATE, DROP)과 DML(INSERT, UPDATE, DELETE)을 지원합니다. 즉 소스에서 테이블을 만들면 타겟에서 테이블을 만들고 특정 테이블에 DML이 발생하면 타겟또한 똑같이 반영됩니다. 하지만 몇몇 DDL은 지원이 되지 않습니다. 다음의 리스트를 참고하여 지원되는 사항과 지원되지 않는 사항을 확인합니다.

 

▶︎ 소스 RDS

1. Amazon RDS MySQL 5.5 이하에서는 변경 데이터 캡처 (CDC)가 지원되지 않습니다. Amazon RDS MySQL의 경우 버전 5.6 또는 5.7을 사용하여 CDC를 활성화해야합니다. CDC는 자체 관리 형 MySQL 5.5 소스에 대해 지원됩니다.
2. DDL (데이터 정의 언어) 문 DROP TABLE 및 RENAME TABLE은 지원되지 않습니다. 또한 파티션을 나눈 테이블에 대한 모든 DDL 문이 지원되지 않습니다.
3. 소스의 파티션을 나눈 테이블의 경우 대상 테이블 준비 모드를 대상에 테이블 삭제로 설정하면 AWS DMS는 MySQL 대상에 파티션이없는 단순 테이블을 생성합니다. 분할 된 테이블을 대상의 분할 된 테이블로 마이그레이션하려면 대상 MySQL 데이터베이스에서 분할 된 테이블을 미리 만듭니다.
4. ALTER TABLEtable_name ADD COLUMN column_name 문을 사용하여 시작 부분 (FIRST) 또는 테이블 중간 (AFTER)에 열을 추가하는 것은 지원되지 않습니다. 열은 항상 테이블 끝에 추가됩니다.
5. 테이블 이름에 대문자와 소문자가 포함되어 있고 소스 엔진이 대소 문자를 구분하지 않는 파일 이름으로 운영 체제에서 호스팅되는 경우 CDC가 지원되지 않습니다. 예를 들어 HFS +를 사용하는 Windows 또는 OS X가 있습니다.
6. 열의 AUTO_INCREMENT 속성은 대상 데이터베이스 열로 마이그레이션되지 않습니다.
7. 바이너리 로그가 표준 블록 스토리지에 저장되지 않은 경우 변경 사항 캡처는 지원되지 않습니다. 예를 들어 이진 로그가 Amazon S3에 저장된 경우 CDC가 작동하지 않습니다.
8. AWS DMS는 기본적으로 InnoDB 스토리지 엔진을 사용하여 대상 테이블을 생성합니다. InnoDB 이외의 스토리지 엔진을 사용해야하는 경우 수동으로 테이블을 생성하고 do nothing 모드를 사용하여 테이블로 마이그레이션해야합니다.
9. Aurora MySQL 읽기 전용 복제본을 AWS DMS의 소스로 사용할 수 없습니다.
10. 전체로드 중에 MySQL 호환 소스가 중지되면 AWS DMS 작업이 오류와 함께 중지되지 않습니다. 태스크가 성공적으로 종료되지만 대상이 소스와 동기화되지 않을 수 있습니다. 이 경우 작업을 다시 시작하거나 영향을받는 테이블을 다시로드하십시오.
11. 열 값의 일부에 생성 된 인덱스는 마이그레이션되지 않습니다. 예를 들어 CREATE INDEX first_ten_chars ON customer (name (10)) 인덱스는 대상에 생성되지 않습니다.
12. 경우에 따라 작업이 LOB를 복제하지 않도록 구성됩니다 (작업 설정에서 "SupportLobs"가 false이거나 작업 콘솔에서 LOB 열을 포함하지 않음이 선택됨). 이러한 경우 AWS DMS는 MEDIUMBLOB, LONGBLOB, MEDIUMTEXT 및 LONGTEXT 열을 대상으로 마이그레이션하지 않습니다.
13. BLOB, TINYBLOB, TEXT 및 TINYTEXT 열은 영향을받지 않으며 대상으로 마이그레이션됩니다.
14. 임시 데이터 테이블 또는 시스템 버전 테이블은 MariaDB 소스 및 대상 데이터베이스에서 지원되지 않습니다.

 

▶︎ 타겟 RDS

1. 데이터 정의 언어 (DDL) 문 TRUNCATE PARTITION, DROP TABLE 및 RENAME TABLE.
2. ALTER TABLE table_name ADD COLUMN column_name 문을 사용하여 테이블의 시작 또는 중간에 열을 추가합니다.
3. 소스 테이블의 LOB 열만 업데이트되면 AWS DMS는 해당 대상 열을 업데이트하지 않습니다. 대상 LOB는 동일한 트랜잭션에서 하나 이상의 다른 열이 업데이트 된 경우에만 업데이트됩니다.
4. 전체로드 작업에서 MySQL 호환 대상에 데이터를로드 할 때 AWS DMS는 작업 로그에 중복 키 오류를보고하지 않습니다.
5. 열의 값을 기존 값으로 업데이트하면 MySQL 호환 데이터베이스는 영향을받는 행 0 개를 반환합니다. 이 동작은 기술적으로 오류가 아니지만 다른 데이터베이스 엔진에서 상황을 처리하는 방식과 다릅니다. 예를 들어, Oracle은 한 행의 업데이트를 수행합니다. MySQL 호환 데이터베이스의 경우 AWS DMS는 awsdms_apply_exceptions 제어 테이블에 항목을 생성하고 다음 경고를 기록합니다.
6. Aurora Serverless는 MySQL 버전 5.6과 호환되는 Amazon Aurora 버전 1의 대상으로 사용할 수 있습니다. Aurora Serverless는 MySQL 버전 5.7과 호환되는 Amazon Aurora 버전 2의 대상으로 사용할 수 있습니다.

 

필수 활성화 파라미터

소스 RDS에 설정합니다.

파라미터 Value
server_id 이 파라미터 값을 1 이상의 값으로 설정합니다.
log-bin 다음과 같은 바이너리 로그 파일의 경로를 설정합니다. log-bin=E:\MySql_Logs\BinLog. 파일 확장명을 포함하지 마십시오.
binlog_format 이 파라미터를 ROW로 설정합니다.
expire_logs_days 이 파라미터 값을 1 이상의 값으로 설정합니다. 디스크 공간의 과사용을 방지하려면, 기본값 0을 사용하지 않는 것이 좋습니다.
binlog_checksum 이 파라미터를 NONE로 설정합니다.
binlog_row_image 이 파라미터를 FULL로 설정합니다.
log_slave_updates 원본으로 MySQL 또는 MariaDB 읽기 전용 복제본을 사용하고 있는 경우 이 파라미터를 TRUE로 설정합니다.

 

태스크 생성

작업 태스크 생성 방법은 다음 페이지를 참고합니다.

https://myinfrabox.tistory.com/104?category=840480

 

■ 참고 URL

소스 설정

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MySQL.html

 

Using a MySQL-compatible database as a source for AWS DMS - AWS Database Migration Service

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다. Using a MySQL-compatible database as a source for AWS DMS AWS Database Migration Service를 ��

docs.aws.amazon.com

타겟 설정

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Target.MySQL.html

 

Using a MySQL-compatible database as a target for AWS Database Migration Service - AWS Database Migration Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

Designed by JB FACTORY