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 설정
'리눅스' 카테고리의 다른 글
| [draft] 리눅스에서 MySQL Binary 파일을 이용하여 MySQL 서버를 수동 설치하는 방법 (0) | 2026.03.14 |
|---|---|
| [draft] Python 로또 번호 생성기 -2 (0) | 2026.03.14 |
| [draft] Python 로또 번호 생성기 (0) | 2026.03.14 |
| [draft] Docker 자원 관리 (0) | 2026.03.13 |
| [draft] docker commit 명령어 (0) | 2026.03.12 |