[DB] Mysql Replication DB 복제하기

phpschool에 jyuvenia 님이 쓰신 글을 조금 편집한 것입니다.

=============================================================================

Mysql 실시간 백업을 알아보겠습니다.

정확한 용어로는 Replication 입니다.

Mysql 은 현재 기본적으로 이 Replication 이라는 것이 지원됩니다.

현재 제가 이 기능을 오래전부터 사용해 왔고 지금도 잘 사용하고 있습니다.

Mysql 의 조금 구 버전에서는 많은 버그와 문제점들이 있어서

소스코드의 상당량 부분을 직접 수정하고 고생을 해야 했지만…

현재 최신 버전에서는 몇가지 자잘한 버그들 외에는 직접적인 문제가

되는 버그는 없습니다.

결론적으로 Replication 을 사용하기 위해서는 항상 최신의

Mysql 버전을 유지해야 합니다.

또는 4.0 부터는 mysql 자체적으로 로드 밸런싱 기능이 추가될

예정이며 현재 이부분 개발 소스코드가 공개되어있습니다.

몇가지 재미있는 부분들이 눈에 띄는 군요.   🙂

그럼 간단히 Mysql 에서 Replication 을 사용하는 방법을 설명하겠습니다.

——————————————————————————–

Replication 의 장점

  1. 실시간으로 Data를 백업할 수 있다.

  2. Mysql Database 서버의 부하를 분산 시킬 수 있다.

크게 위 두가지의 장점이 있습니다.

우선,

Primary DB 서버의 데이터에 변경이 생기는 동시에

2차 DB 서버에 변경된 내용을 모두 전달합니다.

이렇게 되면 실시간 백업이 되겠죠?

또한가지 장점은.. Primary 서버가 사망하면 쉽게 곧바로 2차 서버를

즉시 가동시킬 수 있는 장점이 있겠죠….

그리고.. 같은 데이터를 가지고 있는 DB 서버를 여러대 만들 수 있기

때문에 쿼리들을 분산시킴으로써 DB 서버에 걸리는 부하를

줄일 수 있는 장점이 있습니다.

대충 Replication 이 뭔지… 이해하실 겁니다.

작동 원리를 간단하게 설명드리겠습니다.

일단 모든 Update 쿼리(insert, delete, update, create…) 가 일어나는

경우 동일한 모든 Update 쿼리를 2차 서버에게 쿼리 합니다.

쉽죠????

또 한가지 재미있는것은… 이 논리를 이용해서…

Update 쿼리는 Primary 에서 실시하고 select 쿼리는 2차 서버에서

실시하면????

좋겠죠??? 그만큼 부하가 줄어듭니다…

아참.. 당연한 이야기 이지만.. 2차 서버라고 해서 꼭 2차라고 단정

지을 필요는 없습니다. 2차, 3차, 4차…. 여러대의

서버를 사용할 수 있습니다.

Primary 는 하나 Replication 을 위한 서버는 여러개….

상관 없습니다…. 🙂

그럼……….

——————————————————————————–

Replication 을 구축하기 위해서 필요한 사항들을 알아보도록 하겠습니다.

1. Mysql 3.23.32 이상

2. 컴퓨터 2대 (당연 !!!)

이 두가지면 됩니다..

중요한 점 한가지… 맨처음 Replication 을 사용하기 위해선

두대의 컴퓨터의 Mysql 데이타가 동일 해야 합니다.

잘 생각해보시면 당연하다고 생각되실 겁니다.

######################################

#  Replication 사용을 위한 설치 순서

######################################

  1. 두대의 컴퓨터에 Mysql 을 설치..

  2. 두대의 컴퓨터에 Mysql 의 데이터를 일치시킴

  3.

    [mysqld]

    log-bin

    server-id=1

    의 내용을 Primary 서버에 작성하셔서 /etc/my.cnf 파일로 저장합니다.

  4.

    [mysqld]

    master-host=Primary의 IP 주소

    master-user=root

    master-password=root의 패스워드 (Primary root 의 암호입니다.)

    master-port=3306 (다른면 바꿔야 겠죠?)

    server-id=2

    의 내용을 2차 서버에 작성하셔서 /etc/my.cnf 파일로 저장하세요.

  5. 이렇게 하신다음 두대의 Mysql 서버 데몬을 시작 하시면 됩니다.

  

==========================  [보충 설명]  ===============================

작성장 : 홍성표

슬레이브에서 매스터로 연결할 때 root로 접속 할 필요는 없습니다.

보안상 좋지도 않고요.

매스터의 user 테이블에 파일권한만 가지고 있는 사용자를 등록하시면

됩니다. 예) replicator

물론 host는 슬레이브의 host이름을 추가하시면 되겠지요.

이 사용자를 슬레이브의 my.cnf에 아래와 같이 추가하며 됩니다.

master-host=Primary의 IP 주소

master-user=replicator

master-password=replicator의 패스워드

master-port=

server-id=2에서 2의 32-1승까지 가능(그래도 2가 순서상 좋겠죠. 다음 보조서버는 3, 4, 5순으로 나가면 되니까)

기본적으로 백업 요구 시간은 60초입니다. 이것도 줄일 수 있습니다.

master-connect-retry를 my.cnf에 추가하면 됩니다.

==========================  [보충 설명]  ===============================

###########################

# 사용 방법

###########################

◎ 2차 서버에서 할일

  1. 2차 서버에서 mysql 실행하시고..

  mysql> show slave status;

  해보시기 바랍니다.

  그때 나오는 메세지 중에서 Slave_Running: Yes 라는 메세지가

  나와야 합니다.

  2. mysql> show processlist;

  해보시기 바랍니다.

  그때 나오는 메세지 중에서

  State: reading master update 라는 메세지가 나와야 합니다.

◎ Primary 에서 할일

  1. mysql> show master status;

  해보시기 바랍니다.

  또한

  mysql> show processlist;

  해보시기 바랍니다.

  이때…

  State: Slave connection: wating for binlog update

  라는 메세지가 나와야 합니다.

이와 같이 위에서 이야기한 부분이 모두 이상이 없다면

일단 Replication 이 작동중 입니다 !!!!!!!!!!!!!!!!!!

*중요* Mysql 의 버전에 따라서 메세지가 약간 다를 경우가 있습니다.

현재 Mysql 의 Replication 은 계속 개발 상태에 있기 때문에 새로운

버전이 나올때마다 많은 변화가 있습니다.

——————————————————————————–

#############################

# 테스트 하기 & 끝내며…

#############################

Primary 에서 insert 를 해보시고

2차 서버에서 select 를 해보시기 바랍니다.

잘 됩니까???

그럼 당근 성공이지요….. ㅎㅎㅎ

하지만 !!!!!!!!!!!!!

저는 지금 이 글을 쓰면서 대부분의 내용을 메뉴얼에서 배낀것에 불과 합니다.

Replication 은 정말 많은 옵션과 전용 쿼리 문들을 가지고 있습니다.

문제점이나 관리, 더 편한것을 위해선 반드시 메뉴얼을 읽어보시고

참고 하시기 바랍니다.

전 단지 Mysql 에서 이런것이 된다~~~ 라는 것과

이렇게 구축할 수 있구나~~~~ 하는 정도만 알려드렸을 뿐 입니다.

부하를 분산시키는 방법이나 좀더 높은 퍼포먼스를 원하신다면

반드시…. 메뉴얼을 읽어보시기 바랍니다..

영어이지만 그리 어렵지 않습니다… 저도 보는걸요…. ㅡ.ㅡ;;

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

3 Responses

  1. 2022년 6월 22일

    2indicators

  2. 2023년 1월 26일

    2vanilla

  3. 2024년 11월 19일

    … [Trackback]

    […] Read More here on that Topic: nblog.syszone.co.kr/archives/379 […]

페이스북/트위트/구글 계정으로 댓글 가능합니다.