본문 바로가기

개발자 강화/백엔드

[매일메일] DB Replication이란? (BE.250129)

DB Replication

데이터베이스 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술

대규모 어플리케이션 환경에서 데이터의 지속적인 가용성과 신뢰성이 매우 중요함

원본(Source) 서버와 복제(Replica) 서버 간의 데이터 동기화는 필수임

 

바이너리 로그(Binary log)를 저장하는 방식은?

Replication 매커니즘:

Source 서버에서 발생하는 모든 데이터 변경사항을 Replica 서버로 복제함. 두 서버 데이터의 일관성 유지.

Binary log:

Source 서버에서 실행된 모든 데이터 변경 쿼리를 기록함. Replication은 Binary log를 기반으로 이뤄짐

 

=> MySQL에서는 Row, Statement, Mixed 세 가지 방식으로 Binary log를 저장함

 

Row

데이터베이스 각 행별로 변경된 내용을 정확히 기록함. 데이터 일관성을 매우 높게 유지할 수 있음

특정 행이 수정되면 행의 이전 상태와 변경된 상태를 모두 기록함.

복제 서버에서도 원본 서버와 동일한 데이터 상태를 유지할 수 있음

모든 행의 변경 사항을 저장하기 때문에 Binary log 파일 크기가 급격히 증가할 수 있어 저장공간에 부담 줄 수 있음

 

Statement

데이터 변경을 일으킨 SQL문을 Binary Log에 기록함

로그 파일 크기를 상대적으로 작게 유지할 수 있어 저장 공간을 절약할 수 있음

실행할 때마다 다른 값을 반환하는 함수처럼 비확정적(non-deterministic) SQL 쿼리가 실행된 경우에 문제

원본 서버와 복제 서버에 동일한 쿼리를 실행해도 다른 결과가 발생해 데이터 불일치 문제를 겪을 수 있음

ex) SELECT NOW()와 같은 함수는 실행 시점에 따라 다른 결과를 반환할 수 있어, 복제 시 문제가 됨.

 

mixed

상황에 따라 row 기반과 statement 기반을 혼합해 로그를 기록함

비확정적 SQL이 아닌 경우-statement 방식을 사용해 저장 공간을 절약함

비확정적 SQL이 실행되는 경우-row 방식을 사용해 데이터 일관성을 유지함

구현이 복잡하다는 단점이 있음

 


복제 과정

1. 원본 서버에서 데이터 변경 쿼리가 실행됨

2. 선택된 로그 저장 방식에 따라 Binary log에 기록됨

3. 복제 서버의 I/O Thread의 Binary log를 읽어와 복제 서버의 Relay log로 전송

* Relay log: 원본 서버의 Binary log를 임시 저장하는 곳

4. Relay log를 기반으로 복제 서버의 SQL Thread가 실제 DB에 변경 사항을 적용함(약 100ms 이내)

 

=> 빠른 속도로 데이터 동기화가 진행되어 실시간에 가깝게 데이터 일관성이 유지됨

 


출처

[1] 매일메일. 250129. DB Replication에 대해서 설명해주세요. https://maeil-mail.kr