코딩마을방범대
MySQL 에 Replication 구성하기 본문
이전 포스터에서 Replication의 개념을 설명 했고, 이 후 실제로 MySQL에 적용하는 방법을 알아볼 것이다.
Replication이란?
복제(Replication)는 1개 이상의 레플리카(replica) 저장소가 소스 저장소와 동기화를 자동으로 유지하는 과정이다.
(기존의 일반적으로 사용하였던 master-slave라는 용어를 source-replica로 대체하는 추세이다.)
MySQL Replication 주의 사항
1. 호환성을 위해 Replication을 사용하는 MySQL의 동일하게 맞추는것이 좋음
2. Replication을 사용하기에 MySQL 버전이 다른 경우 Slave 서버가 상위 버전 이여야함
3. Replication을 가동시에 Master 서버, Slave 순으로 가동시켜야함
Master 서버와 Slave 서버 세팅하는 단계를 진행할 것이므로, 초기 구축된 Master 서버가 필요하다.
초기 MySQL 세팅하는 방법은 아래 포스터를 참고하여 설정해주면 된다.
Master 서버 설정하기
초기 구축되어 있는 MySQL 서버가 있다는 가정 하에 아래 단계를 실행하면 된다.
1. 리플리케이션 계정 생성
아래 명령어를 통해 mysqld에 접속
(또는 MySQL 워크벤치 이용)
sudo mysql -u root -p
이후 리플리케이션 계정을 생성
mysql> CREATE USER '아이디'@'%' IDENTIFIED WITH mysql_native_password BY '비밀번호';
GRANT REPLICATION SLAVE ON *.* TO '아이디'@'%';
FLUSH PRIVILEGES;
2. conf 파일 수정
아래 명령어를 통해 cnf 파일을 편집기를 통해 열어준다.
sudo vi /etc/mysql/mysql.cnf
이후 아래 정보들을 입력한 뒤 저장한다.
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_do_db=DB명
binlog_do_db=DB명
expire_logs_days=10
변수명 | 설명 |
log-bin | 업데이트되는 모든 쿼리들이 Binary log 파일에 기록됨 log-bin=mysql이라 설정하면 mysql-bin.000001, mysql-bin.000002 이름으로 Binary log 파일이 생성됨 (기본적으로 Binary log 파일은 MySQL의 data directory인 /var/lib/mysql/ 에 호스트명-bin.000001, 호스트명-bin.000002 형태로 생성됩니다.) |
server-id | 설정에서 서버를 식별하기 위한 고유 ID값 |
binlog_do_db | Replication 진행할 스키마명 - 여러개 적용시 여러줄 기입 (MySQL 5.6 이상부터는 설정하지 않았을 경우 모든 DB가 자동 반영됨) |
max_binlog_size |
로그 파일 크기 |
expire_logs_days | 로그 보관 주기 |
binlog-ignore-db | 바이너리 로그 제외 스키마 |
3. MySQL 재시작
sudo service mysql restart
4. Master 서버 정보 확인
아래 명령어를 통해 mysqld에 접속
(또는 MySQL 워크벤치 이용)
sudo mysql -u root -p
이후 master 설정 정보를 조회
mysql> show master status;
필드명 | 설명 |
File | MySQL 로그파일 |
Position | 현재 로그의 위치 |
Binlog_Do_DB | 바이너리(Binary)로그 파일(변경된 이벤트 정보가 쌓이는 파일) |
Binlog_Ignore_DB | 복제 제외 정보 |
Slave 서버 설정하기
Master 서버 설정이 끝났다면, Slave 서버를 세팅하여 연결시켜주면 된다.
1. conf 파일 수정
아래 명령어를 통해 cnf 파일을 편집기를 통해 열어준다.
sudo vi /etc/mysql/mysql.cnf
이후 아래 정보를 입력한 뒤 저장한다.
[mysqld]
server-id=2
read_only=1
replicate-do-db=DB명
expire_logs_days=10
변수명 | 설명 |
server-id | Master 서버의 server-id를 제외한 1~(2^32)-1내의 숫자로 설정 |
read_only |
읽기 전용으로 설정 (1=true, 0=false,defualt) |
replicate-do-db |
Replication 진행 할 스키마명 - 여러 스키마 사용 시 여러줄 기입 (MySQL 5.6 이상부터는 설정하지 않았을 경우 모든 DB가 자동 반영됨) |
expire_logs_days | 로그 보관 주기 |
2. MySQL 재시작
sudo service mysql restart
3. Master 서버의 데이터 가져오기
아래 포스터를 참고하여 dump 파일로 Master와 동일한 데이터를 세팅해준다.
4. Slave 서버에 Master 정보 설정
아래 명령어를 통해 mysqld에 접속
(또는 MySQL 워크벤치 이용)
sudo mysql -u root -p
이후 아래 명령어를 통해 master 서버와 연결해주면 된다.
mysql> CHANGE MASTER TO
MASTER_HOST='마스터 서버 IP 주소',
MASTER_USER='아이디',
MASTER_PASSWORD='비밀번호',
MASTER_LOG_FILE='로그 파일명',
MASTER_LOG_POS=로그 위치;
변수명 | 설명 |
MASTER_HOST | Master 서버의 IP를 입력 |
MASTER_USER | Master 서버에 생성한 리플리케이션(Replication) ID 입력 |
MASTER_PASSWORD | Master 서버에 생성한 리플리케이션(Replication) PW 입력 |
MASTER_LOG_FILE | Master 서버의 바이너리 로그 파일명 |
MASTER_LOG_POS | Master 서버의 현재 로그의 위치 |
※ 예시
아래의 Master 서버 status를 참고하여 명령어를 작성할 경우
mysql> CHANGE MASTER TO
MASTER_HOST='IP주소',
MASTER_USER='아이디',
MASTER_PASSWORD='비밀번호',
MASTER_LOG_FILE='mysql-bin.001846',
MASTER_LOG_POS=154;
5. Slave 시작 및 status 확인
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;
여기서 Slave_IO_Running이 Connecting, Slave_SQL_Running 값이 Yes여야함
참고사이트
MySQL Replication(복제) - 단방향 이중화
'💡 백엔드 > MySQL' 카테고리의 다른 글
MySQL 잠금 대기 시간 초과 오류 (0) | 2024.08.29 |
---|---|
[MySQL] Read Only로 설정되어 CRUD가 불가능할 때 (0) | 2023.07.11 |
[MySQL] Mysql Dump를 이용한 백업, 복원 방법 (0) | 2023.07.11 |