-
MySQL Replication
MySQL Replication은 Master & Slave 구성하여 Master DB의 변경된 데이터를 바이너리 로그로 생성하여 Slave 서버로 전달하여 Slave 서버에서는 바이너리 로그를 데이터로 반영 합니다.
Master 1 : n Slave 구성이 가능 하며 설정 전에 당연히 MySQL 포트(기본 3306)를 오픈 시켜두어야 합니다.
만약 MySQL 설치가 안되어 있다면 아래 링크를 참고 해주세요.
MySQL 설치 : https://nirsa.tistory.com/124?category=870931
-
Master DB 설정
아래와 같이 /etc/my.cnf 기본 설정을 진행 후 mysqld를 재시작 해줍니다.
vi /etc/my.cnf
# 저는 가장 아래 부분에 추가 하였습니다.
server-id=1
log-bin=mysql-bin
:wq
systemctl restart mysqld
> 프롬포트는 MySQL 진입창이니 참고 해주시고, Replication을 설정하고 데이터를 백업하는 동안 MasterDB에 데이터가 추가될 경우 Master DB와 Slave DB의 데이터가 가지고 있는 데이터가 달라질 수 있으니 설정 완료시까지 LOCK을 해주어야 합니다.
mysql -u root -p
# 동기화 과정에서 사용될 계정을 생성 합니다.
> GRANT REPLICATION SLAVE ON *.* TO '[ID]'@'[MySQL2의 IP주소]' IDENTIFIED BY '[password]';
# 계정 확인
> select * from mysql.user where user='[ID]'\G;
## 기존 데이터 백업
# 테이블 Lock 되어있는 동안에는 사용이 불가능 합니다. Replication 설정 완료 후 UNLOCK 예정 입니다.
mysql -u root -p
> FLUSH TABLES WITH READ LOCK;
> quit
mysqldump -u root -p --all-databases > [생성할 파일명]
이후 USB를 사용하던 scp를 사용하던 MasterDB에 생성한 백업 파일을 Slave로 이동해줍니다. 저는 scp를 이용 했습니다.
scp [데이터 백업 파일명] [계정]@[SlaveDB서버 IP]:[경로]
# ex) spc dump.db root@192.168.0.100:/root/
-
Slave DB 설정
마찬가지로 /etc/my.cnf 설정을 해주되 server-id는 서버를 식별하기 위한 번호이기 때문에 Master 서버와 겹쳐서는 안됩니다.
vi /etc/my.cnf
# 저는 가장 아래 부분에 추가 하였습니다.
# server-id는 서버를 식별하기 위한 번호이기 때문에 Master 서버와 겹쳐서는 안됩니다.
server-id=2
log-bin=mysql-bin
:wq
systemctl restart mysqld
이후 아래 명령어를 입력해 데이터 백업 파일을 Slave DB에 옮깁니다.
mysql -u root -p < dump.db
Master DB의 로그 번호와 포지션 번호는 아래와 같이 Master DB에서 show master status; 를 입력하여 확인할 수 있습니다.
mysql -u root -p
> change master to
> master_host='[마스터 IP]',
> master_user='[Master DB에 생성한 계정명]',
> master_password='[Master DB에 생성한 계정의 패스워드]',
> master_log_file='mysql-bin.[마스터의 로그 번호]',
> master_log_pos=[마스터의 포지션 번호];
> start slave;
-
마무리
이제 모든 설정이 끝낫으니 Master DB 서버의 LOCK을 해제 해줍니다.
## Master DB
mysql -u root -p
UNLOCK TABLES;
이후 Master DB에 테스트 테이블 설정 후 insert 해서 Slave DB로 잘 넘어가지는 확인하면 됩니다.
'Database > MySQL' 카테고리의 다른 글
[MySQL 8.0] MySQL binlog 삭제 및 기간 설정 (remove binlog mysql 8) (0) | 2021.07.16 |
---|---|
[MySQL] MySQL Slow Query Log 설정 방법 (1) | 2020.05.22 |
[MySQL] CentOS 7 MySQL 설치 (0) | 2020.02.10 |
[MySQL] 패스워드 노출 경고 (Mysql 5.6 Warning: Using a password on the command line interface can be insecure.) (0) | 2020.02.10 |
[MySQL] Workbench 문법 에러 (Error Code: 1064. Syntax error near 'VISIBLE' 또는 'INVISIBLE') (0) | 2020.02.04 |