DB/MYSQL

[MySQL] MariaDB 리플리케이션(Replication)에 대해서 알아보자.

빙기때침식곡 2021. 2. 15. 23:26
반응형

이미지 출처 MySQL

 

 

(1) DB Replication 정의

 

Replication은 영단어 자체로 사본, 모사라는 뜻이 있고,

 

전산학에서 말하는 Replication은 데이터 저장과 백업하는 방법과 관련이 있는

 

데이터를 호스트 컴퓨터에서 다른 컴퓨터로 복사하는 것을 말한다.

 

DB Replication은 Master DB 서버의 데이터를 Slave DB 서버의 데이터와의 동기화이다.

 

우선, OS는 Windows를 기준으로 설명하도록 하겠다.

 

 

 


 

(2) DB 동기화

 

- 설정하기 앞서 mysqldump를 이용하여 Master와 Slave의 DB를 동일하게 한다.

 

 

 


 

(3) Master 설정

 

① my.ini 파일 수정

 

my.ini 은 DB Configuration 파일이라고 생각하면 되고,

 

통상적으로 위치는 C:\Program Files\MariaDB 10.3\data 에 존재한다.

 

my.ini 파일

[mysqld] 단에

 

log-bin=mysql-bin
server-id=1

 

이렇게 추가해준다.

 

 

log-bin은 로그파일명으로 편하게 짓고, Slave 서버에서 my.ini 설정할때 맞춰주면 되겠다.

 

Slave 서버에서 이 바이너리 로그를 보고 리플리케이션을 진행하기 때문에 반드시 적어줘야 한다.

 

server-id는 Slave와 다르기만 하면 되므로, 그래도 마스터니까 1로 해주자.

 

(참고로, 1에서 2^32 -1의 수만 가능하다.)

 

 

 

 

② MYSQL 재시작

 

my.ini 의 변경된 데이터가 적용되기 위해서는 MYSQL 서버를 재시작 해야한다.

 

Windows + R

실행

Services.msc

 

서비스 화면

 

MySQL 다시시작

 

 

③ Slave가 접근할 계정 생성

 

Windows cmd - root계정 로그인

root 계정으로 DB에 접속한다.

mysql -u root -p

Slave가 접속할 수 있는 계정을 만들어준다.

mysql> GRANT REPLICATION SLAVE ON *.* TO 계정아이디@'허용아이피' IDENTIFIED BY '비밀번호';

여기서 *.*는 데이터베이스를 의미하고, 전체 또는 특정 데이터베이스 지정이 가능하다.

 

아이피 표기도 마찬가지로 특정아이피와 전체아이피 접속을 부여할 수 있다. 

 

'%'가 전체아이피가 되겠다.

 

 

변경된 내용을 메모리에 반영 (권한 적용)

mysql> FLUSH PRIVILEGES;

 

Windows cmd - 계정 생성 및 권한 부여

 

 Master 서버 정보 확인

 

mysql> SHOW MASTER STATUS;

 

Windows cmd - Master 서버 정보

 

File : MySQL 로그파일
Position : 로그 파일내 읽을 위치
Binlog_Do_DB : 바이너리로그 파일(변경도니 이벤트 정보가 쌓이는 파일)
Binlog_Ignore_DB : 복제 제외 정보

특히 File 과 Position은 Slave에 설정해야하니 기억하도록 하자.

 

 

 

(3) Slave 설정

 

① my.ini 파일 수정

 

my.ini 파일

 

server-id는 2로 해주고,

log-bin은 Master와 동일하게 mysql-bin으로 명시해준다.

 

 

② MYSQL 재시작

 

 * Master의 MYSQL 재시작과 동일

 

 

③ Master DB 정보 입력

 

Windows cmd - CHANGE MASTER TO

CHANGE MASTER TO를 입력하고

mysql> CHANGE MASTER TO

 

각각의 내용을 첨부사진과 같이 적어준다.

Master_Host : Master DB의 IP
Master_User : Master 서버에서 Slave전용으로 만들었던 계정 ID
Master_Password : 계정 비밀번호
Master_Log_File : Master Status에서 File
Master_Log_Pos : Master Status에서 Position

 

 

④ Slave 시작

 

mysql> SLAVE START;

 

멈추는건 SLAVE STOP; 으로 멈출 수 있다.

 

 

⑤ Slave 상태 확인

 

 

mysql> SHOW SLAVE STATUS \G;

Slave_IO_State가 위처럼 Waiting for master to send event로 나오면 리플리케이션 성공!

 

Master에서 INSERT, DELETE, UPDATE가 발생하면 Slave에서 데이터가 동기화 되는것을 확인할 수 있다.

 

단, 양방향이 아니기 때문에 Slave에서 발생한 이벤트는 Master에 적용되진 않는다.

 

양방향 Replication에 대해서는 추후에 게시 예정이다.

 

반응형