안내
본 문서는 블로그의 운영자인 본인이 Stackoverflow에 올린 답변을 정리한 글입니다.
Stackoverflow URL
http://stackoverflow.com/questions/19834997/how-to-see-the-querie-logs-of-mysql-in-windows-8-1/19835171#19835171
질문
MySQL에서 수행되는 모든 Query들을 로깅하고 싶다. 어떤 방법이 있는가?
답변
MySQL은 General Log라는 기능을 제공하는데, General Log를 이용하여 MySQL에서 수행 중인 모든 Query를 로깅할 수 있다. General Log는 MySQL이 실행 중이더라도 켜거나 끌 수 있어서, 디버깅 할 때 유용하게 사용된다. 단, 질의가 너무 많은 서버에서 General Log를 켜 두면 모든 Query가 로그 파일에 기록될 수 있으므로 디스크가 금방 찰 수 있으므로 주의하자.
다음 질의를 이용하여 현재 General Log 기능이 켜진 상태인지, 로그가 저장되는 파일은 어디인지 조회할 수 있다.
mysql> SHOW VARIABLES LIKE '%general%';
+------------------+---------------------------------------+
| Variable_name | Value |
+------------------+---------------------------------------+
| general_log | OFF |
| general_log_file | /path/to/log |
+------------------+---------------------------------------+
“general_log = OFF”는 현재 로깅이 꺼진 것을 의미한다. MySQL이 실행 중인 경우 다음과 같이 General Log 기능을 켤 수 있다.
mysql> SET GLOBAL general_log = 'ON';
Query OK, 0 rows affected (0.00 sec)
로그가 저장되는 위치는 /path/to/log이며 “SET GLOBAL general_log_file = ‘/tmp/query.log’” 식으로 위치를 변경할 수 있다. 윈도 사용자의 경우 ‘C:/some_folder/log_filename’처럼 드라이브 명을 지정해야 하며 디렉터리 구분은 역슬래시가 아닌 슬래시(/)이다.
“MySQL” 카테고리의 추천 글
- MySQL IN subquery 성능. IN sub query는 가급적 사용을 피하자
- MySQL의 IN() v.s. EXISTS v.s. INNER JOIN 성능 비교
- MySQL INNER JOIN v.s EXISTS 성능 비교
- JOIN에서 중복된 레코드 제거하기
- MySQL 중복 레코드 관리 방법 - INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE
- MySQL GROUP BY 성능 최적화를 위한 INDEX 설계
- MySQL Query Cache를 빠르게 비우기
- MySQL Plugin에 대한 간단한 소개
- MySQL InnoDB Index Statistics
- MySQL Foreign key 사용 시 주의 사항 (Can’t create table (errno: 150))