Database/MySQL

[MySQL] MySQL 데이터 백업 단방향 이중화 (Replication Master & Slave)

Nirsa 2020. 2. 21. 11:22
반응형

 

  • 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로 잘 넘어가지는 확인하면 됩니다.

 

반응형