2012. 9. 12. 19:57

MySQL 리플리케이션(간단정리)

1. master 쪽 my.cnf

[mysqld]

log-bin=mysql-bin

binlog_ignore_db        = mysql

binlog_ignore_db        = information_schema

binlog_ignore_db        = performance_schema

server-id       = 1

binlog_format=mixed


log-bin : 바이너리 로그를 사용하도록 한다.

binlog_ignore_db : 불필요한 db는 바이너리 로그에 저장 안되게 함

server-id : 서버번호


2. slave 쪽 my.cnf

server-id       = 2

master-host     =   <hostname>

master-user     =   <username>

master-password =   <password>

master-port     =  <port>

log-bin=mysql-bin

binlog_format=mixed

slave-skip-errors = all

replicate-do-db = [복제할 DB명]


server-id : 서버 번호 다른 서버와 중복 안되도록 한다

master-host, master-user, master-password, master-port, log-bin,binlog_format 

-> master 서버 접속 환경 설정을 한다. my.cnf 에 설정해도 되지만 mysql 쉘에서 CHANGE MASTER TO로 설정해도 된다. 당연히 CHANGE MASTER TO 로 할 경우 db를 재시작 하면 다시 설정해줘야 한다. 접속 설정은 my.cnf에 해놓고 추가적인 옵션(로그 파일 포지션)등은 CHANGE MASTER TO 명령으로 설정하자


3. 리플리케이션 절차

3-1. master db를 덤프, 또는 FLUSH TABLE 후 READ LOCK 을 건후 데이타 파일 복사(이건 비추임 LOCK 때문에 잠시 서비스 이용이 안되겠죠?)

mysqldump 를 할때 중요한 점은 아래 두 옵션을 반드시 적용해야 한다.(절대 잊으면 안된다!!!)

--master-data[=value]

--single-transaction


[참고]

--master-data 옵션은 dump파일에 CHANGE MASTER TO 로 바이너리 로그와 포지션등의 정보를 포함하도록 하는 명령이다. value로 사용되는 값은 1인 경우 CHANGE MASTER TO 를 명령으로 dump파일에 바로 포함하는 것이고 2인 경우에는 CHANGE MASTER TO 를 주석으로 dump 파일에 포함한다.

이 옵션이 사용 될 경우 [--lock-all-tables] 옵션이 자동으로 ON 되며 모든 테이블에 락이 걸리게된다.

이를 피하기 위해서 --single-transaction 옵션을 추가하면 전체 락이 걸리지 않지만 MyISAM 처럼 row level lock을 지원하지 않는 테이블 형식은 LOCK이 걸리니 이점 주의하자.


3-2. --master-data=1 로 했을 경우 dump 파일을 mysql에 적용하고 바로 start slave를 하면 되고 --master-data=2 일 경우에는 주속에 포함된 내용으로 아래 명령을 실행한 후 start slave를 하면 된다.

CHANGE MASTER TO  MASTER_HOST='마스터아이피', MASTER_USER='유저', MASTER_PASSWORD='비밀번호', MASTER_LOG_FILE='바이너리로그파일명', MASTER_LOG_POS=마스터_포지션넘버;

sql> START SLAVE UNTIL MASTER_LOG_FILE='바이너리로그파일명', MASTER_LOG_POS=마스터_포지션넘버;


4. 리플리케이션 운영

4-1. master 재시작, 다운등 종료시

master -> reset master

slave -> stop slave; reset slave; start slave;


4-2. slave 재시작, 다운등 종료시

slave -> stop slave; reset slave; start slave;


4-3. 연결이 끊어진 경우(보통 slave에 오류발생함)

master, slave 의 상태를 show master status; show slave status; 로 확인해서 오류부분을 잘 확인하자. 실행 방법은 4-1 master 재시작과 동일하다.

master -> reset master

slave -> stop slave; reset slave; start slave;


[참고]

reset master -> bin-log를 지운다.

reset slave -> slave에 저장된 bin-log 를 지우고 position 등의 값을 지운다.


4-4. bin-log 관리

bin-log 파일이 계속 커지므로 아래 와 같은 명령으로 로그를 삭제한다. 날짜는 알아서, 추가적인 옵션은 메뉴얼 찾아봐.

PURGE MASTER LOGS BEFORE DATE_SUB(NOW(),INTERVAL 3 DAY);