서버 준비가 끝났으면 우선 마스터 서버 슬레이브 서버로 디비 백업 파일 복사과 복제 구성에 필요한 22, 3306 포트를 오픈해야 합니다.
오픈 할 때 규칙은 마스터 서버와 슬레이브 서버의 공통 ACG에 사설 IP 대역 전체를 지정할 수도 있고, 슬레이브 서버 전용 ACG에 마스터 서버 IP만 등록하는 방법도 있습니다.
#master1 계정 생성.
mysql> create user '리플리케이션 계정명'@'%' identified by '패스워드';
mysql> grant replication slave,replication client on *.* to '리플리케이션 계정명'@'%';
mysql> flush privileges;
#master2 계정 생성.
mysql> create user '리플리케이션 계정명'@'%' identified by '패스워드';
mysql> grant replication slave,replication client on *.* to '리플리케이션 계정명'@'%';
mysql> flush privileges;
리플리케이션 채널을 설정하는 쿼리문은 다음과 같습니다.
채널 설정 구문은 MySQL 버전별로 다르고, 특히 8.0.23 버전부터는 완전히 달라지므로 버전에 맞게 사용하시면 됩니다.
# MySQL 5.7
mysql> CHANGE MASTER TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL '채널 이름';
# MySQL 8.0 ~ 8.0.22
mysql> CHANGE MASTER TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', GET_MASTER_PUBLIC_KEY=1, MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL '채널 이름';
# MySQL 8.0.23 이후 버전
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='마스터IP', SOURCE_PORT=포트번호, SOURCE_USER='생성한 리플리케이션 계정명', SOURCE_PASSWORD='패스워드', GET_SOURCE_PUBLIC_KEY=1, SOURCE_LOG_FILE='위에서 확인된 File명', SOURCE_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL 'ch_testdb1';
여기에 필요한 정보 중에서 [MASTER_LOG_FILE(SOURCE_LOG_FILE)]과 [MASTER_LOG_POS(SOURCE_LOG_POS)]은 위쪽에서 확인한 Master DB들의 정보에 나타났던 것으로 정리하면 다음과 같습니다.
#MySQL 5.7 기준
mysql> start slave for channel 'ch_testdb1';
mysql> start slave for channel 'ch_testdb2';
mysql> show slave status for channel 'ch_testdb1'\G
mysql> show slave status for channel 'ch_testdb2'\G
#MySQL 8 기준
mysql> start replica for channel 'ch_testdb1';
mysql> start replica for channel 'ch_testdb2';
mysql> show replica status for channel 'ch_testdb1'\G
mysql> show replica status for channel 'ch_testdb2'\G
Master1
상태 확인에서는 [Slave_IO_State], [Slave_IO_Running], [Slave_SQL_Running] 항목들이 아래와 같이 되어 있으면 정상입니다.
Master2
상태 확인에서는 [Slave_IO_State], [Slave_IO_Running], [Slave_SQL_Running] 항목들이 아래와 같이 되어 있으면 정상입니다.
CHANGE MASTER TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL '채널 이름';
채널 시작
START SLAVE FOR CHANNEL "채널이름";
채널 중지
STOP SLAVE FOR CHANNEL "채널이름";
채널 상태 확인
SHOW SLAVE STATUS FOR CHANNEL "채널이름";
채널 정보 삭제
RESET SLAVE ALL FOR CHANNEL "채널이름";
MySQL 5.7
리플리케이션 명령어
채널 설정
CHANGE MASTER TO MASTER_HOST='마스터IP', MASTER_PORT=포트번호, MASTER_USER='생성한 리플리케이션 계정명', MASTER_PASSWORD='패스워드', GET_Master_PUBLIC_KEY=1, MASTER_LOG_FILE='위에서 확인된 File명', MASTER_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL '채널 이름';
채널 시작
START SLAVE FOR CHANNEL "채널이름";
채널 중지
STOP SLAVE FOR CHANNEL "채널이름";
채널 상태 확인
SHOW SLAVE STATUS FOR CHANNEL "채널이름";
채널 정보 삭제
RESET SLAVE ALL FOR CHANNEL "채널이름";
MySQL 8.0
리플리케이션 명령어
채널 설정
CHANGE REPLICATION SOURCE TO SOURCE_HOST='마스터IP', SOURCE_PORT=포트번호, SOURCE_USER='생성한 리플리케이션 계정명', SOURCE_PASSWORD='패스워드', GET_SOURCE_PUBLIC_KEY=1, SOURCE_LOG_FILE='위에서 확인된 File명', SOURCE_LOG_POS=위에서 확인된 Position 번호 FOR CHANNEL 'ch_testdb1';