MySQL 복제

MySQL 복제

복제(replication)는 소스(source) 서버의 데이터를 하나 이상의 레플리카(replica) 서버로 복사하는 기능이에요. 기본적으로 비동기(asynchronous) 방식이라 레플리카가 소스의 업데이트를 받기 위해 항상 연결돼 있을 필요는 없어요. 읽기 부하 분산, 장애 대비, 확장 등 다양한 운영 목적으로 쓰입니다.

출처: Replication

복제의 대표적인 용도

복제의 가장 흔한 활용은 스케일아웃(scale-out) 이에요. 여러 레플리카로 로드를 나눠 성능을 높이는 구조인데, 이때 모든 쓰기와 업데이트는 소스 서버에서 일어나야 해요. 반면 읽기는 레플리카 하나 이상에서 수행할 수 있어요. 쓰기는 소스에 집중되어 전용으로 처리되니 쓰기 성능이 좋아지고, 읽기 부하는 레플리카들로 분산되는 거죠.

이 외에도 데이터 백업, 재해 복구, 여러 서버 간 데이터 배포 용도로도 복제를 씁니다.

어떤 방식으로 복제가 일어나나요

MySQL 8.4는 다양한 복제 방법을 지원해요.

  • 전통적인 방식 — 소스의 바이너리 로그(binary log) 이벤트를 복제하고, 로그 파일과 그 안의 위치(position)를 소스·레플리카 간에 맞춰 동기화해요.
  • GTID 기반 방식글로벌 트랜잭션 식별자(global transaction identifier) 를 쓰는 방식이에요. 로그 파일·위치를 직접 다룰 필요가 없어 많은 복제 작업을 훨씬 단순화해요.

GTID 기반 복제는 소스에서 커밋된 모든 트랜잭션이 레플리카에서도 적용되는 한, 소스와 레플리카 사이의 일관성을 보장해 줍니다.

동기화 유형과 포맷

복제는 단방향 비동기 복제가 원래 형태예요. 한 서버가 소스가 되고, 하나 이상의 서버가 레플리카가 되는 구조죠. NDB Cluster의 동기 복제와는 대비돼요. MySQL 8.4에서는 내장된 비동기 복제에 더해 세미동기 복제(semisynchronous replication) 도 지원해요. 세미동기 복제에서는 소스에서 수행되는 커밋이 일정 조건을 만족할 때까지 블로킹되어, 데이터 유실 위험을 줄일 수 있어요.

복제 포맷은 크게 두 가지가 있어요.

  • Statement Based Replication (SBR) — SQL 문장 전체를 복제.
  • Row Based Replication (RBR) — 변경된 행만 복제.
  • 이 둘을 섞은 Mixed Based Replication (MBR) 도 쓸 수 있어요.

복제 설정과 튜닝 요소

복제는 여러 옵션·변수로 제어돼요. 관련 설정을 다루는 절과, 복제 토폴로지에 적용할 수 있는 보안 조치(복제 보안 장)도 별도로 제공됩니다. 복제가 어떤 방식으로 동작하는지, 바이너리 로그의 처리 과정과 백그라운드 스레드, 문장이 어떻게 기록·복제되는지의 세부 규칙은 복제 구현 장에서 설명해요.

더 알아보기

  • InnoDB와 ACID 모델 — 복제로 전파되는 트랜잭션의 신뢰성 원칙
  • 파티셔닝 개요 — 파티셔닝된 테이블과 복제가 함께 쓰일 때의 동작
  • 인덱스로 쿼리 성능 올리기 — 레플리카에서의 조회 성능을 높이는 방법
  • MySQL 최적화 — 복제 서버 성능을 튜닝하는 일반 원리