MySQL binary log 를 통해서 어떤 SQL들이 실행되었는지 분석하는 방법을 설명한다.
일반적으로 binary log는 말그대로 binary형태로 데이터가 저장되어있기 때문에 일반적인 vim같은 에디터로는 내용을 확인할 수가 없다. 따라서 아래의 순서로 데이터를 변환해야 한다.
# 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 // 파일로 출력
--read-from-remote-server
옵션의 경우 리모트서버에서 binlog를 읽을 수 있게 처리해준다. 타겟이 되는 서버에 대한 옵션을 같이 써줘야한다.
--host
, --password
, --port
, --protocol
, --socket
, and --user
--hexdump
16진수로 덤프를 해준다. 복제에 문제가 생겼을 때 trace하는데 유용하다.
--rewrite-db
DB명을 바꿀 수 있다. 별거 아닌 것 같아도 복구 할때 유용하다.
--database
--binlog-do-db
옵션과 마찬가지로 특정 DB만 내린다. 이건 주의해야한다.
--start-datetime
, --stop-datetime
시점(시간)을 명시한다.
--start-position
, --stop-position
시점(포지션)을 명시한다.