코딩마을방범대

MySQL 에 Replication 구성하기 본문

💡 백엔드/MySQL

MySQL 에 Replication 구성하기

신짱구 5세 2024. 5. 29. 15:24
728x90

 

 

이전 포스터에서 Replication의 개념을 설명 했고, 이 후 실제로 MySQL에 적용하는 방법을 알아볼 것이다.

 

 

데이터베이스 리플리케이션(Replication)

데이터베이스 리플리케이션(Replication) 실시간 복제본 데이터베이스 서버를 운용하는 것기준이 되는 서버를 마스터 서버라 하고, 마스터 서버와 동일한 내용을 갖는 또 다른 서버를 ‘리플

sweet-rain-kim.tistory.com

 

 

 

 


 

 

 

 

 

 

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 세팅하는 방법은 아래 포스터를 참고하여 설정해주면 된다.

 

 

우분투에 MySQL 설치하기

1. 우분투 서버 업데이트 $ sudo apt-get update 2. MySQL-Server 설치 $ sudo apt-get install mysql-server MySQL 기본 설정 방법 외부 접속 기능 설정 (포트 3306 오픈) $ sudo ufw allow mysql MySQL 실행 $ sudo systemctl start mysql U

sweet-rain-kim.tistory.com

 

우분투에서 MySQL 외부 접속 허용 설정하기

외부 접속 허용 설정 변경 1. mysql 설정 파일 열기 $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 2. ip address 변경 기존 bind-address(127.0.0.1)을 0.0.0.0으로 변경 후 :wq로 저장 후 종료 외부 접속 가능한 사용자 계정

sweet-rain-kim.tistory.com

 

 


 

 

 

 

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와 동일한 데이터를 세팅해준다.

 

[MySQL] Mysql Dump를 이용한 백업, 복원 방법

백업을 하는 방법으로는 두가지가 있다! 터미널을 이용하는 방법과 워크벤치를 이용하는 방법이다. 우선 워크벤치를 이용하는 방법을 먼저 알아본 후 터미널로 이용하는 방법을 알아볼 예정이

sweet-rain-kim.tistory.com

 



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 Replication(복제) - 단방향 이중화

 

 

728x90