본문 바로가기
공부/프로그래밍

[aws] DMS(Database Migration Service) 이용시 주의사항

by demonic_ 2019. 9. 24.
반응형

작업 설정을 기본으로 설정하면 스키마가 있음에도 테이블을 drop -> create 한다. 관련 설정은 작업 설정 안에 '대상 테이블 준비모드' 에서 수정할 수 있다. 이 모드는 총 3개가 있는데 다음과 같다.

 

 

 

1) 아무것도 안함 => 테이블이 존재하면 추가 DDL을 실행하지 않고, 없으면 생성

2) 대상에서 테이블 삭제 => 테이블을 드랍하고 새로 테이블을 만듬

3) 자르기 => 테이블과 메타데이터를 그대로 두지만, 거기에서 데이터를 제거합니다.

 

만약 테이블을 drop 하고 생성하는걸 선택하면 반드시 인덱스를 재설정 해줘야 한다. DMS는 테이블을 생성하고 키를 등록하는 것까지는 해주는데 추가 인덱스를 등록해주지 않는다. 그래서 성능에 영향이 있는 인덱스는 반드시 새로 설정해주거나, 아니면 위의 설정중에 1번이나 3번만 쓰는게 좋다.

 

3번 자르기를 사용할 경우 truncate 명령어를 실행한다. 그런데 만약 외래키가 걸려있으면 명령어 실행에 실패하게 되고 DMS 작업이 실패가 된다. 여기서 한가지 버그가 있는데, 실제로 작업은 실행중 이라 뜨지만 진행율이 올라가지 않는다. 상세보기를 보면 혹은 테이블 상태가 table error 로 에러가 나는 경우가 있거나

 

 

또는 CloudWatch 의 로그중 다음과 같은 에러가 발생해 있다.

2019-09-22T03:13:11 [TASK_MANAGER ]E: Error 'Access denied; you need (at least one of) the REPLICATION SLAVE privilege(s) for this operation' reading binlog events; Error reading binary log.; Error executing source loop; Stream component failed at subtask 0, component st_0_ADDXGHVE7KVVXY7EVVB3GUUVY4 ; Stream component 'st_0_ADDXGHVE7KVVXY7EVVB3GUUVY4' terminated [1020403] (replicationtask.c:2680)

위와같은 에러가 발생한 이유는 권한이 없어서거나, 테이블을 truncate 하거나 삭제해서 새로 만들어야 하는데 외래키가 걸려 있어서 못하는 경우가 있기 때문이다. 그래서 각각의 설정을 아래 정리해둔다.

 

 

 

1. 권한설정

- REPLICATINO SLAVE 권한이 반드시 필요

 

권한 추가하는 방법

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [id]@'localhost';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [id]@'%';
flush privileges;

 

 

 

2. 외래키 해제

문서를 보면 DMS 이용 시 외래키를 해제하는 것을 추천

https://docs.aws.amazon.com/ko_kr/dms/latest/sbs/CHAP_SQLServer2Aurora.Steps.CreateSourceTargetEndpoints.html

 

6단계: AWS DMS 원본 및 대상 엔드포인트 생성 - AWS Database Migration Service

6단계: AWS DMS 원본 및 대상 엔드포인트 생성 복제 인스턴스를 생성 중인 동안 AWS Management 콘솔을 사용하여 원본 및 대상 데이터베이스 엔드포인트를 지정할 수 있습니다. 하지만 복제 인스턴스가 연결에 사용되므로 복제 인스턴스가 생성된 후에만 연결을 테스트할 수 있습니다. 콘솔을 사용하여 원본 또는 대상 데이터베이스 엔드포인트를 지정하려면 AWS DMS 콘솔에서 원본 SQL Server 데이터베이스와 대상 Aurora MySQL 데이터베

docs.aws.amazon.com

 

- 엔드포인트에 옵션 추가

autocommit=1 은 추가하지 않아도 된다.

initstmt=SET FOREIGN_KEY_CHECKS=0, autocommit=1

 

끝.

반응형

댓글