ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mysql Slave (replication)
    └ Mysql 2013. 10. 4. 16:00


    Mysql Replication 구축


    작성일 2013.10.04

    추가 수정일 2014.04.14

    우선 서버 설치.. 이미 과거 포스팅 여러 차례이므로 접어 둔다. 



    Master 

    1. 리플 계정 생성 

    mysql> INSERT INTO `user` (`Host`, `User`, `Password`, ~ 생략) VALUES('슬레이브 IP','in_repl','비밀번호', ~ N 아니면 0);

    mysql> FLUSH PRIVILEGES;

    Tip. bin log 를 Slave DB 계정이 접속해서 가져가는 방식이다.

    꼼수로 이런 방법도 있지요~ 링퀴


    Slave 

    1. Database 생성

    mysql> CREATE DATABASE `BB` DEFAULT CHARACTER SET utf8;



    2. dump 부어넣기

    ]# /mysql/bin/mysql -uroot -p BB < BB.sql 



    3. 리플 설정

    CHANGE MASTER TO

           MASTER_HOST='마스터 IP',

           MASTER_USER='in_repl',

           MASTER_PORT=3306,

           MASTER_PASSWORD='계정비밀번호',

           MASTER_LOG_FILE='db01-bin.000005(덤프시 파일명)',

           MASTER_LOG_POS=2148737(덤프시 마스터 포지션);



    4. 슬레이브 START

    mysql> slave start;



    5. 슬레이브 상태 확인

    I/O 스레드 : 마스터와 관련된 트래픽

    SQL 스레드 : 슬레이브 데이터 동기화

    mysql> show slave status \G

    *************************** 1. row ***************************

    Slave_IO_State:                                // 정상시 : Waiting for master to send event

    Master_Host: 마스터IP

    Master_User: in_repl

    Master_Port: 3306

    Master_Log_File: db01-bin.000007        // 마스터의 이진 로그파일

    Read_Master_Log_Pos: 4274059 // 마스터의 포지션, 슬레이브 I/O 에러 발생시 비어있음

    Relay_Log_File: db02-relay-bin.000005   // 중계 로그 파일, 슬레이브에 존재, 마스터 이진로그에서 전송된 정보

    Relay_Log_Pos: 471705                        // 중계로그파일 현재 위치

    Relay_Master_Log_File: db01-bin.000007

    Slave_IO_Running: No                         // 정상시 Slave_IO_Running: Yes

    Slave_SQL_Running: No                      // 정상시 Slave_SQL_Running: Yes

    Last_Errno: 1539

    Last_Error: Error 'Unknown event 'event_day'' on query. Default database: 'BB'. Query: 'drop event `BB`.`event_day`'

    Skip_Counter: 0

    Exec_Master_Log_Pos: 471552 // Slave bin 반영중인 포지션

    Seconds_Behind_Master: NULL           // 비정상

     // 슬레이브 최근의 이벤트와 Relay_Log_File 에 기록된 마스터 이진로그의 시간차이를 초단위로 나타냄.

    // 정상시 Seconds_Behind_Master: 0
    // 마스터와 연결안된경우 : NULL

    Last_SQL_Errno: 1539

    Last_SQL_Error: Error 'Unknown event 'event_day'' on query. Default database: 'BB'. Query: 'drop event `BB`.`event_day`'



    6. 슬레이브 에러 처리


    슬레이브에서 사용하지 않는 이벤트임.

    mysql> stop slave;
    mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    mysql> start slave;



    7. 이벤트 Drop 
    시원하게 삭제해주고..

    환경에서 원천 봉쇄!!!
    mysql> SET GLOBAL event_scheduler = OFF;

    mysql> SHOW VARIABLES LIKE '%event_scheduler%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | event_scheduler | OFF   |
    +-----------------+-------+
    1 row in set (0.00 sec)


    shell> vi /etc/my.cnf

    #event_scheduler=1      #주석처리하기



    8. 최종 안심하기

    Master 에서 DB생성하고 Slave 에서 확인한다. (물론 삭제도 확인)

    CREATE DATABASE a1;

    DROP DATABASE a1;


    9. 재부팅시 디비 자동 실행

    $ vi /etc/rc.local

     

    #!/bin/sh

    #

    # This script will be executed *after* all the other init scripts.

    # You can put your own initialization stuff in here if you don't

    # want to do the full Sys V style init stuff.

     

    touch /var/lock/subsys/local

    /bin/sh /mysql/bin/mysqld_safe &


    '└ Mysql' 카테고리의 다른 글

    [Query] Small Tip!  (0) 2014.04.14
    Mysql MyISAM recovering 테이블 복구  (0) 2013.09.16
    mysql client version 이랑 DB version 다를때  (0) 2013.09.10

    댓글

Designed by Tistory.