작업 설정을 기본으로 설정하면 스키마가 있음에도 테이블을 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 이용 시 외래키를 해제하는 것을 추천
- 엔드포인트에 옵션 추가
autocommit=1 은 추가하지 않아도 된다.
initstmt=SET FOREIGN_KEY_CHECKS=0, autocommit=1
끝.
'공부 > 프로그래밍' 카테고리의 다른 글
[Springboot] spring bean과 싱글톤(singleton) (0) | 2019.10.01 |
---|---|
[jenkins] gitlab 과 jenkins webhook 으로 자동빌드 연결 (2) | 2019.09.25 |
[gradle] build 실패(No cached version of available for offline mode) (0) | 2019.08.27 |
[jenkins] Execute Shell 에서 프로세스 이름으로 프로세스 kill 하기 (0) | 2019.08.22 |
[spring] @Transactional 작동 안할때 확인해봐야 할 것 (4) | 2019.08.16 |
댓글