목차

MySQL binary log 분석

MySQL binary log 를 통해서 어떤 SQL들이 실행되었는지 분석하는 방법을 설명한다.
일반적으로 binary log는 말그대로 binary형태로 데이터가 저장되어있기 때문에 일반적인 vim같은 에디터로는 내용을 확인할 수가 없다. 따라서 아래의 순서로 데이터를 변환해야 한다.

binary file 변환

# mysqlbinlog -vvv --base64-output=DECODE-ROWS binarylog_file > decodedlog_file

위와같이 명령을 내리게 되면 디코딩된 파일이 생성된다.
추가적인 옵션등은 아래와 같다.

# mysqlbinlog -d [데이터베이스명] [log-bin파일명] > [저장할 파일명]
ex) mysqlbinlog -d database_01 mysql-bin.00001 > restore_00001.sql

특정 기간의 로그내용만 변환

# mysqlbinlog --start-datetime='2016-03-01 00:00:00' --stop-datetime='2016-03-21 23:59:59' [log 파일명]  > [파일명].sql

특정 형식의 쿼리 내용만 변환

# mysqlbinlog [log 파일명] | grep -i -e "^create" -e "^update" | more      // 콘솔로 출력
# mysqlbinlog [log 파일명] | grep -i -e "^create" -e "^update"  >   [파일명].sql   // 파일로 출력

기타옵션들

옵션의 경우 리모트서버에서 binlog를 읽을 수 있게 처리해준다. 타겟이 되는 서버에 대한 옵션을 같이 써줘야한다.
--host, --password, --port, --protocol, --socket, and --user

16진수로 덤프를 해준다. 복제에 문제가 생겼을 때 trace하는데 유용하다.

DB명을 바꿀 수 있다. 별거 아닌 것 같아도 복구 할때 유용하다.

--binlog-do-db 옵션과 마찬가지로 특정 DB만 내린다. 이건 주의해야한다.

시점(시간)을 명시한다.

시점(포지션)을 명시한다.

참조링크