반응형

--read-from-remote-server

mysqlbinlog 유틸리티가 원격 서버의 바이너리 로그를 백업하도록 하는 핵심 옵션. 이 옵션이 명시되지 않으면

mysqlbinlog는 예전과 같이 로컬 디스크에 있는 바이너리 로그를 찾아서 텍스트 파일로 변환하는 작업만 수행할 것이다.

mysqlbinlog 유틸리티가 --read-from-remote-server 옵션과 함께 실행될 때에는 반드시 원격 서버에 접속할 때

필요한 정보인 --host와 --user 그리고 --password와 --port 옵션이 함께 사용되어야 한다.


--raw

이 옵션이 사용되면 mysqlbinlog 유틸리티는 가져온 이진 형태의 바이너리 로그를 그대로 디스크로 기록한다.

만약 이 옵션이 없으면 mysqlbinlog 유틸리티는 텍스트 형태로 변환된 바이너리 로그를 생성할 것이다.


--stop-never

mysqlbinlog 유틸리티를 사용해서 원격 서버에서 지정된 몇 개의 바이너리 로그만 가져올 수 있고 지정된 바이너리 로그 파일부터

멈추지 않고 계속 생성되는 바이너리 로그 파일을 로컬 디스크로 저장하도록 할 수도 있다. --stop-never 옵션이 사용되면

mysqlbinlog 유틸리티는 원격 서버가 종료되거나 커넥션이 끊어지지 않는 한 멈추지 않고 계속 원격 서버의 바이너리 로그를 복사한다.


--stop-never-slave-server-id=id

--stop-never 옵션이 사용되면 mysqlbinlog 유틸리티는 하나의 슬레이브처럼 작동한다. MySQL 복제에서 항상 모든 서버는 고유한

server-id를 가져야 한다. 이때 mysqlbinlog가 어떤 server-id를 사용할지를 지정해주는 옵션이다. 

특별히 명시되지 않으면 최댓값인 65535로 초기화된다.


--result-file

원격서버로부터 가져온 바이너리 로그 파일을 저장한 파일 명의 접두어(Prefix)를 설정한다. 예를 들어서 원격 서버의 바이너리 로그

파일이 mysql-bin.000002이고 --result-file 옵션이 "/backup/copied-"로 설정되어 있다면 mysqlbinlog는 백업해온 바이너리 로그를

"/backup/copied-mysql-bin.000002"라는 파일명으로 저장할 것이다. 만약 파일명을 원격 서버와 동일하게 유지하려면

--result-file 옵션에 "/backup/"과 같이 디렉터리명만 설정해주면 된다. 디렉터리인 경우에는 반드시 마지막에 디렉터리 구분자인 "/"를

포함하도록 하자.


--to-last-log

이 옵션이 mysqlbinlog와 함께 사용되면 mysqlbinlog는 지정된 바이너리 로그 파일뿐만 아니라 그 이후에 발생한 모든 바이너리 로그를

가져오게 된다. 만약 몇 개의 바이너리 로그 파일만 지정해서 그 파일만 백업하려면 이 옵션이 명시되면 안 된다.

그리고 --stop-never 옵션이 사용되면 자동으로 --to-last-log 옵션도 활성화된다.


#!/bin/sh


BACKUP_BIN=/mysql5.6/bin/mysqlbinlog

LOCAL_BACKUP_DIR=/backup/binlog


REMOTE_HOST=192.168.0.1

REMOTE_PORT=3306

REMOTE_USER=replication_user

REMOTE_PASS=replication_pass


# time to wait before reconnecting after failure

SLEEP_SECONDS=10


## 필요 시 디렉터리 생성

mkdir -p ${LOCAL_BACKUP_DIR}

cd ${LOCAL_BACKUP_DIR}


## while 루프를 돌면서 커넥션이 끊어지면 일정 시간 대기 후 재접속하도록 구현

WHILE :

DO

    LAST_FILE='ls -1 ${LOCAL_BACKUP_DIR} | grep -v orig | tail -n 1'

    TIMESTAMP='date + %s'

    FILE_SIZE=$(stat -c%s "$LAST_FILE")


    IF [ ${FILE_SIZE} -gt 0 ]; THEN

        echo "완성되지 않은 백업 파일을 리네임합니다."

        mv ${LAST_FILE} ${LAST_FILE}.orig_${TIMESTAMP}

    FI


    touch ${LAST_FILE}

    echo "${LAST_FILE} 바이너리 로그 파일부터 백업 재개합니다."

    ${BACKUP_BIN} --raw --read-from-remote-server --stop-never --host ${REMOTE_HOST} \

        --port ${REMOTE_PORT} --user ${REMOTE_USER} --password ${REMOTE_PASS} ${LAST_FILE}


    echo ">> mysqlbinlog 가 종료되었습니다. 리턴 코드 : $?"

    echo ">> ${SLEEP_SECONDS} 초 이후에 다시 재접속 및 백업 재개합니다."

    sleep ${SLEEP_SECONDS}

DONE


반응형

'연구개발 > MYSQL' 카테고리의 다른 글

MySQL 5.6 gtid replication manadatory options  (0) 2015.03.27
MySQL MHA(Master High Availability)  (0) 2015.03.24
percona-toolkit 설치  (0) 2015.03.19
Seconds_Behind_Master  (0) 2015.03.18
MHA  (0) 2015.03.18

+ Recent posts