MySQL 실시간 동기화(복제) 구축하는 방법
MySQL에서 실시간 동기화를 설정하려면 일반적으로 MySQL 복제(Replication) 기능을 사용합니다. 이를 통해 마스터 데이터베이스의 데이터를 하나 이상의 슬레이브 데이터베이스에 실시간으로 동기화할 수 있습니다. 아래는 MySQL 복제를 설정하는 과정을 단계별로 정리한 가이드입니다. 따라 하기 쉽게 간결하고 명확하게 설명하겠습니다.
1. 사전 준비
- 환경: MySQL 5.7 이상 (최신 버전 권장).
- 서버: 마스터 서버 1대, 슬레이브 서버 1대 이상.
- 권한: MySQL 루트 계정 또는 복제 설정 권한이 있는 계정.
- 네트워크: 마스터와 슬레이브 간 방화벽이 열려 있어야 하며, 동일 네트워크 내에서 통신 가능해야 함.
- 데이터베이스 백업: 마스터 DB의 초기 데이터를 슬레이브로 복사하기 위해 백업 준비.
2. 마스터 서버 설정
마스터 서버에서 MySQL 설정 파일을 수정하고 복제를 활성화합니다.
(1) MySQL 설정 파일 수정
- MySQL 설정 파일(
my.cnf
또는my.ini
)을 엽니다.- 리눅스:
/etc/my.cnf
또는/etc/mysql/my.cnf
- 윈도우:
C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
- 리눅스:
[mysqld]
섹션에 아래 설정을 추가합니다:[mysqld] server-id=1 # 마스터 서버의 고유 ID log_bin=mysql-bin # 바이너리 로그 활성화 binlog_format=ROW # ROW 포맷 사용 (안정적)
- MySQL 서비스를 재시작합니다:
sudo systemctl restart mysql # 리눅스
(2) 복제 전용 사용자 생성
- MySQL 클라이언트에서 마스터 DB에 접속:
mysql -u root -p
- 복제 전용 사용자 생성 및 권한 부여:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES;
'repl_user'
와'your_password'
는 원하는 값으로 변경하세요.'%'
는 모든 호스트에서 접속 가능하도록 설정. 특정 IP로 제한하려면'repl_user'@'slave_ip'
로 지정.
(3) 마스터 상태 확인
- 마스터의 바이너리 로그 파일 이름과 위치를 확인:
출력 예시:SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 154 | | | +------------------+----------+--------------+------------------+
File
과Position
값을 메모해둡니다. 슬레이브 설정 시 필요합니다.
(4) 마스터 데이터 백업
- 마스터 DB를 잠가 데이터 일관성 유지:
FLUSH TABLES WITH READ LOCK;
- 백업 수행 (예:
mysqldump
사용):mysqldump -u root -p --all-databases > backup.sql
- 잠금 해제:
UNLOCK TABLES;
- 백업 파일(
backup.sql
)을 슬레이브 서버로 전송 (예: SCP 사용):scp backup.sql user@slave_server:/path/to/backup.sql
3. 슬레이브 서버 설정
슬레이브 서버에서 MySQL 설정을 수정하고 마스터와 연결합니다.
(1) MySQL 설정 파일 수정
- 슬레이브 서버의 MySQL 설정 파일(
my.cnf
또는my.ini
)을 엽니다. [mysqld]
섹션에 아래 설정을 추가:[mysqld] server-id=2 # 슬레이브 서버의 고유 ID (마스터와 달라야 함) read_only=1 # 슬레이브를 읽기 전용으로 설정 (선택)
- MySQL 서비스 재시작:
sudo systemctl restart mysql
(2) 마스터 데이터 복원
- 슬레이브 서버에서 백업 데이터를 복원:
mysql -u root -p < /path/to/backup.sql
(3) 슬레이브 복제 설정
- MySQL 클라이언트에서 슬레이브 DB에 접속:
mysql -u root -p
- 마스터와 연결 설정:
CHANGE MASTER TO MASTER_HOST='master_ip', -- 마스터 서버 IP MASTER_USER='repl_user', -- 복제 사용자 MASTER_PASSWORD='your_password', -- 복제 사용자 비밀번호 MASTER_LOG_FILE='mysql-bin.000001', -- 마스터의 바이너리 로그 파일 (SHOW MASTER STATUS에서 확인) MASTER_LOG_POS=154; -- 마스터의 로그 위치 (SHOW MASTER STATUS에서 확인)
MASTER_HOST
,MASTER_LOG_FILE
,MASTER_LOG_POS
는 실제 값으로 대체.
- 슬레이브 복제 시작:
START SLAVE;
(4) 슬레이브 상태 확인
- 슬레이브 상태를 확인:
SHOW SLAVE STATUS\G
- 중요한 출력 항목 확인:
Slave_IO_Running: Yes
→ 마스터와의 연결 상태 정상.Slave_SQL_Running: Yes
→ 복제 SQL 실행 정상.Seconds_Behind_Master: 0
→ 마스터와 동기화 지연 없음.- 오류가 있다면
Last_Error
항목을 확인해 디버깅.
4. 테스트 및 모니터링
- 데이터 테스트:
- 마스터에서 테이블에 데이터를 삽입/수정:
USE test_db; INSERT INTO test_table (column1) VALUES ('test');
- 슬레이브에서 동일한 데이터가 복제되었는지 확인:
SELECT * FROM test_db.test_table;
- 마스터에서 테이블에 데이터를 삽입/수정:
- 모니터링:
- 주기적으로
SHOW SLAVE STATUS\G
를 실행해 동기화 상태 확인. - 오류 발생 시 MySQL 로그 파일(
/var/log/mysql/error.log
) 점검. - 필요 시 모니터링 도구 (예: Percona Monitoring, Zabbix) 사용.
- 주기적으로
5. 추가 팁
- 보안:
- 복제 사용자(
repl_user
)의 비밀번호를 강력하게 설정. - 방화벽에서 MySQL 포트(기본 3306)를 마스터-슬레이브 간 통신만 허용.
- SSL로 복제 연결 암호화 (필요 시
MASTER_SSL=1
추가).
- 복제 사용자(
- 장애 처리:
- 슬레이브가 마스터를 따라가지 못하면
STOP SLAVE;
후CHANGE MASTER TO
로 로그 위치 재설정. - 마스터 장애 시 슬레이브를 새 마스터로 승격(고급 설정 필요).
- 슬레이브가 마스터를 따라가지 못하면
- 성능 최적화:
- 복제 지연 최소화를 위해
binlog_format=ROW
사용. - 대규모 데이터베이스의 경우 병렬 복제 활성화:
slave_parallel_workers=4 slave_parallel_type=LOGICAL_CLOCK
- 복제 지연 최소화를 위해
6. 문제 해결
- "Access denied" 오류:
repl_user
의 권한 또는 비밀번호 확인. - "Could not connect" 오류: 방화벽, 네트워크,
MASTER_HOST
IP 확인. - 복제 지연:
Seconds_Behind_Master
값 확인 후 네트워크 속도 또는 슬레이브 성능 점검.
이 가이드를 따라 하면 MySQL 마스터-슬레이브 복제를 설정해 실시간 동기화를 구현할 수 있습니다.
'기타유용한팁' 카테고리의 다른 글
Termius ssh 터미널 클라이언트에 대한 소개와 무료 버전 어디까지 사용 가능한지 알아봅시다. (0) | 2025.04.17 |
---|---|
기업용 무료 가상화 플랫폼 추천 TOP 2 - XCP-ng vs Proxmox VE (0) | 2025.03.25 |
macOS에서 ls 명령 편리하게 사용하기 (0) | 2025.03.06 |
워드프레스 6.7.1 블록 편집기 문제와 해결책 (0) | 2024.12.25 |
RAID 10: 2TB 디스크 4개로 안정성과 성능을 극대화하는 방법 (0) | 2024.11.26 |
댓글