반응형
MySQL 복제(Replication)는 하나의 MySQL 서버에서 실행된 변경 내용을
다른 서버로 실시간 또는 지연 동기화하는 기술이다.
대표적으로 Master-Slave 구조가 있으며, 최근에는 GTID 기반 복제나
다중 소스 복제(Multi-source replication) 같은 다양한 형태도 활용된다.

✅ MySQL 복제란?
- 하나의 주 서버(Master)에서 실행된 데이터를
하나 이상의 보조 서버(Slave)로 전달하는 구조 - 주로 읽기 부하 분산, 백업용 서버, 데이터 이중화, 장애 복구(HA) 용도로 활용
- Master는 쓰기 중심, Slave는 읽기 전용으로 운영하는 것이 일반적
예를 들어 주문 시스템에서 Master는 주문 등록을 처리하고,
Slave는 관리자 화면에서 주문 목록을 조회하는 데 사용될 수 있다.
반응형
🔁 복제 구조 기본 흐름
MySQL 복제는 기본적으로 3단계 구조로 작동한다:
- Binary Log 기록 (Master)
- Master 서버는 데이터 변경 내용을 binlog (바이너리 로그)에 기록한다
- 예: INSERT, UPDATE, DELETE 등의 DML
- Relay Log 수신 (Slave)
- Slave는 Master의 binlog를 I/O 쓰레드를 통해 읽어와
로컬에 relay log로 저장한다
- Slave는 Master의 binlog를 I/O 쓰레드를 통해 읽어와
- 실행 반영 (Slave)
- SQL 쓰레드가 relay log를 읽고 자신의 DB에 동일하게 실행한다
- 이로써 Slave가 Master의 상태를 따라가게 된다
🧩 복제 구성 요소 정리
| 구성 요소 | 설명 |
| binlog | Master의 데이터 변경 이력을 기록하는 로그 파일 |
| relay log | Slave가 Master로부터 받아온 binlog 복사본 |
| I/O thread | Slave에서 Master의 binlog를 받아오는 역할 |
| SQL thread | relay log를 읽어 실제 쿼리를 수행하는 역할 |
| server_id | 각 서버의 고유 ID (복제 설정 시 필수) |
반응형
🔍 복제 방식 종류
1️⃣ 비GTID 기반 복제 (전통적 방식)
- MASTER_LOG_FILE + MASTER_LOG_POS 값을 기준으로 복제 위치 추적
- 설정이 복잡하고, 장애 발생 시 복구 과정이 번거로움
2️⃣ GTID 기반 복제
- Global Transaction ID로 각 트랜잭션을 고유하게 식별
- 복제 위치 관리가 자동화되며, 장애 복구가 훨씬 쉬움
- MySQL 5.6 이상 권장 방식
두 방식의 차이는 다음 글에서 자세히 다룰 예정이야.
🧠 MySQL 복제를 사용하는 이유
- 읽기 트래픽 분산: 다수의 읽기 쿼리를 Slave로 분산시켜 성능 향상
- 백업 전용 서버 확보: Slave에서 백업 작업 수행 → Master 성능 저하 방지
- 고가용성(HA) 구성: Master 장애 발생 시, Slave를 즉시 승격해 다운타임 최소화
- 보고서/통계 쿼리 분리: 무거운 분석용 쿼리를 Slave에서만 실행
⚠️ 주의할 점
- 복제는 완전한 동기화 구조가 아니다 → 데이터 지연 가능
- Master → Slave 간 통신이 끊기면 복제가 중단될 수 있음
- Slave는 기본적으로 쓰기 불가(읽기 전용)로 구성해야 함
- binlog_format 설정에 따라 복제 안정성이 달라질 수 있음 (ROW 권장)
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/replication-howto.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (고가용성1️⃣) MySQL 고가용성 개념과 클러스터링 구조 이해하기 (3) | 2025.07.17 |
|---|---|
| [MySQL] (복제구조4️⃣) 복제 환경에서 자주 발생하는 문제와 해결법 (2) | 2025.07.16 |
| [MySQL] (복제구조3️⃣) GTID 기반 복제 완전 이해하기 (0) | 2025.07.16 |
| [MySQL] (복제구조2️⃣) Master-Slave 복제 설정 실습 가이드 (0) | 2025.07.16 |
| [MySQL] (보안설정5️⃣) 실무에서 자주 놓치는 보안 설정 체크리스트 (0) | 2025.07.16 |
| [MySQL] (보안설정4️⃣) SSL 인증서 적용하기: OpenSSL 기반 실습 가이드 (1) | 2025.07.16 |
| [MySQL] (보안설정3️⃣) 데이터 in transit 암호화: 네트워크 구간 보안 설정법 (0) | 2025.07.16 |
| [MySQL] (보안설정2️⃣) 데이터 at rest 암호화 설정법: 테이블·디스크 암호화 실무 가이드 (0) | 2025.07.16 |