1. MySQL 이중화란 무엇인가?

MySQL 이중화 = Replication

  • Primary(Master) : 쓰기(INSERT/UPDATE/DELETE)
  • Replica(Slave) : 읽기(SELECT), 백업, 장애 대비
  • Binary Log(binlog) 기반으로 데이터 변경사항 전달

핵심 포인트

  • 고가용성(HA) ≠ 자동 장애조치
  • 부하 분산, 데이터 보호, 읽기 확장

2. MySQL 이중화 기본 구조

구조 요약

[ Client ]
    |
    v
[ Primary ]
  - binlog 기록
    |
    v
[ Replica ]
  - relay log
  - read only

3. 이중화 방식 종류

① Single Primary – Replica (가장 기본)

  • 실습용 / 교육용 최적
  • 대부분의 회사에서 기본으로 사용

② Primary – Multiple Replicas

  • 읽기 부하 분산
  • 리포트/백업 전용 Replica 분리

③ Dual Primary (Master–Master)

  • 주의 필요
  • 충돌 관리 필요 (auto_increment_offset)
  • 실무에서는 제한적으로 사용

4. 실습 환경 구성 (강의 추천)

VM 구성 예시

서버역할IP
mysql1Primary192.168.80.110
mysql2Replica192.168.80.120
  • OS: Ubuntu 22.04
  • MySQL 8.0
  • 포트: 3306

5. Primary 서버 설정 (실습)

① MySQL 설정 수정

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
sudo systemctl restart mysql

② Replication 전용 계정 생성

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

③ 현재 binlog 위치 확인 ⭐

SHOW MASTER STATUS;

출력 예시:

File: mysql-bin.000001
Position: 157
  • 이 값이 Replica 설정에 필요

6. Replica 서버 설정 (실습)

① MySQL 설정

[mysqld]
server-id=2
relay-log=relay-bin
read_only=ON
sudo systemctl restart mysql

② Replication 연결 설정

CHANGE MASTER TO
  MASTER_HOST='192.168.80.110',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl1234',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=857;
START REPLICA;

③ 상태 확인 (중요 ⭐)

SHOW REPLICA STATUS\\G

아래 두 값이 Yes여야 정상

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

7. 동작 검증 실습

Primary에서 데이터 생성

CREATE DATABASE repl_test;
USE repl_test;
 
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50)
);
 
INSERT INTO users (name) VALUES ('Alice'), ('Bob');

Replica에서 확인

USE repl_test;
SELECT * FROM users;
  • 자동으로 데이터 동기화됨

8. 장애 상황 시나리오

❗ Primary 장애 발생 시

  • Replica는 자동 승격 안 됨
  • 수동 조치 필요 : 쓰기 가능한 상태로 변경 후 REPLICA 동작을 멈추고 Primary 설정을 해야함.
STOP SLAVE;
SET GLOBAL read_only = OFF;
  • 이게 MySQL Replication의 한계

  • REPLICA 동작 중지 및 REPLICA 설정 초기화

REPLICA STOP;
RESET REPLICA ALL;

9. 실무에서는 이렇게 확장된다

실무 구성

Client
  |
[ HAProxy ]
  ├── Write → Primary
  └── Read  → Replicas