시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
tcpdump로 MySQL 쿼리 확인

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
jjun



가입: 2009년 12월 10일
올린 글: 8

올리기올려짐: 2010.4.26 월, 11:55 am    주제: tcpdump로 MySQL 쿼리 확인 인용과 함께 답변

트래픽이 폭주하는날 DB에서 어떤 쿼리가 실행되고 있는지,
MySQL replication 환경에서 쿼리가 구분되어 실행되는지 궁금해서 찾아본 자료입니다.

slow query 로그는 지정된 시간보다 느리게 되는 것만 보입니다.
인용:
general log도 설정도 있는 것 같은데, DB서버 재시작이 필요하므로..

다른 방법으로는 MySQL Proxy라는 것으로 볼 수 도 있지만,
tcpdump로 네트워크 트래픽에서도 찾아볼 수 있다고 합니다.

출처 : http://jetpackweb.com/blog/2009/09/16/unobstrusive-viewing-of-mysql-queries-with-tcpdump/


아래에서 -i lo 만 실제 통신에 사용되는 장치명으로 변경하면 됩니다.
보통 -i eth0 입니다.

코드:

tcpdump -i lo -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
  if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {
    if (defined $q) { print "$q\n"; }
    $q=$_;
  } else {
    $_ =~ s/^[ \t]+//; $q.=" $_";
  }
}'


> tcpdump.out 과 같이 리다이렉션을 추가하여 파일로 저장해서 분석할 수 도 있습니다.
다만 시간이 기록이 안되는 것이 아쉽습니다.
tcpdump 옵션을 추가할면 될것도 같는데 확인해봐야겠습니다.
또한 사용되는 perl 구문에 대해서도 분석이 필요합니다.

* 실행된 select/update/insert/delete 쿼리 개수 확인용

인용:

cat tcpdump.out | grep -vi "set" | awk '{ print $1 }' | sort | uniq -c | sort -r | more
------
72556 select
2475 SELECT
39 insert
26 delete
7 INSERT


* 쿼리가 실행된 tables과 쿼리 갯수 확인용
인용:

cat tcpdump.out | grep -vi "set" | awk -Ffrom '{ print $2 }' | awk '{ print $1}' | sort | uniq -c | sort -r | more
------
205915 테이블명1
60062 테이블명2
43146 테이블명3


나중에 별도로 통계용으로 쓰기 위해서는 다음과 같이 사용해도 된다고 합니다.

코드:

tcpdump -i lo port 3306 -s 65535 -x -n -q -tttt> tcpdump.out


이렇게 저장된 tcpdump.out은 Maatkit 이라는 MySQL toolkit에 포함된 mk-query-digest 명령의 -type=tcpdump 옵션을 이용해서 확인이 가능하다고 합니다.

참고 : http://www.mysqlperformanceblog.com/2009/07/01/gathering-queries-from-a-server-with-maatkit-and-tcpdump/


jjun 가 2010.4.27 화, 12:54 pm에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2010.4.27 화, 8:47 am    주제: tcpdump로 MySQL 쿼리 확인 (추가 자료) 인용과 함께 답변

2008년에 써둔 'MySQL 쿼리 실시간 모니터링 및 저장하기'도 참고하시기 바랍니다.

다음과 같은 내용이 있습니다.

1. tcpdump로 MySQL쿼리를 스니핑할 때, highlight하는 방법 (이 부분은 jjun님 쓰신 글과 핵심은 같음)
2. 스니핑할 때, 특정 쿼리문만 찾는 방법
3. php에서 MySQL 실행쿼리를 텍스트(error log파일)로 저장하는 법
4. MySQL 5.1에서 실행 쿼리 로그를 저장하는 방법
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보 시간대: GMT + 9 시간(한국)
페이지 1 중 1

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group