4.4 MySQL 로그 파일
MySQL 서버에 문제가 생겼을 때는 로그 파일들을 자세히 확인하는 습관을 들일 필요가 있다.
4.4.1 에러 로그 파일
MySQL이 실행되는 도중에 발생하는 에러나 경고 메세지가 출력되는 로그 파일이다.
에러 로그 파일 위치는 MySQL 설정파일(my.cnf)에서 log_err라는 이름의 파라미터로 정의된 경로에 생성된다.
설정 파일에 별도로 정의되지 않은 경우에는 데이터 디렉터리에 .err 확장자가 붙은 파일로 생성된다.
에러 메시지 종류
•
MySQL이 시작하는 과정과 관련된 정보성 및 에러 메시지
•
비정상적으로 종료된 경우 나타나는 InnoDB의 트랜잭션 복구 메시지
•
쿼리 처리 도중에 발생하는 문제에 대한 에러 메시지
•
비정상적으로 종료된 커넥션 메시지(Aborted connection)
•
InnoDB의 모니터링 또는 상태 조회 명령의 결과 메시지
•
MySQL의 종료 메시지
4.4.2 제너럴 쿼리 로그 파일(제네럴 로그파일, General log)
MySQL 서버에서 실행되는 전체 쿼리를 조회하기 위해 사용한다. 쿼리 로그 파일에는 시간 단위로 실행했던 쿼리의 내용이 모두 기록된다.
슬로우 쿼리 로그와는 조금 다르게 제너럴 쿼리 로그는 실행되기 전에 MySQL이 쿼리 요청을 받으면 바로 기록하기 때문에 쿼리 실행 중에 에러가 발생해도 일단 로그 파일에 기록된다.
4.4.3 슬로우 쿼리 로그
슬로우 쿼리 로그 파일엔 long_query_time 시스템 변수에 설정한 시간 이상의 시간이 소요된 쿼리가 기록된다. 실제 소요된 시간을 기준으로 기록 여부를 판단하기 때문에 정상적으로 실행된 쿼리만 기록된다.
log_output 옵션을 이용하여 로그를 파일로 기록할지 테이블로 기록할지 선택할 수 있다.
하지만 테이블로 설정하더라도 slow_log 테이블과 general_log 테이블은 CSV 스토리지 엔진을 사용하기 때문에 파일 저장과 동일하게 동작한다.
로그 분석을 좀 더 쉽게 하기 위해 Percona Toolkit의 pt-query-digest 스크립트를 사용할 수 있다.
슬로우 쿼리 로그 구성
Time : 쿼리가 종료된 시점
User@Host : 쿼리를 실행한 사용자 계정
Query_time : 쿼리가 실행되는 데 걸린 시간
Lock_time : InnoDB의 경우 MySQL 엔진 레벨의 잠금과 스토리지 엔진 자체의 잠금을 가지고 있는데, Lock_time은 MySQL 엔진 레벨에서의 테이블 잠금에 대한 대기 시간을 의미한다. 이 값은 쿼리 실행 전의 잠금 체크와 같은 코드 실행 시간까지 포함되기 때문에 매우 작은 값이라면 무시해도 무방하다.
Rows_examined : 쿼리가 처리되기 위해 접근한 레코드
Rows_sent : 실제 클라이언트로 보내진 레코드