📌 Rocky Linux에서 데이터베이스(DB) 복제하기 (Master-Slave Replication)
데이터베이스 복제(DB Replication)는 한 서버(Master)에서 데이터 변경이 발생하면, 이를 다른 서버(Slave)로 동기화하는 기술입니다.
이를 통해 데이터 백업, 부하 분산, 장애 복구 등을 효과적으로 수행할 수 있습니다.
📌 이번 글에서는 Rocky Linux에서 MySQL/MariaDB를 활용하여 Master-Slave 복제를 설정하는 방법을 단계별로 설명하겠습니다! 🚀
📌 1. DB 복제란? (기본 개념 이해하기)
✅ DB 복제(Replication)란?
➡ 하나의 데이터베이스 서버(Primary/Master)가 데이터 변경 사항을 다른 서버(Replica/Slave)에 자동으로 복제하는 기술
✅ DB 복제 방식
✔ Master-Slave 복제 → Master에서 변경된 데이터가 Slave로 복제됨
✔ Master-Master 복제 → 두 개의 Master가 서로 데이터를 동기화
✔ 비동기(Asynchronous) 복제 → Master가 업데이트를 수행한 후 Slave가 나중에 데이터를 복제
✔ 반동기(Semi-Synchronous) 복제 → 일정 조건에서 Master가 Slave의 응답을 기다렸다가 복제 수행
📌 쉽게 말해?
"Master DB에서 데이터를 변경하면, Slave DB가 이를 자동으로 복사하여 동기화하는 방식!"
일단 하기에 앞서
두 개의 서버를 준비하고
두 개의 서버에 mysql-server를 다운로드한다
다운로드하고 바로 실행시킨다
이미지에 있는 명령어들을 하나씩 자세히 해석해 드리겠습니다.
✅ 명령어별 상세 해석
📌 (1) 사용자 생성
create user 'root'@'%' identified with mysql_native_password by 'It12345!';
- 'root'@'%' : 원격에서 어떤 IP 주소로든 접근 가능한 root 사용자 생성.
- mysql_native_password 방식으로 인증하며, 패스워드는 It12345!로 설정.
📌 (2) 권한 부여
grant all privileges on *.* to 'root'@'%';
- 방금 만든 사용자(root@%)에게 모든 데이터베이스의 모든 권한을 부여함.
- 즉, 생성/삭제/조회/수정 등 모든 작업을 수행할 수 있음.
📌 (3) 권한 적용
flush privileges;
- MySQL의 권한 정보를 메모리에서 새로고침(적용)하여 변경 사항을 즉시 반영함.
📌 (4) 데이터베이스 생성
create database repdb;
- repdb라는 데이터베이스 생성.
📌 (5) 데이터베이스 선택
use repdb;
- 앞으로 실행할 쿼리가 repdb 데이터베이스에서 수행됨을 지정.
📌 (6) 테이블 생성
create table reptb(
no int(10) not null,
name varchar(100) not null
);
- reptb라는 이름의 테이블을 생성.
- 컬럼 정의:
- no: 숫자형(int)으로 최대 길이는 10이며, NULL 허용하지 않음.
- name: 문자형(varchar)으로 최대 100자, NULL 허용하지 않음.
📌 (7) Binlog(바이너리 로그) 상태 확인
show master status;
- 현재 MySQL 서버의 바이너리 로그(이중화나 복제에 쓰이는 로그)의 상태를 조회.
컬럼 의미
File | 현재 사용 중인 Binlog 파일명 (binlog.000001) |
Position | 현재 로그의 위치 (1247 바이트 지점까지 기록됨) |
Binlog_Do_DB | 특정 DB만 기록하는 경우 표시 (여기선 전체 기록하므로 공란) |
Binlog_Ignore_DB | 특정 DB 제외 시 표시 (여기선 무시하는 DB 없음) |
Executed_Gtid_Set | GTID(글로벌 트랜잭션 ID) 설정이 없다면 공란 |
이 정보는 주로 MySQL 복제(replication) 환경에서 슬레이브(slave) 설정 시 필요합니다.
🎯 전체 요약
해당 명령어들은 주로 MySQL의 복제(Replication) 환경을 설정할 때 마스터 DB에서 수행하는 과정입니다.
- 원격 접속 가능한 사용자 생성
- 모든 권한 부여
- 복제를 위한 데이터베이스 및 테이블 생성
- 복제를 위한 binlog 정보 조회
복제 환경을 구축하거나 원격 관리자를 만들 때 자주 쓰이는 구성입니다.
여기에 접속해서
마지막에
추가한다
다음의 설정은 MySQL에서 복제(replication)를 위한 설정입니다.
log-bin=mysql
server-id=1
✅ 상세 해석
① log-bin=mysql
- **바이너리 로그(Binary Log)**를 활성화하는 옵션입니다.
- 이 로그는 DB의 모든 데이터 변경(INSERT, UPDATE, DELETE 등)을 기록합니다.
- 로그파일 이름을 mysql.000001, mysql.000002와 같은 형식으로 저장합니다.
- 바이너리 로그를 켜는 목적은 주로:
- 복제(Replication) 환경 구축 (Master → Slave 복제)
- 데이터 복구 및 특정 시점으로의 복원 (PITR: Point-in-time recovery)
② server-id=1
- 서버를 구분하는 고유한 숫자 ID를 지정합니다.
- 복제환경에서 필수 옵션입니다.
- 각 서버(마스터, 슬레이브)는 반드시 고유한 server-id를 가져야 합니다.
예시 server-id
Master 서버 | server-id=1 |
Slave 서버 | server-id=2, server-id=3, ... |
🎯 정리
설정 의미 목적
log-bin=mysql | 바이너리 로그 활성화 | 복제, 데이터 복구 |
server-id=1 | 서버 고유 ID 지정 | 복제환경 서버 구분 |
이 설정은 MySQL의 복제 환경을 구성할 때, 마스터 서버에서 꼭 필요한 필수적인 옵션입니다.
다시 시작하면
바뀐 것을 확인할 수 있다
repdb를 repdb.sql로 만들고 서브서버에 보낸다
보낸 후
포트도 3306/tcp를 열어주고
서브서버로 이제 넘어가서
여기로 다시 들어가서
추가한다
그리고 mysql에 접속해서 repdb를 만들어둔다
그리고
그리고 계정도 만들어두고
나와서 아까 가져온 파일을 이식한다
그리고 mysql에 접속하여
이미지의 MySQL 명령어는 복제(Replication) 환경에서 슬레이브(Slave) DB 서버를 설정하는 과정입니다.
하나씩 명령어를 해석해 드리겠습니다.
✅ 각 명령어별 상세 해석
📌 (1) 복제 슬레이브 서버 설정 (CHANGE MASTER TO)
CHANGE MASTER TO
MASTER_HOST='192.168.0.11',
MASTER_USER='root',
MASTER_PASSWORD='It12345!',
MASTER_LOG_FILE='mysql.000001',
MASTER_LOG_POS=157;
위 명령어는 슬레이브 서버가 마스터 DB를 바라보게 설정하는 명령어입니다.
- MASTER_HOST='192.168.0.11'
- 마스터 서버의 IP 주소입니다.
- 슬레이브가 마스터로부터 복제할 때 사용할 주소입니다.
- MASTER_USER='root'
- 마스터 DB에 접속할 사용자 계정입니다.
- MASTER_PASSWORD='It12345!'
- 마스터 DB에 접속할 사용자의 비밀번호입니다.
- MASTER_LOG_FILE='mysql.000001'
- 마스터 서버의 Binlog 파일 이름입니다.
- 마스터에서 조회한 show master status; 값과 정확히 일치해야 합니다.
- MASTER_LOG_POS=157
- 마스터 서버의 바이너리 로그에서 복제를 시작할 위치(포지션)입니다.
- 마스터 서버에서 조회한 값과 정확히 맞춰야 합니다.
📌 (2) 복제 시작 (START SLAVE)
START SLAVE;
- 슬레이브 서버가 실제로 마스터 서버로부터 데이터를 복제하는 작업을 시작합니다.
- 이 명령어를 실행하면 슬레이브는 마스터와 연결하고 설정된 바이너리 로그 위치부터 데이터 복제를 시작합니다.
🎯 요약 (무엇을 하는 작업인가?)
현재 이미지는 MySQL 복제 환경 구성에서:
- 슬레이브 서버가 마스터 서버의 정보를 설정하는 단계
- 마스터 서버의 로그파일 및 로그 포지션을 기준으로 복제를 시작하는 과정
즉, 마스터 → 슬레이브 구조의 MySQL 복제 환경을 구성하는 핵심 단계입니다.
잘 연결된 것을 확인할 수 있고 한번 자료를 메인서버에서 넣어보도록 하자
서브 서버에서 검색한 것이다
아무것도 없는 것을 확인할 수 있는데
메인서버에 자료를 넣고 서브서버에도 잘 들어갔는지 확인해 보도록 하자
메인서버에서 넣은 모습이다
이제 서브서버에도 잘 들어갔는지 확인하자
서브서버에도 잘 들어간 것을 확인할 수 있다
오늘은 DB복제에 대해 공부해 봤다
'Linux' 카테고리의 다른 글
Rocky Linux로 NAT, 베스천 서버, 로드 밸런싱 구축하기: 네트워크 보안과 트래픽 분산 완벽 구현! (2) | 2025.03.10 |
---|---|
리눅스(Rocky Linux)로 nfs서버 만들기 (0) | 2025.02.25 |
리눅스(Rocky Linux)로 메일서버 만들기 (0) | 2025.02.24 |
리눅스(Rocky Linux)로 DNS서버 역방향 조회 및 인증 설정 (0) | 2025.02.23 |
리눅스(Rocky Linux)로 DNS서버 만들기 (0) | 2025.02.20 |