외부 MySQL -> AWS RDS Replication 설정 방법

안녕하세요. 험블비 입니다. 외부 MySQL의 Replication을 RDS에 설정하고 싶을 때 적용 방법을 공유드립니다.

환경정보

MASTER (Oracle Cloud Instance)

ubuntu 20.04 – mysql 8.0.26

SLAVE (AWS RDS)

AWS RDS – MySQL 8.0.5

[추가예정: AWS RDS MySQL 생성 방법]

Replication 설정 방법

0. Replication을 담당할 MySQL 유저를 Master에 생성해줘야 합니다.

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON . TO 'repl_user'@'mydomain.com';

1. 마스터가 될 mysql DB 읽기 전용 모드로 변경

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

2. Master binlog 정보 확인

mysql> SHOW MASTER STATUS;

* 여기서 File 항목과 Position 항목은 Slave 설정에 필요하니 복사해둡니다.

3. master database RDS로 복사

master가 될 서버의 mysql을 AWS의 RDS로 복사해줍니다.

mysqldump --databases database_name1 database_name2 \
    --single-transaction \
    --compress \
    --order-by-primary \
    -u local_user \
    -plocal_password | mysql \
        --host=RDS_hostname \
        --port=3306 \
        -u RDS_user_name \
        -pRDS_password

* -p옵션과 패스워드 사이에 공백이 있으면 안됩니다.

4. 마스터 읽기 전용 모드 해제

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

5. 복사가 끝나면 RDS에서 Slave 설정을 진행합니다. RDS는 Root 접근이 불가하기에 AWS에서 제공하는 함수를 이용해야 합니다.

# RDS Slave 설정
# 위에 SHOW MASTER STATUS; 실행 결과로 확인한 FILE 항목과 Positon 항목을 각각
# bin-changelog.000031, 107에 대치해줍니다.
CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);

# RDS Slave 복제 실행
CALL mysql.rds_start_replication;

# 만약 무언가 잘못되었거나 replication을 중단하고 싶으면
CALL mysql.rds_stop_replication

6. 정상 적용 확인

SHOW SLAVE STATUS;

이 후 Master에서 항목을 수정/생성등을 해보며 RDS Slave에 정상적으로 반영이 되는지 확인해주면 됩니다.

Master 테스트 테이블 데이터 삽입

Slave(RDS) 테스트 테이블 데이터 적용 확인

참조

  • https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.External.Repl.html
  • https://leveloper.tistory.com/18

layer1

안녕하세요.

Share

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Post comment