Windows의 mysql (apm또는 xampp)에서 Sql을 캡쳐하는 방법?

Windows의 mysql (apm또는 xampp)에서 Sql을 캡쳐하는 방법?

QA

Windows의 mysql (apm또는 xampp)에서 Sql을 캡쳐하는 방법?

본문

MySQL 이나 MSSQL에서 실행되고 있는 SQL Query를 로그해 볼 수 있는 방법이 있나요?

 

SQL에 대해서 공부해 보고 싶은데,  라이브로 돌아가는 쿼리를 보고 싶어서..

이 질문에 댓글 쓰기 :

답변 6

Mysql 버젼이 어떻게 되는지 모르겠지만

 

5.1 이상시에는

 

mysql 에서 root 로 로그인 하신 다음에 

기본 설정을 아래처럼 변경

 

show VARIABLES where variable_name like ‘%log%';

SET GLOBAL log_output = ‘FILE';

SET GLOBAL general_log = ‘on';

 

이렇게 하시면 모든 Query 로그가 파일로 남습니다.

 

모든 RDBMS 에는 

옛날 버젼이 아닌 경우 대부분 이런 기능이 다 있더라구요.

 

 

괜찮네요 로그 파일로 만들어서 PHP로 파일 읽어들여 보는것도.

실시간으로 보고싶으시다길래, 과거에 만들어둔 파일만 찾아냈는데,
효율적인 측면은 이게 좋죠 : ) 의미없는 커넥션이 없어도 되고

뭐 DB마다 쿼리로그를 다 남길 수 있을 겁니다. 아마

 

MySQL 같은 경우 my.cnf 에 로그 설정이 있습니다.

 

기본으로 잡아두면 대개 MySQL DB가 있는 data 폴더(진짜 DB저장 자료들이 있는)에

 

mysql-bin.00001 이런식으로 남을 겁니다.

 

binary 파일이라 역시나 bin 폴더에 있는 mysqlbinlog 라는 실행파일을 이용해서 확인할 수 있는데요.

(설정에 따라 txt 파일로도 저장할 수 있을 겁니다...가물가물하네여)

 

여기 적기에는 내용이 많으니, 위의 힌트로 직접 검색해보시기 바랍니다.

 

리눅스에서는 tail 명령어로 실시간으로 확인 할 수 있지만, 윈도우는 비슷한 기능을 하는 프로그램을 이용하셔야 할 겁니다.

 

MSSQL 은 잘 모르겠네요. 검색해보시면 나올겁니다.

 

 

열심히 검색해서 테스트 해보고 있는데 잘 안되네요..

 

예전에 APMSETUP을 사용하다가,  버전이 너무 오래되서..  XAMPP를 사용해 보고 있습니다.

 

my.ini에 slow log 옵션을 넣어봐도 로그가 안생겨서.. 혹시 고수님들의 도움을 찾고자 올려 봅니다.

slow log는 그냥 슬로우 쿼리 확인하는 거구요.
그거 말고 쿼리 로깅이 따로 있어요.

http://happywithu.com/index.php?mid=mysql&sort_index=readed_count&order_type=desc&document_srl=925

http://kimyongjin.com/post/631

참고

또 한가지 my.ini를 고쳤는데 설정이 반영이 안된다면 혹시 다른 곳에 실제 my.ini 파일이 있을 수 있어요. system32 폴더나...이런 곳에요. 것도 확인해보시고.

my.ini 수정후에 mysql 재시작 해주시는 건 아실거고..암튼 잘되시길

과거 다녔던 회사의 백업정보에서 찾았네요 : )

 


<?php 
// @npc:20130303:응급조치
$_dbset['host']="";
$_dbset['user']=""; 
$_dbset['pass']="";
$_dbset['name']="";
 
  
$connect = @mysql_connect($_dbset['host'], $_dbset['user'], $_dbset['pass']);
@mysql_select_db ($_dbset['name'], $connect);
 
// MySQL의 SHOW PROCESSLIST 명령어로 Sleep이 15초가 넘으면 강제로 해당 프로세스를 죽임
$result = @mysql_query("SHOW PROCESSLIST", $connect); 
while ($proc = @mysql_fetch_assoc($result)) { 
    if ($proc["Command"] == "Sleep" && $proc["Time"] > 15) { 
        //@mysql_query("KILL " . $proc["Id"], $connect); 
        // 20150620 : JRevirthuum 추가 - 우선 주석처리 해두었습니다. 이것은 실행용이고, 아래의 쿼리는 화면에 출력용입니다 : )
    } 
} 
 
$result = @mysql_query("SHOW PROCESSLIST", $connect); 
while ($proc = @mysql_fetch_assoc($result)) { 
	echo $proc["Id"]."(".$proc["Command"]."):".$proc["Time"]."<br />";
} 
@mysql_close($connect);
echo "오늘은 무사히 넘겼는가!";
?> 

 

위 소스 중에서, 우선 [주의!]mysql_query 함수를 빼고 echo 를 실행하면,

조건문에 의해서 대기시간이 15초(씩이나!) 걸리는 슬로우쿼리가 화면에 출력됩니다 : )

 

 

 

http://static.se2.naver.com/static/img/bg_b1.png) repeat;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://static.se2.naver.com/static/img/bg_b1.png',sizingMethod='scale');color:#888888;">

[주의!] 

저 부분을 실행한다고 하여 외적으로 사이트에 손실이 생기지는 않지만, 인터넷이 느린환경이나 아직 쿼리를 발송하고 있는 분(15초 씩이나!?)이 있다면 강제로 해당 쿼리실행이 중단당합니다.(하지만 확률적으로 엄청 낮은 편이고, 그렇게 되도 사용자는 대부분 '머야 회선이잠깐 죽었나?' 라고생각합니다)

 

위에 제가 적은 것은

테스트 목적이지, 실 서비스시에는 비추입니다.

그리고, Query 하나가 A4 용지 하나을 차지할만큼의 Query 가 아니라면

일일이 Query 을 페이지에서 실행 시켜보는게 최고입니다.

 

아래 제가 적은 것은 

File I/O 나 DB 쪽에 쌓을수 있는데, 부하측면과 하드 용량 잡아 

먹는 측면에서는 나중에 허걱 하실껍니다. 

이미 허걱했습니다 ㅠㅠ (썼던 글이 원글삭제로 날아갈때부터 ㅠㅠ)
ㅋㅋㅋ

로그수집방법론이 5.1 부터 달라졌나요?
4.x 때부터 로그 파일 쌓으면 후덜덜했거든요, 언론사라 그런가..ㅋㅋ
덕분에 튜닝이나 최적화 공부는 많이 되었지만요 : )

뎃글이 위로 보였다 아래로 보였다 하네요..

그래서 위에, 아래로 적다가 그랬를겁니다.

 

바꿘게 아니라, Slow Log 부분은 기존에 있었지만

실행 Query Log 은 RDBMS( oracle / imformix / sybase ) 등등을 따라 하다보니 그랬지 않을까 싶습니다.

 

DB 튜닝 부분은 Query 튜닝이 꽃이고, 

Query 튜닝과 프로그램소스을 같이 손 봐주는게 더 최적이지만

머리털은 슝슝 빠집니다.

 

여담으로 System에 따라 달라지겠지만, 웹의 경우에 오래된 사이트들은

튜닝하는데 1~2 개월 부터 작업 시간을 산정하고 시작해야 끝나더군요.

 

Query 잘 다루지 못한다면 않하는게 더 좋습니다...잘못했다간 더 느려 지거든요.

 

있었던 곳 특성상 고생 했던게 생각나네요. : )
Query를 잘 다루지 못하더라도 더 느려짐이 있더라도, 저는 해보는 게 낫다라는 생각이 있습니다. 실제 돌아가는 서비스에 무턱대고 한다면야 문제가 있는 것이지만, 확실히 무엇이든 실제의 경험에서 얻는것이 소중하다고 생각되거든요!

작성자는 원하는 답도 얻었고 하니, 즐거운 이야기들로 자게에서 뵈어요!

답변을 작성하시기 전에 로그인 해주세요.
전체 54
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT