본문 바로가기

리눅스

[draft] MySQL Replication을 설정하는 방법

MySQL Replication을 설정하는 방법

MySQL Replication은 하나의 Master 서버에서 발생하는 데이터 변경 사항을 Slave 서버로 자동 복제하는 기능이다.

 

이 기능을 통해 다음과 같은 효과를 얻을 수 있다.

  • 데이터 안정성 향상
  • 읽기 부하 분산(Read Scaling)
  • 백업 서버 구성
  • 데이터 분석 서버 분리

기본 구조

Master (Write)
   │
   │ Binary Log
   ▼
Slave (Read / Replication)

Master 서버에서 발생한 데이터 변경 사항이 Binary Log에 기록되고 Slave 서버는 이를 읽어 Relay Log에 저장한 후 데이터를 동기화한다.

테스트 환경

서버 역할 IP server-id
Master 192.168.10.10 1
Slave 192.168.10.11 2

1. Master MySQL 서버 설정

Master 서버는 Binary Log를 생성하고 Slave가 접속할 수 있도록 설정해야 한다.

 

MySQL 설정 파일 수정

  • 설정 파일 수정
vim /etc/my.cnf
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = mydb
  • server-id : 마스터 MySQL 서버를 구분하기 위한 고유한 번호입니다. 서버마다 유일한 번호를 부여합니다.
  • log-bin : 마스터 MySQL 서버에서 변경된 데이터를 로그 파일에 기록하는 설정입니다.
  • binlog-do-db : 로그 파일에 기록할 데이터베이스 이름을 지정합니다.

Replication 사용자 생성

  • Slave 서버가 Master에 접속할 수 있도록 계정을 생성한다.
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
더보기

---

보안상 실제 운영에서는 다음처럼 제한하는 것이 좋다.

CREATE USER 'repl'@'192.168.10.%' IDENTIFIED BY 'password';

---

  • 'repl'@'%' : 접속을 허용할 IP 주소를 지정합니다. %는 모든 IP 주소를 허용하는 것을 의미합니다.
  • password : 사용자 비밀번호를 지정합니다.
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

MySQL 재시작

sudo systemctl restart mysql

2. Master Binary Log 확인

Slave 설정에 필요한 정보를 확인한다.

SHOW MASTER STATUS;
File: mysql-bin.000001
Position: 123

이 값은 Slave 설정에서 사용된다.

3. Slave MySQL 서버 설정

Slave 서버는 Master에서 전달되는 데이터를 받아 적용하도록 설정한다.

 

MySQL 설정 파일 수정

vim /etc/my.cnf
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
log-slave-updates
  • server-id : 슬레이브 MySQL 서버를 구분하기 위한 고유한 번호입니다. 마스터 MySQL 서버의 server-id와 겹치지 않도록 유일한 번호를 부여합니다.
  • relay-log : 마스터 MySQL 서버로부터 변경된 데이터를 로그 파일에 기록하는 설정입니다.
  • log-slave-updates : 슬레이브 MySQL 서버에서 변경된 데이터도 로그 파일에 기록하도록 합니다.

MySQL 재시작

sudo systemctl restart mysql

4 Slave 서버 Replication 설정

Slave 서버에서 Master 서버 정보를 입력한다.

CHANGE MASTER TO
-> MASTER_HOST='master_ip_address',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=123;
  • MASTER_HOST : 마스터 MySQL 서버의 IP 주소를 지정
  • MASTER_USER : 마스터 MySQL 서버에 접속할 사용자 이름을 지정
  • MASTER_PASSWORD : 사용자 비밀번호를 지정
  • MASTER_LOG_FILE : 마스터 MySQL 서버에서 변경된 데이터가 기록된 로그 파일 이름을 지정
  • MASTER_LOG_POS : 마스터 MySQL 서버에서 변경된 데이터가 기록된 로그 파일 내에서의 위치를 지정

Replication 시작

START SLAVE;

5. Replication 상태 확인

Slave 서버에서 다음 명령어로 상태를 확인한다.

SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Slave_IO_Running과 Slave_SQL_Running이 Yes로 표시되면 정상적으로 Replication이 동작하고 있다는 의미입니다.

6. Replication 확인 테스트

Master 서버에서 테스트 데이터 입력

CREATE DATABASE testdb;

USE testdb;

CREATE TABLE repl_test(
id INT
);

INSERT INTO repl_test VALUES (1);

Slave 서버에서 확인

SHOW DATABASES;

SELECT * FROM testdb.repl_test;

데이터가 동일하면 Replication이 정상 동작하는 것이다.

 

Replication을 사용하면 데이터베이스의 안정성을 높이고 부하 분산 및 데이터 분석 등에 유용하게 활용할 수 있습니다.

 

참고URL

- 변군이글루 블로그 : mysql 5.7 replication 설정

- 변군이글루 블로그 : mysql 리플리케이션(replication) 설정

- 변군이글루 블로그 : MySQL Replication 설정