외부 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