2010년 7월 4일 일요일

Replication : Master에서의 설정과 조작 2

바이너리 로그 파일

바이너리로그 파일은 호스트명-bin.NNNNNN 형식으로 작성된다.  N은 숫자로 000001에서 순서대로 증가된다.  999999다음은 1000000으로 된다.

호스트명-bin의 부분은 --log-bin=옵션에서 변경가능하다.  또  디폴트로는 datadir/밑으로 작성되어지지만  보존장소도 --log-bin=옵션으로 변경가능하다.


바이너리 로그 인덱스파일 

바이너리 로그 인덱스파일은  바이너리 로그 파일의 리스트를 유지한다.
호스트명-bin.index라는 이름으로 작성된다.

바이너리 로그인덱스 파일의 예 
shell#> cat master-bin.index
./master-bin.000002
./master-bin.000003

2010년 7월 1일 목요일

Replication : Master에서의 설정과 조작 1

Master데이터베이스 설정과 조작

Master데이터베이스로써 동작시키기 위해서는 최소한 다음 옵션을 지정할 필요가 있다.
옵션은 my.cnf에 기술한다.

Replication의 Master로 기동하기 전에 모든 데이터를 백업하고 설정을 한 후 Master로 기동한다.

server-id = 번호
log-bin [=파일명]

Master에 관한 옵션은 다음의 표를 참조하길 바란다.

  • server-id=자연수 : 서버의 ID번호를 지정. 모든 slave, master에서 유일한 숫자를 지정할 필요가 있다.
  • log-bin[=파일명] : 바이너리로그<호스트명-bin>를 기록한다.
  • binlog_format={MIXED|STATEMENT|ROW} : 바이너리로그의 서식을 지정한다.
  • binlog-do-db=데이터베이스명 : 지정된 데이터베이스로의 변경만을 바이너리로그에 기록한다.
  • binlog-ignore-db=데이터베이스명: 지정된 데이터베이스로의 변경만을 바이너리로그에 기록하지 않음.
  • binlog-row-event-max-size=바이트수: ROW의 경우 , 한개의 이벤트당 최대 바이트수.
  • log-bin-index=이름 : <호스트명-bin.index> 파일명의 지정
  • log-bin-trust-function-creators: 스토어드 프로시져 작성의 제한
  • show-slave-auth-info : SHOW SLAVE HOSTS문으로 Slave정보목록에 사용자명과 패스워드를 추가한 것을 얻을 수 있음. Slave 서버에 -report-host=Slave호스트명과 옵션을 지정한 것만 표시됨
  • net_buffer_length=바이트수 : 통신에 사용하는 버퍼
  • net_read_timeout=초수 : 읽어들이는 중에 통신이 끊겼을 경우, 몇초를 기다려서 에러로 할 것인가 지정
  • net_write_timeout=초수 : 쓰는 도중에 통신이 끊겼을 경우, 몇초를 기다려서 에러로 할 것인가 지정
  • init-slave='SQL문' : Slave가 접속해 오면 최초 지정한 SQL문을 실행

Master에 관한 SQL문에는 다음과 같은 것이 있다.

  • GRANT REPLICATION SLAVE ON *.* : Replication Slave가 접속할 유저를 등록(권한 부여)
  • GRANT REPLICATION CLIENT ON *.* : SHOW MASTER STATUS를 실행할 수 있는 권한을 부여
  • FLUSH LOGS: 바이너리로그를 로테이트
  • SHOW PROCESSLIST : Replication 스레드를 확인
  • SET SQL_LOG_BIN={0|1} : 현재 세션 기록을 바이너리로그에 수행할 것인가 하지 않을 것인가 지정
  • SHOW MASTER STATUS: 바이너리 로그의 써넣기 상황을 확인
  • SHOW BINARY LOGS: 현재 존재하는 바이너리 로그 파일명을 표시
  • SHOW BINLOG EVENTS: 바이너리로그 이벤트를 표시
  • PURGE MASTER LOGS: 지정된 바이너리로그만을 삭제
  • SHOW SLAVE HOSTS: Slave 리스트를 표시. Slave서버는 --report-host=의 지정을 해둘 필요가 있다.
  • RESET MASTER: 모든 바이너리로그를 삭제

Replication

데이터베이스시스템의 부하를 분산시키고 싶은 경우는 replication을 이용한다.
MySQL의 replication의 특징은 다음과 같다.

  • 한 방향(Master에서 Slave로 흘러감)
  • 비동기
  • Master:Slave = 1:N
  • Slave겸 Master가 될 수 있다.
  • 통신은 TCP/IP를 사용
  • 바이너리 로그를 사용
  • 갱신은 Master만 가능

MySQL의 Replication은 Master의 바이너리 로그의 내용을 Slave에 보내는 것으로 수행된다.
동작의 흐름은 다음과 같다.

  1. Slave I/O스레드가 Master에 접속
  2. Master가 Slave를 인증하고 Slave와의 세션 개시
  3. Slave I/O스레드가 바이너리 로그파일(파일명, 위치)를 요구
  4. Master(binlog dump스레드)가 요구되어진 지점으로부터 이벤트를 바이너리 로그에서 읽어들여 Slave 에 전송
  5. Slave I/O스레드는 받어낸 이벤트를 relay-log에 기록
  6. Slave SQL스레드가 relay-log내용을 읽어들여 SQL문을 실행
  7. Master에 새로운 이벤트가 있으면 Master가 Slave에 송신

Event Scheduler 4

이벤트의 수정

이미 등록되어있는 이벤트를 변경하는 경우는 ALTER EVENT문을 사용한다.
구문은 다음과 같다.

ALTER EVENT 이벤트명
[ON SCHEDULE 스케줄]
[RENAME TO 이벤트명]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT '주석']
[ENABLE| DISABLE]
[DO [BEGIN] 실행할 sql문; [ 실행할 sql문;] [END] ]

예>
mysql>delimiter ;
mysql>ALTER EVENT test_event ON COMPLETION PRESERVE;


이벤트의 삭제


등록한 이벤트를 삭제하기 위해서는 DROP EVENT문을 사용한다.

DROP EVENT [IF EXISTS] 이벤트명