[MySQL] version 5에서 Replication 기능 사용하기

 

MySQL 5 버전에서 Replication 기능을 사용 하는 방법

 

 Database server 하나로 구성된 시스템의 경우 여러 client 연결로 부터 많은 양의 query 요청이 동시 다발적으로 들어오게 되면 당연히 처리 속도도 느려지고 실시간으로 데이터를 지속적으로 기록하는 시스템인 경우라면 제 시간에 데이터를 DB에 쓰지 못하는 크리티컬한 문제가 야기될수도 있습니다. 이런 과도한 부하를 피하는 방법으로 replication 기능을 사용해 DB를 이중 삼중으로 구성해 부하를 분산 해주는 방법을 생각해 볼 수 있죠.

 저같은 경우는 실시간으로 데이터를 DB에 써야하고 다른 외부적인 요인으로 데이터 기록에 장애가 발생하면 안되는 케이스여서 해당 DB를 Master로 두고 데이터를 기록하고 업데이트하는 소프트웨어만 접근하게 하고 데이터를 읽어가는 외부 클라이언트들은 Replication 기능을 사용해 복제된 Slave DB로 로드를 분산해서 문제를 해결 했습니다.

 

1. Slave MySQL DB 설치하고 환경설정 파일 수정하기

 MySQL에서 Replication 기능 활성화 하는 방법은 매우 간단한데요. 기존에 존재하는 MySQL DB를 Master로 설정하고 추가로 다른 PC에 MySQL을 설치한 다음 환경설정 파일에 아래 내용을 추가해줍니다. 설정파일을 수정하기 위해 실행중인  MySQL server를 중지시켜줍니다.

파일명 PC1 (Master) PC2 (Slave)
my.ini server-id = 1
log-bin = mysql-bin
server-id = 2
log-bin = mysql-bin

 

2. data 폴더 복사하기

 Master DB의 data 폴더를 Slave PC의 MySQL data 폴더로 복사해줍니다.

 

3. Replication 시작하기

 중지시켜둔 Master와 Slave MySQL 서버를 각각 시작시킵니다.

 Master 서버에 아래 쿼리를 실행합니다.

SHOW MASTER STATUS

그 다음 Slave 서버에 아래 쿼리를 실행합니다.

CHANGE MASTER TO
  MASTER_HOST = '172.27.208.1', -- Master 서버의 IP
  MASTER_USER = 'root',
  MASTER_PASSWORD = 'root',
  MASTER_LOG_FILE = 'mysql-bin.000003', -- Master의 log 파일명
  MASTER_LOG_POS = 98; -- Master의 log position
  
 START SLAVE;

 

위의 쿼리를 실행하면 Slave에서 replication을 시작하게 됩니다. replication 상태 확인을 위해 아래 쿼리를 실행합니다.

SHOW SLAVE STATUS

"Slave_IO_Running" 과 "Slave_SQL_Running"이 모두 Yes이면 정상적으로 replication이 동작하고 있다는 의미입니다. 둘 중 하나가 No라면 로그 파일을 확인해서 원인을 파악한 다음 문제를 해결해 주시면 됩니다.

 

이제 Replication이 작동 중이므로 Master DB에서 일어나는 모든 transaction들이 Slave에서도 동일하게 발생하게 됩니다.

 

Replication 사용 중 Slave가 너무 오래 down된 상태로 있다가 재 가동된 경우 Master에 down 전에 읽어간 log파일과 해당 position에 대한 기록이 지워진 상태일 수 있습니다. 이런 경우 Slave에서 replication이 동작하지 않게되는데 Master 와 Slave MySQL 서버를 중지시키고 위의 2번 과정부터 다시 하시면 됩니다.