백엔드 개발에서 데이터베이스 리플리케이션은 고가용성과 데이터 안정성을 보장하기 위해 필수적인 기술입니다. 이번 글에서는 MySQL을 사용하여 데이터베이스 리플리케이션을 구축하는 단계별 튜토리얼을 제공하겠습니다. 이 튜토리얼에서는 마스터-슬레이브 구조를 사용해 데이터베이스 복제를 설정하는 방법을 소개합니다.

1단계: MySQL 설치

먼저, MySQL 서버를 두 대 설치해야 합니다. 한 서버는 마스터 역할을 하고, 다른 서버는 슬레이브 역할을 합니다. 각 서버에서 다음 명령어를 실행하여 MySQL을 설치합니다.

sudo apt update
sudo apt install mysql-server

설치가 완료되면 MySQL 서비스를 시작합니다.

sudo systemctl start mysql
sudo systemctl enable mysql

2단계: 마스터 서버 설정

마스터 서버에서 리플리케이션을 위해 몇 가지 설정을 해야 합니다. MySQL의 설정 파일인 my.cnf를 수정합니다. 이 파일은 일반적으로 /etc/mysql/my.cnf 또는 /etc/my.cnf에 위치합니다.

sudo nano /etc/mysql/my.cnf

설정 파일에 다음 내용을 추가합니다.

[mysqld]
log-bin=mysql-bin
server-id=1
  • log-bin: 바이너리 로그 기능을 활성화합니다.
  • server-id: 서버의 고유 ID를 설정합니다. 마스터 서버는 1로 설정합니다.

설정을 저장한 후 MySQL 서비스를 재시작합니다.

sudo systemctl restart mysql

3단계: 마스터 서버에서 사용자 생성

슬레이브 서버가 마스터 서버에 접속할 수 있도록 전용 사용자와 권한을 생성합니다. MySQL에 접속하여 다음 명령어를 실행합니다.

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

위의 SQL 문에서 replica_user와 password를 원하는 값으로 변경합니다.

4단계: 데이터베이스 백업

슬레이브 서버에서 데이터베이스를 복제하기 위해 마스터 서버의 데이터를 백업합니다. 다음 명령어를 사용하여 백업을 생성합니다.

mysqldump -u root -p --all-databases --master-data > backup.sql

이 명령어는 모든 데이터베이스를 백업하고, 리플리케이션을 위한 메타데이터를 포함합니다.

5단계: 슬레이브 서버 설정

슬레이브 서버에서 MySQL을 설정합니다. 슬레이브 서버의 my.cnf 파일을 수정하여 서버 ID를 설정합니다.

sudo nano /etc/mysql/my.cnf

다음 내용을 추가합니다.

[mysqld]
server-id=2

설정을 저장한 후 MySQL 서비스를 재시작합니다.

sudo systemctl restart mysql

6단계: 슬레이브 서버 데이터 복원

슬레이브 서버에서 방금 백업한 SQL 파일을 사용하여 데이터를 복원합니다.

mysql -u root -p < backup.sql

7단계: 슬레이브 서버에서 리플리케이션 설정

슬레이브 서버에서 마스터 서버와의 연결을 설정합니다. MySQL에 접속하여 다음 명령어를 실행합니다.

CHANGE MASTER TO
    MASTER_HOST='마스터서버_IP',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',  -- 백업 파일에서 확인한 바이너리 로그 파일 이름
    MASTER_LOG_POS=기록된_포지션;         -- 백업 파일에서 확인한 위치

이때 마스터서버_IP, password, mysql-bin.000001, 기록된_포지션을 실제 값으로 변경합니다.

8단계: 슬레이브 서버 시작

리플리케이션을 시작합니다.

START SLAVE;

상태를 확인하여 슬레이브가 정상적으로 작동하는지 확인합니다.

SHOW SLAVE STATUS\G

여기서 Slave_IO_Running과 Slave_SQL_Running이 모두 "Yes"로 나타나면 리플리케이션이 성공적으로 설정된 것입니다.

마무리

이번 튜토리얼에서는 MySQL을 이용하여 마스터-슬레이브 리플리케이션을 단계별로 설정하는 방법을 알아보았습니다. 데이터베이스 리플리케이션은 애플리케이션의 데이터 가용성을 높이는 중요한 기술입니다. 이 과정을 통해 데이터 안정성을 확보하고, 장애 발생 시 빠른 복구가 가능해지며, 읽기 성능 향상에도 기여할 수 있습니다. 실제 운영 환경에서 이 기술을 활용하여 더 나은 서비스를 제공할 수 있기를 바랍니다.