안녕하세요 마푸입니다.
바로 이전 포스트에서 Binary Log(Binlog)를 봤었는데요
이 binlog의 목적 중 하나인 고가용성(High Availability)을 사용할 수 있게 해주는 것입니다.
물런 최신 빌드의 MySQL 버전에서는 아래의 세팅법이 아닌 DATBASE의 식별키값으로 대처하는 방식등으로 변경되는데
(정확한 기술이름은 모르겠네요 ㅋㅋ;)
어쨋든 binlog는 필요합니다. +_+v
개인적 의견으로는
Mysql의 복제는 상당히 쉽습니다.
또, 매우 강력하지요....
그래서 Mysql을 쓰는 거의 모든 회사에서는 복제를 사용한다고 봐도 무방합니다.
즉, DBA를 업으로 사실려면 Mysql의 복제는 알아두셔야합니다.
글쓰면서 생각해봤는데 회사에서 사용하는 업무관리툴(레드마인)이 있는데 이건 복제가 없네요 ㅋ;;
(제가 관리 안해서 그런거에요 ㅋㅋ;;)
어쨋든 아래는 2007.05.07. 15:43에 참고하여 작성한 포스트 입니다.
우선 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로 변경됨
'Database' 카테고리의 다른 글
[DBMS] 선택도와 밀도의 차이점 (2) | 2017.02.21 |
---|---|
[쿼리튜닝] 쿼리의 실행 횟수를 줄이자 (0) | 2017.02.21 |
[MySQL] Binary Log (0) | 2017.02.14 |
[MySQL] Tirgger를 사용해 보자 (0) | 2017.02.14 |
[MSSQL] Try Catch의 고찰 (0) | 2017.02.14 |