2008년 12월 15일
Replication
우선 Replication 기능이란.. 간단하다.. 복제다..복제.. 똑같은 디비를 복제해서 사용자의 상황에 맞도록 사용하면 된다..
Replication은 크게 Master 와 Slave 로 나눠진다.. 말 그대로 Master란 놈은 주인이다 보니 디비에 변경되는 모든 데이타들을 자기 부터 알려줘야 한다. 안그러면 화낸다.. Slave란 놈은 노예처럼 마스터가 뱉어내는것만 가져다가 쌓아 놓는다.. 이런식으로 돌아가다보니..
Master에서는 insert, delete, update 를 반영하고 select 는 Salve에서 이뤄지도록 해.. 트랜잭션의 분리로 서버 부하를 나눠 줄수 있는 이점이 있다. 단점이라면 Slave란 넘이 그리 부지런 하지 못하다. Master에 반영된 데이타를 슬레이브 가져간 후에 슬레이브에 반영을 하다보니 많이 지치나 보다 일당은 똑같이 받는데 말이다.. 시간이 오래 걸리는 트랜잭션이 있을경우엔 그 많큼 Slave에 반영하는 시간이 오래 걸리다보니 Master와 Slave의 데이타가 일치 않는 시간이 있을 수 있다.. 그러니 적은 양의 데이타에 대해 빈번하게 일어나는 시스템이라면 한번 운영해보라 권장하고 싶다....
우선 운영하는데 필요한 환경 설정을 본다..
1. slave 서버에서 master 서버에 접속할 수 있도록, master 서버에서 계정을 만든다.
(Master : 100.00.00.101)
mysql> GRANT REPLICATION SLAVE ON *.* TO replicator@"%" IDENTIFIED BY 'pass';
mysql> quit;
root] vi /etc/my.cnf ( my.cnf 화일은 /usr/local/mysql/support-files/my-large.cnf 이용)
[mysqld] 부분에...
log-bin
server-id = 1
(Slave : 100.00.00.102)
root] vi /etc/my.cnf ( my.cnf 화일은 /usr/local/mysql/support-files/my-large.cnf 이용)
[mysqld] 부분에...
master-host=100.00.00.101
master-user=replicator
master-password=pass
master-port=3306
server-id=2
## 특정 테이블만 Replication 하고 싶을 경우엔 아래와 같이 설정한다.
/etc/my.cnf파일안에...
server-id = 2
master-host = 100.00.00.101
master-user = root
master-password = 1111
replicate-do-db = test
replicate-do-table = test.m1
replicate-do-table = test.m2
replicate-do-table = test.s1
## 특정 테이블만 Replication을 제외하고 싶을 경우엔 아래와 같이 설정한다
replcate-ignore-table=test.etc1
1-3 Master와 Slaver 의 mysql을 shutdown
1-4 Data 동기화
[Master]
# cd /usr/local/mysql/
# tar cvf var.tar var
# gzip var.tar
# ftp 100.00.00.102
ftp > put var.tar.gz
ftp > quit
[Slave]
# cp ~/var.tar.gz /usr/local/mysql
# cd /usr/local/mysql
# mv var var_old
# gunzip var.tar.gz
# tar xvf var.tar
1-5 Master와 Slave 의 mysql을 start
재 시작할때 my.cnf에 설정한 것과 동일한지 확인함 ( 예,log_bin 폴더 생성 등 경로변경으로 디스크 분활 -- log-bin=/usr/local/mysql/log_bin/Slave-log)
1-6 서버 상태
mysql> show master status\G;
mysql> show slave status\G;
1-7 slave 에서 환경 변수를 변경할수 있다.
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='100.00.00.101', MASTER_USER='replicator', MASTER_PASSWORD='pass';
혹 원하는 position에서 시작 하고 싶다면..
mysql> CHANGE MASTER TO MASTER_HOST='100.00.00.101', MASTER_USER='replicator', MASTER_PASSWORD='pass',master_log_file="Master-log.000006",master_log_pos=730206181;
mysql> start slave;
SLAVE START IO_THREAD; //Slave_IO_Running: NO --> YES로 변경됨
SLAVE START SQL_THREAD; //Slave_SQL_Running: NO --> YES로 변경됨
# by | 2008/12/15 14:06 | SQL(MySQL) | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]