2009년 9월 8일 화요일

로그활용7 - 바이너리로그

바이너리로그 목록표시

현재 존재하는 바이너리 로그 리스트를 출력하는 경우는 SHOW BINARY LOGS문, 또는 SHOW MASTER LOGS문을 사용합니다.

바이너리로그 리스트를 표시
mysql> SHOW BINARY LOGS;
또는
mysql>SHOW MASTER LOGS;

바이너리로그 삭제

바이너리로그 파일을 삭제하는 방법은 PURGE MASTER LOGS TO문을 사용한다.

바이너리로그 삭제
mysql>PURGE MASTER LOGS TO 'server-bin.000005';

PURGE MASTER LOGS TO문으로 바이너리로그 파일명을 지정한다. 지정된 바이너리로그 보다 작은 숫자 파일이 제거된다. 위 예를 보면 server-bin.000004까지의 번호 파일이 삭제되고 server-bin.000005은 삭제되지 않는다.

바이너리로그 변환

바이너리로그 파일을 에디터나 페이저로 보더라도 의미를 알 수 없다.
확실히 읽기 위해서 텍스트로 변환시켜주는 것이 mysqlbinlog명령어이다.
다음처럼 조작한다.

mysqlbinlog명령어 실행
shell$ ./bin/mysqlbinlog ./data/host-bin.000001
..
..

바이너리로그에는 오퍼레이터가 실행하지 않은 것도 기록된다.
mysqlbinlog를 실행하면 그 정보도 SQL문으로 출력된다.
그것이 주석이나 SET문이다.
주석은 # 이나 /* 로 시작한다.
mysqlbinlog로 생성된 SQL문을 원래대로 데이터를 복원하지 않으면 안되기때문에 SET문에서는 TIMESTAMP 나 AUTO_INCREMENT 값이 복원전과 복원후가 틀리지 않도록 지정한다.

또, SQL문 실행시에는 캐릭터셋도 문제가 되기 때문에 @@session.character_set_client등으로 지정한다.
[# at숫자]는 바이너리 로그 파일에 있어서 기술위치(바이트)이다.
[# at숫자]에서부터 [# at숫자]사이를 이벤트라고 부른다.