반응형
MySQL 복제를 처음 설정할 때 가장 기본이 되는 구조가 바로 Master-Slave 구조다.
이 방식은 하나의 Master 서버에서 발생한 변경사항을 1개 또는 다수의 Slave 서버에 동기화시키는 방식으로, 읽기 부하 분산, 백업 분리, 장애 대비용으로 실무에서 널리 사용된다.
이번 글에서는 MySQL Master-Slave 복제를 직접 구성하는 실습 가이드를 제공한다.
CentOS 또는 Ubuntu 환경, MySQL 8.0 이상 기준이며, GTID 비활성화 상태(기본 binlog 복제 방식)로 설명한다.

✅ 설정 전 확인사항
- Master와 Slave는 서로 다른 server-id를 가져야 함
- 둘 다 binary logging 설정이 필요
- MySQL 버전은 가급적 동일하거나 유사한 버전 사용
- 네트워크 통신 가능 상태 (방화벽, 포트 3306 개방 등)
반응형
🛠️ 1단계: Master 서버 설정
① my.cnf 수정
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
- server-id: 고유값 (1, 2, 3...)
- log_bin: 바이너리 로그 경로
- binlog_format: 복제 안정성을 위해 ROW 권장
설정 후 MySQL 재시작
sudo systemctl restart mysql
② 복제 전용 계정 생성
CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
③ 현재 binlog 위치 확인
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
출력 예시:
File: mysql-bin.000001
Position: 154
이 값을 Slave에서 입력해야 하므로 복사해두기
잠깐! UNLOCK TABLES는 Slave 설정 완료 후 실행
🛠️ 2단계: Slave 서버 설정
① my.cnf 수정
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
read_only = 1
- server-id는 Master와 달라야 함
- read_only = 1로 쓰기 방지 (SUPER 권한 예외)
설정 후 MySQL 재시작
sudo systemctl restart mysql
② 복제 설정 입력
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='Master_IP',
SOURCE_USER='repl',
SOURCE_PASSWORD='replpass',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=154;
MySQL 8.0.23 이상에서는 MASTER_ 대신 SOURCE_ 구문 사용
③ 복제 시작
START REPLICA; -- 또는 START SLAVE;
상태 확인:
SHOW REPLICA STATUS\G
출력에서 아래 항목이 Yes이면 정상 작동 중
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
반응형
🧪 복제 확인 테스트
Master에서 데이터 추가
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100));
INSERT INTO users VALUES (1, 'Alice');
Slave에서 확인
SELECT * FROM testdb.users;
-- → 동일한 데이터가 자동으로 복제되어 있어야 함
🧠 실무 적용 팁
- read_only는 필수 설정 (Slave에 직접 쓰기 방지)
- 복제 계정은 REPLICATION 권한만 부여
- 복제 지연 여부는 Seconds_Behind_Source로 확인
- 장애 대비를 위해 복제 모니터링 자동화 도입 추천
- GTID를 사용하는 경우 설정 방식이 다름 (다음 글에서 다룸)
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/replication-howto.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (고가용성2️⃣) Group Replication 구성과 특징 완전 분석 (0) | 2025.07.17 |
|---|---|
| [MySQL] (고가용성1️⃣) MySQL 고가용성 개념과 클러스터링 구조 이해하기 (3) | 2025.07.17 |
| [MySQL] (복제구조4️⃣) 복제 환경에서 자주 발생하는 문제와 해결법 (2) | 2025.07.16 |
| [MySQL] (복제구조3️⃣) GTID 기반 복제 완전 이해하기 (0) | 2025.07.16 |
| [MySQL] (복제구조1️⃣) MySQL 복제란? 구조와 개념 완전 정리 (0) | 2025.07.16 |
| [MySQL] (보안설정5️⃣) 실무에서 자주 놓치는 보안 설정 체크리스트 (0) | 2025.07.16 |
| [MySQL] (보안설정4️⃣) SSL 인증서 적용하기: OpenSSL 기반 실습 가이드 (1) | 2025.07.16 |
| [MySQL] (보안설정3️⃣) 데이터 in transit 암호화: 네트워크 구간 보안 설정법 (0) | 2025.07.16 |