--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 |