본문 바로가기

CS/DataBase

(MySQL) Replication

My SQL  Replication이란?

Replication은 해석 그대로 복제를 뜻한다. 2대 이상의 DBMS를 누나 우서 데이터를 저장하는 방식을 의미한다.

  • 최소 구성 : Master, Slaves - Slaves는 Master로부터 업데이트된 데이터를 받기 위해 영구적으로 연결될 필요는 없다.
  • default : asynchronous
Master DBMS : 
웹 서버로부터 CRUD 요청 시 바이너리 로그를 생성하여 Slaves 서버로 전달 

Slaves DBMS : 
Master DBMS로부터 전달받은 바이너리 로그를 데이터로 반영

 

 

My SQL  Replication의 목적

1. 백업

Master 서버에 등록/수정/삭제 가 발생하는 즉시 Slaves 서버에 변경된 데이터를 전달하게 된다. 이 결과 데이터를 백업할 수 있으므로 

Master DBMS에 장애가 생겼을 때 백업해둔 Slaves 서버로 변경하여 사용이 가능하다.

2. 부하분산

트래픽이 발생하여 DB 한대로는 도무지 처리할 수 없을 때 리플리케이션을 사용하면 같은 DB 데이터를 여러 개 만들 수 있기 때문에 트래픽을 분산시킬 수 있다.


Replication 구성 실습

MySQL 설정 파일에 수정

 

bind-address           = 192.168.121.59
server-id              = 1
log_bin                = mysql-bin

 

설정 파일의 위치는 PC 제각각이므로 find로 찾아보길 바란다.
find / -name my.cnf

 

MySQL restart 실행

mysql.server restart

계정 생성 및 권한 부여

1. relica 이름의 계정 생성

CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';

2. the REPLICATION SLAVE privilege을 부여한다.

GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';

계정 생성확인


Slave 서버 설정

bind-address           = 192.168.121.14
server-id              = 2
log_bin                = mysql-bin

다시 재부팅...!


SLAVE의 스레드를 멈추고 MASTER DBMS를 SLAVE로 이관

CHANGE MASTER TO
MASTER_HOST='192.168.121.59',
MASTER_USER='replica',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;

 

SLAVE 재실행 - START SLAVE;


TEST 실행

Master에 테이블을 생성하고 SLAVE에도 반영되어있는지 확인

 

REPLICATEST라는 테이블을 마스터 서버에 생성

CREATE DATABASE REPLICATESTING;

 

SLAVE 서버 해당 테이블 생성 확인!!

'CS > DataBase' 카테고리의 다른 글

(MySQL) MMM, MHA  (0) 2020.04.05
(MySQL) Transaction Isolation Levels  (0) 2020.03.29
(MySQL) Direct I/O  (0) 2020.03.08
(MySQL) Adaptive Hash Index  (0) 2020.03.08
(MySQL) ACID : 트랜잭션을 통한 동시성 제어  (0) 2020.03.08