2010년 7월 28일 수요일

Replication : Slave에서의 설정과 조작 5

  • SHOW WARNINGS: Replication에러가 나왔을 경우 에러 메세지를 볼 수 있다.
  • SET GLOBAL SQL_SLAVE_SKIP_COUNTER:  지정된 수만큼 이벤트의 실행을 건너뛴다. 
  • SELECT MASTER_POS_WAIT() : 지정된 바이너리 로그파일의 위치까지의 이벤트를  SQL스레드가 실행할 때까지 대기한다. SQL함수인 것을 주목하자.  다음과 같이 사용한다. SELECT MASTER_POS_WAIT('Master 바이너리로그 파일명', 바이너리로그 파일의 위치 [,타임아웃] ) 타임아웃은 0보다 큰 숫자를 지정한 경우, 지정된 초수를 넘어서 기다리게 되는 경우 에러를 낸다.  지정이 없으면 계속 기다린다.   반환되는 값은 이벤트의 수이다. NULL은  SQL스레드가 움직이고 있지 않던가 인수에러이던지 지정된 파일이 존재하지 않던지 하는 경우이다.  -1은 타임아웃이 발생한 상태이다.
  • START SLAVE (IO_THREAD|SQL_THREAD):  Slave를 시작한다. 
  • STOP SLAVE (IO_THREAD|SQL_THREAD):Slave를 정지시킨다.
  • RESET SLAVE:  Slave정보를 삭제한다. master.info, relay-bin.#, relay-bin.index, relay-log.info가 삭제되어 초기상태로 된다. 
  • LOAD DATA FROM MASTER:  Master데이터의 복사.  현재는 비추천기능. mysqldump등의 백업툴을 사용할 것을 추천한다.  MyISAM테이블만이 대상으로  그 외의 것은 Net error reading from master라는 에러메세지가 나온다. 또 데이터양이 많은 경우 타임아우이 발생할 가능성이 있다. 
  • LOAD TABLE 테이블명 FROM MASTER: Master의 테이블 복사.  이것도 현재 비추천기능.

2010년 7월 21일 수요일

Replication : Slave에서의 설정과 조작 4

SHOW SLAVE STATUS의 내용 


  • Slave_IO_State: I/O스레드의 상황 
  • Maser_Host: Master의 호스트
  • Master_User: 접속 유저
  • Master_Port: Master의 포트번호 
  • Connect_Retry: --master-connect-retry의 값
  • Master_Log_File: I/O스레드가 현재 읽어들이고 있는 Master의 바이너리로그 
  • Read_Master_Log_Pos: I/O스레드가 현재 읽어들이고 있는 Master의 바이너리로그의 위치 
  • Relay_Log_File: SQL스레드가 현재 읽어들여 실행중인 Relay로그 파일 
  • Relay_Log_Pos: SQL스레드가 현재 읽어들여 실행중인 Relay로그 파일의 위치 
  • Relay_Master_Log_File: SQL스레드가 가장 최후에 실행한 이벤ㅌ가 Master의 어느 바이너리로그 파일에 있는가
  • Slave_IO_Running: I/O스레드가 동작하고 있는가 
  • Slave_SQL_Running: SQL스레드가 동작하고 있는가
  • Replicate_Do_DB: --replicate-do-db의 지정값
  • Replicate_Ignore_DB: --replicate-ignore-db 의 지정값
  • Replicate_Do_Table: --replicate-do-table의 지정값 
  • Replicate_Ignore_Table: --replicate-ignore-table의 지정값
  • Replicate_Wild_Do_Table: --replicate-wild-do-table의 지정값
  • Replicate_Wild_Ignore_Table: --replicate-wild-ignore-table의 지정값
  • Last_Errno: 최후에 발생한 에러 번호 
  • Last_Error: 최후에 발생한 에러 메세지 
  • Skip_Counter: SQL_SLAVE_SKIP_COUNTER 지정된 값
  • Exec_Master_Log_Pos: SQL스레드가 최후에 실행한 이벤트가 Master의 바이너리로그의 어느 위치가 되는 가
  • Relay_Log_Space: Relay로그 사이즈.  모든 Relay로그의 합계 
  • Until_Condition: START SLAVE의 UNTIL의 지정 
  • Until_Log_File: START SLAVE의 UNTIL의 지정 
  • Until_Log_Pos: START SLAVE의 UNTIL의 지정 
  • Master_SSL_Allowed: SSL통신을 수행하고 있는지 
  • Master_SSL_CA_File: CA의 CERTIFICATE파일
  • Master_SSL_CA_Path: CA의 CERTIFICATE파일을 보존하는 디렉토리 
  • Master_SSL_Cert: CERTIFICATE 파일 
  • Master_SSL_Cipher: Cipher
  • Master_SSL_Key: 키 파일 
  • Seconds_Behind_Master: Slave가 어느정도 Master로부터 지연되고 있는가. 0인 경우에는 I/O스레드에 완전히 잘 따라가고 있음. 갱신등으로 늦어지고 있는 경우는  늦어진 추정 초수가 나타남. 


    2010년 7월 15일 목요일

    Replication : Slave에서의 설정과 조작 3

    Master정보의 변경(CHANGE MASTER TO)

    Master정보등의 변경을 수행한다. 구문은 다음과 같다.

     CHANGE MASTER TO 변경지정 [,변경지정]

    변경지정 키워드를 모두 지정할 필요는 없고 필요한 것만을 「,」로 지정한다.
    이 실행에 따라서 master.info , relay-log.info파일이 변경된다.

    변경지정 키워드는 아래와 같다.

    • MASTER_HOST='호스트명'
    • MASTER_USER='유저명'
    • MASTER_PASSWORD='패스워드'
    • MASTER_PORT=포트번호
    • MASTER_CONNECT_RETRY=시도횟수 
    • MASTER_LOG_FILE='Master의 바이너리로그파일명'
    • MASTER_LOG_POS=Master의 바이너리로그 파일의 위치 
    • RELAY_LOG_FILE='relay로그파일명'
    • RELAY_LOG_POS=relay로그파일의 위치 
    • MASTER_SSL= {0|1}
    • MASTER_SSL_CA = 'CA의 CERTIFICATE파일명'
    • MASTER_SSL_CAPATH='CA의 CERTIFICATE 파일저장 디렉토리'
    • MASTER_SSL_CERT ='CERTIFICATE파일명'
    • MASTER_SSL_KEY='개인키 파일명'
    • MASTER_SSL_CIPHER='Cipher지정'

    Slave상태확인 (SHOW SLAVE STATUS)

    Slave의 상태를 확인하기 위해서는 SHOW SLAVE STATUS를 사용한다.
    Slave_IO_Running과 Slave_SQL_Running중 둘중 하나가 No이면 Replication은 정지하고 있는 것이다.  장해로 SQL스레드만 정지하고 있으면 Relay_Master_Log_File과 Exec_Master_Log_pos 쌍과  Master_Log_File과 Read_Master_Log_Pos쌍의 값이 달라지게 된다.

    2010년 7월 13일 화요일

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

    Slave에 관한 SQL문 

    • GRANT REPLICATION CLIENT ON *.* : SHOW SLAVE STATUS를 실행할 수 있는 권한을 부여 
    • CHANGE MASTER TO : Master 변경, 바이너리 로그의 읽기 위치 변경수행 
    • SHOW SLAVE STATUS: Slave 서버의 상황
    • SHOW WARNINGS : warning의 확인
    • SHOW SLAVE HOSTS: Slave리스트를 출력. Slave서버는 --report-host=옵션의 지정이 필요하다. REPLICATION CLIENT권한이 필요
    • SET GLOBAL SQL_SLAVE_SKIP_COUNTER=갯수 : 지정된 갯수만큼만 이벤트 실행을 건너뜀.
    • SELECT MASTER_POS_WAIT() :  지정된 바이너리로그의 위치까지 실행되기까지 대기 
    • START SLAVE: Slave개시
    • STOP SLAVE: Slave정지 
    • RESET SLAVE: Master 정보 삭제 
    • LOAD DATA FROM MASTER: Master로부터 데이터를 복사 
    • LOAD TABLE 테이블명 FROM MASTER: Master로부터 테이블을 복사 

    Slave가 작성하는 파일 
    • master.info:  Replication상태를 유지하기위해서 이용되는 파일. Slave서버가 자동으로 생성한다.  임의로 변경하지 않도록 주의한다.  다음과 같은 내용을 포함하고 있다.  
    1. 이 파일의 행수 
    2. Master_Log_File
    3. READ_Master_Log_Pos
    4. Master_Host
    5. Master_User
    6. 패스워드
    7. Master_Port
    8. Connect_Retry
    9. Master_SSL_Allowed
    10. Master_SSL_CA_File
    11. Master_SSL_CA_Path
    12. Master_SSL_Cert
    13. Master_SSL_Cipher
    14. Master_SSL_Key
    디폴트로 datadir/밑에 작성되지만 --master-info-file=옵션으로 변경가능하다.  파일명도 같은 방법으로 변경할 수 있다.  

    • relay-log.info: Slave서버의 relay-log상황을 기록하는 파일로 자동적으로 생성된다.  임의로 편집해서는 안된다.  다음과 같은 내용을 포함하고 있다. 
    1. Relay_Log_File
    2. Relay_Log_Pos
    3. Relay_Master_Log_File
    4. Exec_Master_Log_Pos
    디폴트로 datadir/밑에 작성되지만 --relay-log-info-file=옵션으로 변경가능하다.  파일명도 같은 방법으로 변경할 수 있다.  
    • 호스트명-relay-bin.NNNNNN:  relay로그파일이다.  N은 숫자로 000001에서 순차적으로 증가한다.  999999의 다음은 1000000가 된다.   호스트명-relay-bin의 부분은 --relay-log=옵션으로 변경가능하다.  또, 디폴트로는 datadir/에 작성되지만 장소는 --relay-log=옵션으로 변경가능하다. 

    • 호스트명-relay-bin.index:현재 가지고 있는 relay로그 리스트이다. 

    2010년 7월 7일 수요일

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

    Slave로 동작시키기 위해서는 최소한 다음의 옵션을 my.cnf에 기술해야한다.

    server-id = 번호
    master-host = 호스트
    master-user = 유저명
    master-password = 패스워드

    Slave에 관한 옵션은 다음과 같다.
    • log-slave-updates :Slave겸 Master로 할 때에 지정한다. 
    • master-connect-retry=기본값은60sec  Master와의 접속이 끊긴후 몇초 기다리고 재접속을 시도할까
    • master-host=호스트 : Master의 호스트명 
    • master-port=포트번호 : Master의 포트번호 
    • master-user=유저명:  Master에 접속할 때 사용하는 유저명 
    • master-password=패스워드: Master에 접속할 때 사용하는 패스워드 
    • master-info-file=파일명 : master.info파일의 파일명(패스)지정 
    • master-retry-count= 횟수: Master와의 통신이 끊겼을 경우 최대로 몇번 재접속을 시도할 것인가
    • master-ssl : Master와의 통신을 SSL로 수행
    • master-ssl-ca=파일: CA의 CERTIFICATE파일 
    • master-ssl-capath=디렉토리명 : CA의 CERTIFICATE파일을 보존하고 있는 디렉토리 
    • master-ssl-cert=파일명: CERTIFICATE파일의 지정
    • master-ssl-cipher=Cipher : Cipher의 지정 
    • master-ssl-key=파일명 : private key 파일명 
    • relay-log=파일명 : relay로그 파일인  호스트명-relay-bin의 지정 
    • relay-log-index=파일명:  호스명-relay-bin.index파일의 지정
    • relay-log-info-file=파일명: relay-log.info파일의 지정 
    • replicate-do-db=데이터베이스명 :  Replication대상이 되는 데이터베이스명 
    • replicate-do-table=테이블명:  Replication대상이 되는 테이블명 
    • replicate-ignore-db=데이터베이스명: Replication 대상외로 하고픈 데이터베이스명 
    • replicate-ignore-table=테이블명: Replication 대상외로 하고픈 테이블명 
    • replicate-rewrite-db="원래 데이터베이스명->Slave에서의 데이터베이스명" : Master의 데이터베이스명을 Slave에서는 다른이름으로 취급
    • replicate-wild-do-table=와일드 카드 : Replication대상이 되는 테이블명을 와일드카드로 지정 
    • replicate-wild-ignore-table=와일드 카드: Replication대상외로 하고픈  테이블명을 와일드 카드로 지정
    • report-host=호스트명 : SHOW SLAVE HOSTS에서 표시되는 이름을 지정 
    • report-user=유저명: SHOW SLAVE HOSTS에 표시되는 유저명을 지정. Master에서는 --show-slave-auth-info옵션을 지정하고 있어야함.
    • report-password=패스워드: SHOW SLAVE HOSTS에 표시되는 패스워드를  지정. Master에서는 --show-slave-auth-info옵션을 지정하고 있어야함.
    • report-port=포트명: SHOW SLAVE HOSTS에서 표시되는 포트번호를 지정 
    • skip-slave-start: mysqld기동시에 Slave를 기동하지 않음. 
    • slave-load-tmpdir="디렉토리 [:디렉토리]":Slave에서 임시 파일을 작성하는 디렉토리를 지정.  「:」로 복수지정가능 
    • slave-skip-errors="에러번호[,에러번호]" : 지정된 에러가 발생하더라도 Slave처리를 정지시키지 않음. 「,」로 복수지정 
    • net_retry_count=횟수 : 읽어들이기가 중단된 경우, 몇번 다시 시도할 것인가 지정 
    • net_buffer_length=바이트수:  통신에 사용하는 버퍼 
    • net_read_timeout=초수:  읽어들이기가 중단된 경우, 몇초 기다려서 에러를 낼 것인가 지정 
    • net_write_timeout=초수: 써넣기가 중단된 경우, 몇초를 기다려서 에러를 낼 것인가 지정 
    • relay_log_purge : 필요없는 relay로그를 제거
    • relay_log_space_limit=바이트수:  relay로그의 합계 사이즈가 이 값을 넘으면 SQL스레드가 처리를 해서  공간이 생길때까지  I/O스레드는 처리를 정지
    • slave_compressed_protocol: 통신내용을 zlib압축
    • slave_net_timeout=초수: 데이터통신중  이 초수 이상으로 Master로부터 응답이 없으면 Slave는 접속을 끊고  재접속을 시도
    • slave_transaction_retries=횟수 : SQL스레드가 트랜잭션 실패했을 경우  바로 에러로 하지 않고 몇번 재시도할 것인지 지정. 


      2010년 7월 6일 화요일

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

      바이너리 로그갱신의 일시적인 ON/OFF ( SET SQL_LOG_BIN)

      바이너리 로그의 갱신을 일시적으로 ON/OFF하는 경우는 SET SQL_LOG_BIN을 실행한다.
      보통 Replication 대상외로 하고 픈 테이블(권한 테이블)등을 갱신할 때만 사용한다.

      구문은 다음과 같다.

      SET SQL_LOG_BIN= {0|1}

      「1」은 이 세션의 갱신을 바이너리로그에 기록한다. 기본값이다. 「0」은 이 세션의 갱신을 바이너리로그에 기록하지 않는다.

      Master이 상태확인(SHOW MASTER STATUS)

      현재 써넣고 있는 바이너리로그와 그 위치를 확인하는 경우는 SHOW MASTER STATUS를 실행한다.


      바이너리 로그의 목록을 표시(SHOW BINARY LOGS)

      현재 유지하고 있는 바이너리 로그를 목록표시하기 위해서는 SHOW BINARY LOGS를 사용한다.
      구문은 다음과 같다.

      SHOW [MASTER|BINARY] LOGS


      바이너리로그내의 이벤트를 표시 ( SHOW BINLOG EVENTS ) 

      지정된 바이너리 로그파일의 이벤트를 나타낸다. 구문은 다음과 같다.

      SHOW BINLOG EVENTS
      [IN '바이너리로그파일'] [FROM 위치1] [LIMIT [오프셋,] 갯수]

      바이너리 로그파일명을 지정하지 않는 경우는 최초의 바이너리 로그를 읽어들인다.
      LIMIT으로 이벤트의 읽어들일 위치(오프셋)과 표시할 이벤트의 갯수를 지정할 수 있다.
      LIMIT가 없는 경우는 모든 이벤트를 표시하게 되어 엄청난 양이 될 수 있으므로 주의해야한다.



      지정한 바이너리 로그의 삭제 (PURGE MASTER LOGS)

      바이너리 로그를 삭제하려면 PURGE MASTER LOGS를 사용한다. 구문은 다음과 같다.

      PURGE {MASTER|BINARY} LOGS TO '바이너리 로그파일'
      PURGE {MASTER|BINARY} LOGS BEFORE 'YYYY-MM-DD hh:mm:ss'


      TO '바이너리 로그파일'의 지정의 경우는 지정된 파일 한개 전까지가 삭제된다.
      BEFORE '날짜시간'도 지정된 일시보다 전의 파일이 삭제된다.

      이 조작을 수행하면 호스트명-bin.index파일도 자동으로 변경된다.


      Slave정보의 확인(SHOW SLAVE HOSTS)

      Slave 정보를 얻기위해서는 SHOW SLAVE HOSTS를 실행한다.
      Slave 서버에 --report-host=옵션을 지정하고 있는 것에 한정된다.

      실행후에 나타나는 컬럼 Rpl_recovery_rank는 5.1.12-beta버전에서는 사용되어지지 않고 의미도 없다.
      또, Master 서버에 --show-slave-auth-info옵션을 지정한 경우는 유저명과 패스워드도 표시된다.

      이것은 Slave에서 다음의 옵션으로 지정한 값에 지나지 않는다. 실제로 Replication이 사용하고 있는 패스워드등은 표시되지 않는다.

      --report-host=
      --report-port=
      --report-user=
      --report-password=


      Master의 초기화
      모든 바이너리 로그파일을 삭제하고 Master를 초기화하는 경우는 RESET MASTER를 실행한다.
      Replication운용중에 사용하지는 않겠지만 처음에 Replication을 재셋업할 경우등에 사용한다.

      주의해서 사용해야한다.

      2010년 7월 5일 월요일

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

      Slave데이터베이스의 유저명, 호스트, 패스워드 등록

       GRANT REPLICATION SLAVE ON *.*
       TO '유저명'@'호스트' [IDENTIFIED BY '패스워드']

      global 권한이므로  ON *.*이 된다.


      권한의 부여
       Master와 Slave의 내용을 확인할 수 있도록 SHOW MASTER  STATUS와 SHOW SLAVE STATUS를 실행할 권한을 부여한다.

       GRANT REPLICATION CLIENT ON *.*
       TO '유저명'@'호스트' [IDENTIFIED BY '패스워드']

       global 권한이므로  ON *.*이 된다.
        
      바이너리로그의 로테이트(FLUSH LOGS) 

      바이너리로그를 로테이트시킨다.  이 조작으로 Replication에서 부정합이 발생하지 않는다.

      이 조작을 실행하면 호스트명-bin.index파일도 자동으로 변경된다.  SQL처리중에 FLUSH LOGS가 실행된 경우,  그것이 완료된 뒤에  로그의 로테이트와 .index파일이 변경된다.


      Binlog Dump 스레드의 확인 

      Master는  바이너리로그에 기록되어있는 쿼리를  Slave에 송신하기 위해서 스레드를 작동한다. (Binlog Dump 스레드)  Binlog Dump 스레드는 SHOW PROCESSLIST로 확인가능하다.

      내용은 아래와 같다.
      • User, Host : Slave 접속 유저명과 호스트명 
      • Command  Binlog Dump: COM_BINLOG_DUMP. 바이너리로그를 보내는 루틴에 들어가 있는 상태. msql_binlog_send()로 보낸다. 
      • Connect Out: Slave가 접속중  
      • Register Slave :  COM_REGISTER_SLAVE. --report-host=를 지정한 Slave의 정보를 취득처리중. register_slave()가 호출된다.
      • State Finished reading one binlog; switching to next binlog: 스레드는 어떤 바이너리로그를 다 읽어들여서 다음의 바이너리 로그파일을 open하려고 하는 상태 
      • Has sent all binlog to slave; waiting for binlog to be updated: 모든 바이너리로그를 Slave에 전송이 끝나고  새로운 이벤트를 기다리고 있는 상태 
      • Sending binlog event to slave: 바이너리로그를 읽고 Slave에 송신중 
      • Waiting to finalize termination: 스레드 종료할 때의 상태

      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] 이벤트명