What
Replication - 이중화
- 복제, 복사 의 의미로, 데이터베이스의 데이터 저장과 백업하는 방법이다.
Master - Slave 구조
[대표적]
- Master는 등록,수정,삭제 처럼 데이터의 변화를 주는 작업에 사용한다.
- Slave는 오직 읽기에 주는 작업에 사용한다.
Replication 메카니즘

- 클라이언트에서 commit을 수행한다.
- 접속스레드는 스토리지 엔진에게 해당 트랜잭션에 대한 Prepare(Commit 준비)를 수행한다.
- 바이너리로그에 기록한다.
- 마스터 스레드는 시간에 구애받지 않고(비동기적으로) Binary Log를 읽어서 Slave로 전송한다.
- 슬레이브의 I/O 스레드는 마스터 스레드로부터 수신한 변경 데이터를 릴레이 로그에 기록한다.
- 슬레이브 SQL 스레드는 릴레이 로그에 기록된 변경 데이터를 읽어서 스토리지 엔진에 적용한다.
>> Replication 3번 과정에서는 설정에 따라 구성 방식에 따라 차이가 있다.
대표적으로
Async
(default) , Semi-Sync
가 있다.- Async : 스토리지 엔진에 먼저 commit을 수행 후 바이너리 로그에 기록한다.
- Semi-Sync : 바이너리 로그에 기록 후 스토리지 엔진에 커밋을 한다.
mysql 은 기본적으로 Async 방식을 사용하고 있다.
Replication 구성방법
- Slave 는 또 다른 MySQL 서버의 Master 가 될 수 있다.
- 하나의 Master 가 가질 수 있는 Slave 는 다수일 수 있다. (다단 구성 가능)
- 두 개의 MySQL 서버가 서로의 Master 또는 Slave 가 될 수 있다.
- 하나의 Slave 가 Multi Master 를 가질 수 있다. (N:1 - MySQL 5.7 이상)

단 Dual Master의 경우 양방향으로 데이터의 변경이 가능하고 서로 복제가 가능하지만, 비동기 복제 과정에서 데이터의 부정합이 발생할 가능성은 여전히 존재함을 주의하자.
Why
- 데이터베이스 인스턴스 또한 클라이언트(애플리케이션) 상대로 TCP 통신을 하고 있으므로, 부하분산을 위해 필요한 아키텍처 구성 전략이다.
- 기본적으로 데이터의 상태를 변경하기 보다는 보통 READ가 부하 분산에 큰 영향이 대부분이다.