구글 상단(728x90)


MySql Binlog 파일 복구시 원하는 쿼리문만 가공하여 추출하기.. 컴퓨터

MySql 을 사용하다보면 사용자들이 종종 디비를 날려먹거나
혹은 특정 작업만 따로 백업을 받아 놓고 싶은 경우가 발생하는데
이때 MySql 의 바이너리 로그파일을 이용하면 일이 쉬워집니다.

먼저 무작정 MySql의 바이너리 파일을 이용하여 쿼리문을 추출하면
양도 많고, 또 일일이 쿼리문을 걸러내야 하는데 mysqlbinlog를 사용할때 리눅스
기본 명령어 옵션을 이용하면 이런 작업들을 좀 수월하게 할 수 있죠~

$경로/mysqlbinlog /path/to/바이너리_로그파일 | \
grep -i -e "^update" -e "^insert" -e "^delete" -e "^replace" -e "^alter" | \ <= 수정,입력,삭제,변경,제거 쿼리문만 추출
cut -c1-100 |\ <= 추출할 쿼리문에서 1~100번 문자열까지만
tr '[A-Z]' '[a-z]' | \ <= 대문자를 소문자로 변환
sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/ set .*$//;s/ as .*$//" | sed -e "s/ where .*$//" | \ <=  정규식적용으로 한라인씩 읽음
sort | uniq -c | sort -nr <= 정렬하여 보여줌 (uniq 명령어는 중복쿼리 제거)

========================== 예제 =========================

mysqlbinlog /path/to/mysql-bin.000706 | \
grep -i -e "^update" -e "^insert" -e "^delete" -e "^replace" -e "^alter" | \
cut -c1-100 | \
tr '[A-Z]' '[a-z]' | \
sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/ set .*$//;s/ as .*$//" | sed -e "s/ where .*$//" | \
sort | uniq -c | sort -nr


<실제 출력 화면.. 본인이 관리하는 DB라서 테이블명은 가림>

이외에도 특정 날짜를 기준으로도 쿼리문을 추출 할 수 있는데 본인이 직접 포스팅하기 보단
이와관련해서 잘 포스팅되어진 블로그를 링크하겠습니다.

http://kemo.tistory.com/1 <= mysqlbinlog 이용해서 특정 날짜만 추출하기

참조문서 : http://dev.mysql.com/doc/refman/5.5/en/binary-log.html

P.S : 퍼가는건 좋은데 출처 한 줄 어렵지 않습니다~ ^^;

덧글

  • 닉넴 2014/11/05 17:08 # 삭제 답글

    우왕ㅋ굳ㅋ 감사요
  • 여름눈 2014/11/05 20:14 #

    2년전 포스팅인데 덧글이 달리다니 제가 더 감사하네요~ ^^
  • okna pcv piła venus 2022/09/18 17:43 # 삭제 답글

    이 게시물이 마음에 듭니다. 더 자주 게시하십시오.
댓글 입력 영역


구글 측면(방응형)