4. daisy-chain 식의 구성
MySQL은 고급 DBMS가 아닌 관계로 원하시는 기능들에 대해서 간단하게 세팅으로 구현되지는 않습니다. (MS-SQL 같은 경우는 Clustering을 구현하기 위해서 돈이 어마어마하게 듭니다)
Clustering의 핵심은 heartbeat 후의 상태 변화일 건데 그 부분을 스스로 처리해 주신다면 Active/Standby는 쉽게 구현될 수 있을 것이라고 생각합니다. 그걸 위의 daisy-chain 구성과 함께 한다면 Active/Active도 가능하겠지요.
일단 하나의 서버에 heart-beat를 체크하는 스크립트를 작성하고, 그 스크립트가 에러를 감지했을때 일련의 과정을 수행하게 하면 될 것 같습니다. ( 하지만, 그것이 에러가 났을 때 100% 정확하게 동작한다고 볼 수는 없을 것 같습니다. DB단 / OS단이 완전히 분리되어 있는 상황이니까요)
메뉴얼의 --log-slave-updates 설명부분을 올립니당.
--log-slave-updates
보통, 슬레이브에 마스터 서버로부터 받아진 업데이트들은 그것의 이진 로그에 기록되지 않습니다. 이 옵션은 슬레이브 자신의 이진 로그에 그것의 SQL 쓰레드에 의해 수행하였던 업데이트를 기록하는 것을 말합니다. 어떠한 영향을 가지고 있는 이 옵션에 대하여, 그 슬레이브도 또한 이진 로깅을 가능하게 하는 –log-bin 옵션과 함께 시작되어야 합니다. --log-slave-updates는 당신이 replication 서버들을 사슬로 묶기를 원할 때 사용됩니다. 예를 들면, 당신은 다음처럼 설치를 원할 수 있습니다 :
A->B->C
저것은 A 서버가 슬레이브 B를 위해 마스터로 쓰이고, B 서버가 슬레이브 C를 위해 마스터로 쓰입니다. 이 작업을 위해 B는 마스터와 슬레이브 모두가 되야 합니다. 당신은 A와 B 둘 다 이진 로깅이 가능하게 하는 –log-bin 옵션과 함께, 그리고 B를 –log-slave-updates옵션과 함께 시작해야합니다.
출처 : http://database.sarang.net/?inc=read&aid=12749&criteria=mysql&subcrit=&id=&limit=20&keyword=replication&page=5
원본 출처 : http://www.apmtim.com
이글은 장성윤님 홈페이지에서 소리 소문없이 훔쳐 온 것입니다. 많은 분들께 도움이 될 것 같아서 올려 둡니다. 물론 비슷한 글이 QnA 게시판에 보시면 있습니다만 따로 정리된 것이 좋겠지요. :-)
MySQL 실시간 복제[Replication기능] V.0.1
글쓴날 : 2001년 9월 12일
글쓴이 : 장성윤
( http://www.apmtip.com http://www.techcenter.pe.kr )
최종수정 : 2001년 9월 17일
제목을 수정하였습니다.
Replication을 하기 위해서 항상 최신의 버젼을 유지할 것을 권고한다.
참고자료:
http://mysql.com/documentation/mysql/full/manual_toc.html#Replication
먼저 나의 테스트 환경은 이렇다
======================
master -- 와우 리눅스 7.1 paran
메모리 : 196
MySQL버젼 : 3.23.41
slave -- 원도2000
메모리 : 256
MySQL버젼 : 3.23.41
======================
master는 실제로 디비에 내용이 기록되는 호스트이고 , slave는 master 바이너리 로그를 사용해서
해당 디비를 갱신하게 된다.
테스트는 리눅스를 master로 하였고, 원도 mysql을 slave로 하였다.
먼저 호스트에 설치된 mysql의 디렉으로 가서 ./share/mysql방을 찾는다
======================================================================
-rw-r--r-- 1 root root 2538 Sep 11 14:47 my-huge.cnf
-rw-r--r-- 1 root root 2516 Sep 11 14:47 my-large.cnf
-rw-r--r-- 1 root root 2500 Sep 11 14:47 my-medium.cnf
-rw-r--r-- 1 root root 2215 Sep 11 14:47 my-small.cnf
======================================================================
위와 같은 파일이 있을 것이다.
해당 파일을 열어보면 맨 상단에 메모리사양이 나온다.하지만 나의 친절함으로 알아보자----(:
====================================================================
파일명 설명
my-huge.cnf 메모리가 1G-2G사이일때 사용한다.
my-large.cnf 메모리가 512M일때 사용한다.
my-medium.cnf 메모리가 64~256M사이일때 사용한다.(필자는 이것을 사용)
my-small.cnf 메모리가 64M 보다 작을때 사용한다.
====================================================================
위에서 설명은 필자의 생각인 것이다.자신의 메모리가 해당이 않되면 알아서 판단하길 바란다.
일단 my-medium.cnf를 사용하기로 판단을 하고 /etc/my.cnf파일로 복사를 한다.
현재상태는 mysql데몬이 떠있는 상태이며, master설정부분이다.
vi /etc/my.cnf해서 열어서 [mysqld]부분을 보자
==================================vi /etc/my.cnf==========================================
# Example mysql config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# a important part and systems up to 128M very MySQL is used together with
# other programs (like a web server)
# The following options will be passed to all MySQL clients
중략......................
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = table_cache=64
set-variable = sort_buffer=512K
set-variable = net_buffer_length=8K
set-variable = myisam_sort_buffer_size=8M
>>>log-bin = /usr/local/mysql/logs/replication.log <--바이너리 로그파일
>>>binlog-do-db = test <---(디비명)
>>>binlog-do-db = edu <---(디비명)
>>>server-id = 1 <---Replication통신할 서버 아이디
이하 생략..................
==================================================================================
자세히 보면 자신의 my.cnf파일과 다른 부분이 >>>표시로 되어 있을 것이다.
그렇다. >>>부분의 설정으로 master부분은 끝난다.각각의 설정에 대해 알아보자
log-bin 이것은 바이너리 로그가 생성될 경로를 기록해 준다.
binlog-do-db 실시간 백업할 디비
server-id 서버 unique 한 번호(이것은 1 ~ 2^23-1까지 된다고 나와있다)
그리고 위에서 보듯이 binlog-do-db할 디비는 원하는만큼 설정이 가능하다.
그러면 slave인 원도에서 설정을 해 보자.(물론 다른 리눅스 박스를 slave로 설정하는 부분도 거의 동일하다
단지 원도와 리눅스라는 차이점이 있을 뿐이다)
mysql이 정상적으로 설치가 되었다면, WinMySQLadmin을 활성화 한다.
다음과 같이 한다.
시작 > 실행 > 찾아보기 > C:\ysql\in\inmysqladmin.exe 을 선택하고 실행하면 WinMySQLadmin이 활성화 된다.
그러면 오른쪽 아래 부분에 신호등 표시로 나타난다. 이것을 클릭해서 show me하게되면 WinMySQLadmin이 나타나는데
여러 탭이 있을 것인데 여기서 my.ini Setup 탭을 선택한다.
참고로 리눅스에선 my.cnf이지만 윈도 에서는 my.ini파일이다. 이것은 mysql을 설치하면 WINNT방에 생성된다.
그러면 아까 master설정하고 동인한 부분이 보일것이다.
===============================win my.ini설정파일================================
#This File was made using the WinMySQLAdmin 1.3 Tool
#2001-09-11 오후 12:37:06
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions
[mysqld]
>>>master-host = 192.168.0.120
>>>master-user = mysql최상위 관리자나 그에 동등한 권한을 가진 유저
>>>master-password = 비밀번호
>>>master-port = 3306
>>>master-connect-retry = 60
>>>replicate-do-db= edu
>>>replicate-ignore-table=edu.zetyx_board_tunning
>>>replicate-do-db= test
>>>server-id = 2
basedir=C:/mysql
#bind-address=192.168.0.110
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
이하생략....
===============================win my.ini설정파일================================
마찬가지로 >>> 부분이 추가된 부분이다.
설명은 아래와 같다
master-host master호스트를 기록한다.
master-user master유저
master-password master유저 비밀번호
master-port master디비 포트
master-connect-retry master에 재 접속할 횟수
replicate-do-db replication할 디비명
replicate-ignore-table 이것은 하나의 디비에 여러 테이블이 있을 경우 특정 테이블은 replication을 하지 않게 지정하는데 사용된다.
server-id slave 아이디로 master이외의 unique한 다른 번호를 지정한다.
더 많은 옵션이있다. 하지만 여기서는 단지 Replication하는데 중점을 두도록 한다.
여기까지가 Replication을 하기위한 설정의 끝이다.
그러면 이제부터 실시간 백업이 되게 해보자
1.master디비를 재시동한다.
2.slave 디비를 재시동한다.(윈도에서는 관리도구에서 서비스를 선택하면 mysql데몬을 다시 올려주면된다.)
3.master디비에 입력한다.
4.slave디비에 갱신이 되는지 확인한다.
slave에 갱신이 되었다면 성공한 것이다.
물론 위의방법은 새로운 디비에서 실시간 백업이 되게 한 것이다
기존 디비도 같은 방법으로 가능하다.