MySQL에서 데이터 복제(Replication) 설정하기

MySQL에서 데이터 복제(Replication)은 한 서버에서 발생한 변경 사항을 다른 서버에 자동으로 복사하는 기술입니다. 데이터 복제는 고가용성, 부하 분산, 백업 등의 목적을 위해 널리 사용됩니다. 특히 마스터-슬레이브 복제 방식은 데이터베이스의 확장성과 안정성을 높이는 데 유용합니다. 

1. MySQL 데이터 복제란?

데이터 복제(Replication)는 한 MySQL 서버(마스터)에서 수행된 데이터를 다른 서버(슬레이브)에 자동으로 복사하는 과정입니다. 복제된 서버는 읽기 전용으로 운영되며, 데이터베이스 부하 분산을 위해 슬레이브 서버에서 쿼리를 실행할 수 있습니다. 이를 통해 애플리케이션 성능을 최적화하고, 장애 발생 시 빠른 복구가 가능합니다.

복제의 주요 특징

  • 마스터 서버에서 발생한 데이터 변경 사항이 슬레이브 서버로 자동 복제됩니다.
  • 슬레이브 서버는 주로 읽기 전용으로 사용되어 읽기 작업의 부하를 분산할 수 있습니다.
  • 마스터-슬레이브 복제는 데이터의 백업을 실시간으로 유지하는 방법으로 유용합니다.

 

2. MySQL 복제의 종류

MySQL 데이터 복제는 여러 가지 방식으로 구현할 수 있습니다. 주로 사용하는 복제 방식은 마스터-슬레이브 복제입니다.

2.1. 마스터-슬레이브 복제 (Master-Slave Replication)

마스터-슬레이브 복제는 데이터를 마스터 서버에서 슬레이브 서버로 복제하는 방식입니다. 마스터 서버에서 발생한 모든 데이터 변경 사항이 슬레이브 서버에 반영됩니다. 이 방식은 데이터베이스 부하 분산과 데이터 복구를 위한 대표적인 방법입니다.

2.2. 마스터-마스터 복제 (Master-Master Replication)

마스터-마스터 복제는 두 개의 서버가 모두 마스터 역할을 하여 서로 데이터를 복제하는 방식입니다. 이 방식은 양방향으로 데이터를 업데이트하고 복제할 수 있습니다. 하지만 충돌을 피하려면 데이터베이스 설계 시 주의가 필요합니다.

 

 

3. MySQL 마스터-슬레이브 복제 설정하기

이번 섹션에서는 MySQL에서 마스터-슬레이브 복제를 설정하는 방법을 단계별로 설명하겠습니다.

3.1. 마스터 서버 설정

  • 마스터 서버에서 복제를 위해 고유한 서버 ID를 설정합니다.
  • 마스터 서버의 binlog를 활성화하여 복제를 위한 로그를 기록합니다.
-- 마스터 서버 설정
[mysqld]
server-id = 1
log-bin = mysql-bin
bind-address = 0.0.0.0

위 설정은 마스터 서버에서 binlog를 활성화하고, 서버 ID를 1로 설정하는 예시입니다. log-bin 옵션은 바이너리 로그를 활성화하여 변경된 내용을 기록합니다. server-id는 고유한 서버 식별자로, 각 서버에 대해 고유한 값을 설정해야 합니다.

3.2. 슬레이브 서버 설정

  • 슬레이브 서버에서 마스터 서버와 연결을 위한 설정을 합니다.
  • 슬레이브 서버는 마스터 서버의 binlog를 읽어서 데이터를 복제합니다.
-- 슬레이브 서버 설정
[mysqld]
server-id = 2

슬레이브 서버에서 고유한 서버 ID를 설정하고, 마스터 서버의 데이터를 받아오기 위한 준비를 합니다. 마스터 서버와 슬레이브 서버의 server-id 값은 서로 달라야 합니다.

3.3. 마스터 서버에서 사용자 생성

슬레이브 서버가 마스터 서버의 데이터를 읽을 수 있도록, 마스터 서버에서 복제 전용 사용자 계정을 생성합니다.

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

위 쿼리는 마스터 서버에서 `replica_user`라는 사용자를 생성하고, 복제 권한을 부여하는 예시입니다.

3.4. 슬레이브 서버에서 복제 시작

슬레이브 서버에서 마스터 서버의 데이터를 복제하려면, CHANGE MASTER TO 명령어로 마스터 서버의 정보를 설정합니다.

CHANGE MASTER TO
MASTER_HOST = 'master_ip',
MASTER_USER = 'replica_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS =  107;
START SLAVE;

위 쿼리는 슬레이브 서버에서 마스터 서버의 IP 주소, 사용자, 비밀번호, 바이너리 로그 파일 이름 및 위치를 설정하여 복제를 시작합니다. MASTER_LOG_FILEMASTER_LOG_POS는 마스터 서버에서의 마지막 커밋 위치를 설정해야 합니다.

3.5. 복제 상태 확인

슬레이브 서버에서 복제 상태를 확인하려면 SHOW SLAVE STATUS\G 명령어를 사용합니다. 이 명령어는 복제 상태, 에러 여부 등을 확인할 수 있습니다.

SHOW SLAVE STATUS\G

이 명령어는 슬레이브 서버에서 복제가 제대로 이루어지고 있는지 확인하는 데 유용합니다. Slave_IO_RunningSlave_SQL_Running 값이 모두 "Yes"로 표시되면 복제가 정상적으로 작동하고 있는 것입니다.

 

 

4. MySQL 복제 활용 예시

4.1. 읽기 부하 분산

복제된 슬레이브 서버는 읽기 전용으로 사용하여, 읽기 쿼리의 부하를 마스터 서버에서 분산할 수 있습니다. 이를 통해 마스터 서버의 성능을 향상시킬 수 있습니다.

4.2. 고가용성 구현

복제를 통해 마스터 서버가 장애를 겪을 경우 슬레이브 서버를 마스터 서버로 승격하여 시스템의 가용성을 높일 수 있습니다.

4.3. 백업을 위한 복제 활용

슬레이브 서버는 읽기 전용으로 백업 작업을 수행할 수 있어, 마스터 서버의 성능에 영향을 미치지 않으면서 데이터 백업을 수행할 수 있습니다.

 

 

5. 복제의 제약 사항

  • 데이터 일관성: 마스터-슬레이브 복제에서는 실시간으로 데이터가 복제되므로, 복제 지연이 발생할 수 있습니다.
  • 트랜잭션 제약: 마스터에서의 트랜잭션은 슬레이브에서 완벽하게 복제되지만, 트랜잭션 충돌 등으로 인한 문제가 발생할 수 있습니다.
  • 슬레이브 서버 장애: 슬레이브 서버가 다운되면, 복제 중지로 인한 데이터 누락이 발생할 수 있습니다. 복제 재개 전에 주의가 필요합니다.

데이터베이스 복제는 고가용성, 성능 최적화 및 데이터 보호에 중요한 역할을 하며, 다양한 환경에서 활용될 수 있습니다.