이 가이드는 MySQL 마스터-슬레이브 복제에서 슬레이브 서버(server2)를 설정하는 실무 절차를 설명합니다. 슬레이브 설정 파일 편집, 빈 데이터베이스 생성, 덤프 가져오기, CHANGE MASTER 명령으로 마스터 연결, SSL 옵션 확인과 상태 점검까지 단계별로 안내합니다.
개요
이 문서는 서버2를 MySQL 슬레이브로 구성하는 방법을 다룹니다. 필요한 작업은 다음과 같습니다.
- /etc/mysql/my.cnf의 [mysqld] 섹션에서 서버 아이디와 복제 관련 설정 추가
- MySQL 재시작
- 빈 데이터베이스 생성
- 스냅샷(snapshot.sql) 가져오기
- CHANGE MASTER TO로 마스터 정보 등록(SSL 포함 가능)
- START SLAVE로 복제 시작 후 SHOW SLAVE STATUS로 상태 확인
중요: server-id 값은 마스터와 달라야 합니다. 동일하면 복제가 실패합니다.
사전 요구사항
- 마스터에서 복제용 사용자를 생성하고 권한을 부여했을 것
- 마스터에서 SHOW MASTER STATUS; 실행 시 얻은 로그 파일명과 위치 정보를 기록해 두었을 것
- (SSL 사용 시) 슬레이브에 필요한 인증서(ca-cert.pem, client-cert.pem, client-key.pem)를 배치했을 것
슬레이브 구성 단계
- /etc/mysql/my.cnf 편집
서버2에서 [mysqld] 섹션에 다음 설정이 있는지 확인하거나 추가합니다. server-id는 마스터와 달라야 합니다.
server2:
vi /etc/mysql/my.cnf
[...]
server-id=2
master-connect-retry=60
replicate-do-db=exampledb
[...]
중요: server-id 값은 마스터와 유일해야 합니다.
- MySQL 재시작
설정을 저장한 뒤 MySQL을 재시작합니다.
/etc/init.d/mysql restart
- 빈 데이터베이스 생성
복제를 적용할 동일한 데이터베이스 이름으로 빈 데이터베이스를 만듭니다. 여기서는 exampledb를 사용합니다.
mysql -u root -p
CREATE DATABASE exampledb;
quit;
- 마스터에서 생성한 덤프(snapshot.sql) 가져오기
슬레이브에서 마이그레이션용 스냅샷을 가져옵니다. 먼저 슬레이브 IO를 멈추고 덤프를 로드합니다.
/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave
cd /tmp
mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql
- CHANGE MASTER TO로 마스터 연결 설정
MySQL에 다시 접속한 뒤, 마스터에서 얻은 SHOW MASTER STATUS; 결과를 기반으로 CHANGE MASTER TO 명령을 실행합니다. 아래 예에서는 값들을 반드시 마스터에서 확인한 값으로 바꿔야 합니다.
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106, MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/mysql/newcerts/client-key.pem';
설정 항목 설명:
- MASTER_HOST: 마스터의 IP나 호스트명(예: 192.168.0.100)
- MASTER_USER: 마스터에서 부여한 복제 전용 사용자
- MASTER_PASSWORD: 해당 사용자의 비밀번호
- MASTER_LOG_FILE / MASTER_LOG_POS: 마스터에서 SHOW MASTER STATUS; 결과로 받은 파일과 위치
- MASTER_SSL: SSL 연결 사용 여부(1 = 사용)
- MASTER_SSL_CA / MASTER_SSL_CERT / MASTER_SSL_KEY: 슬레이브에 설치된 인증서 경로
- 슬레이브 시작 및 상태 확인
슬레이브를 시작합니다.
START SLAVE;
상태를 확인합니다.
SHOW SLAVE STATUS \G
정상 동작 시 출력에서 다음 두 항목이 Yes여야 합니다: Slave_IO_Running, Slave_SQL_Running. 또한 SSL을 사용하면 Master_SSL_Allowed, Master_SSL_CA_File, Master_SSL_Cert, Master_SSL_Key 값이 채워져 있어야 합니다.
다음 예시는 정상적인 SHOW SLAVE STATUS 출력 예입니다. (출력은 시스템에 따라 다를 수 있습니다.)
mysql> SHOW SLAVE STATUS \G
************************* 1. row *************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: exampledb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/newcerts/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql/newcerts/client-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql/newcerts/client-key.pem
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
mysql>
문제가 없으면 MySQL 셸을 종료합니다.
quit;
점검 목록 (체크리스트)
관리자와 운영자가 단계별로 확인할 항목입니다.
- master에서 SHOW MASTER STATUS; 결과를 기록했는가
- server-id가 마스터와 충돌하지 않는가
- replicate-do-db 같은 복제 필터가 올바르게 설정되었는가
- snapshot.sql 파일이 정상적으로 로드되었는가
- CHANGE MASTER TO 명령의 MASTER_LOG_FILE/MASTER_LOG_POS 값이 정확한가
- START SLAVE 후 Slave_IO_Running 및 Slave_SQL_Running이 Yes인가
- SSL을 사용하면 인증서 경로와 권한이 올바른가
문제 해결 힌트
- Slave_IO_Running 또는 Slave_SQL_Running이 Yes가 아니면 /var/log/syslog 또는 MySQL 로그를 확인하세요.
- 권한 문제: MASTER_USER에 REPLICATION SLAVE 권한이 있는지 확인합니다.
- 포트/방화벽: 마스터의 3306 포트에 접근 가능한지 확인합니다.
- 로그 포지션 오류: snapshot을 생성할 때의 마스터 로그 포지션과 슬레이브에 설정한 위치가 일치하는지 확인하세요.
중요: SSL을 사용한 연결에서 인증서 경로가 잘못되면 연결이 실패합니다. 인증서 파일 권한(소유자 및 읽기 권한)도 확인하세요.
역할별 체크리스트
DBA:
- 마스터에서 복제 계정 생성 및 권한 부여
- 스냅샷 생성 시 일관성(FLUSH TABLES WITH READ LOCK 또는 mysqldump –single-transaction) 확보
시스템 관리자:
- 슬레이브 서버에 인증서 배포
- 방화벽/네트워크 설정 확인
- MySQL 서비스 모니터링 설정
운영자:
- 슬레이브 상태 정기 점검(특히 Seconds_Behind_Master)
- 데이터 검증을 위한 샘플 업데이트 테스트 수행
테스트 케이스(간단)
- 마스터에서 exampledb에 테스트 테이블 생성 및 데이터 삽입
- 슬레이브에서 동일한 테이블과 데이터가 복제되어 나타나는지 확인
- 네트워크 장애 복구 후 슬레이브가 자동으로 재동기화되는지 확인
보안 및 권장 사항
- 가능하면 SSL을 사용해 마스터-슬레이브 통신을 보호하세요.
- 복제 전용 계정에 최소 권한만 부여하세요.
- 중요 데이터는 복제 이전에 백업을 보관하세요.
요약
이제 exampledb에 대한 모든 변경 사항은 마스터에서 슬레이브로 복제됩니다. 설정 검증을 위해 간단한 업데이트를 수행하고 SHOW SLAVE STATUS로 상태를 확인하세요.
요약 포인트:
- server-id는 고유해야 합니다.
- CHANGE MASTER TO의 로그 파일과 위치는 마스터에서 확인한 값을 사용하세요.
- START SLAVE 후 Slave_IO_Running과 Slave_SQL_Running이 Yes여야 합니다.
링크
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
1줄 용어집
- 마스터: 복제의 원본 서버
- 슬레이브: 마스터의 변경을 적용받는 서버
- MASTER_LOG_POS: 마스터 바이너리 로그의 특정 위치