[Real MySQL] 4.4. 로그 파일

@lim · August 31, 2024

에러 로그 파일 (Error Log)

위치: MySQL 설정 파일(my.cnf)의 log_error 파라미터로 정의된 경로

주요 정보

  • MySQL 시작 과정 관련 정보 및 에러 메시지
  • InnoDB의 트랜잭션 복구 메시지 (비정상 종료 후 재시작 시)
  • 쿼리 처리 중 발생하는 문제에 대한 에러 메시지
  • 비정상적으로 종료된 커넥션 메시지 (Aborted connection)
  • InnoDB 모니터링 결과
  • MySQL 종료 메시지

서버의 상태 진단, 문제 해결, 비정상 종료 원인 파악을 위해 사용될 수 있다.

[mysqld]
log_error = /var/log/mysql/error.log
SHOW VARIABLES LIKE '%log_error%';
Variable_name Value
binlog_error_action ABORT_SERVER
log_error stderr
log_error_services log_filter_internal; log_sink_internal
log_error_suppression_list
log_error_verbosity 2

설정 방법

  • TABLE로 저장하고 싶다면

    SET GLOBAL log_output='TABLE';
  • 파일로 저장하고 싶다면

    SET GLOBAL log_output='FILE';

제너럴 쿼리 로그 파일 (General Query Log)

위치: general_log_file 파라미터로 지정된 경로

주요 정보

  • 모든 클라이언트의 접속 정보와 실행된 모든 쿼리가 기록
  • 쿼리 실행 전에 기록되므로, 실행 중 에러가 발생해도 로그에 기록
  • 전체적인 쿼리 패턴 분석, 디버깅에 유용하나 성능에 영향을 줄 수 있음

설정 방법

log_output 파라미터로 파일 또는 테이블 저장 선택 가능

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
SHOW VARIABLES LIKE "general_log%";

MySQL은 기본적으로 log 기록 부분이 OFF 되어 있다.

Variable_name Value
general_log OFF
general_log_file /var/lib/mysql/84ad8baffa51.log
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file='/var/lib/mysql/localhost.log';

슬로우 쿼리 로그 (Slow Query Log):

성능이 좋지 않은 쿼리 식별 및 최적화를 위해 사용한다.
쿼리 실행 완료 후 기록되므로, 정상 실행된 쿼리만 포함된다.

주요 정보

  • Query_time: 쿼리 실행 총 시간
  • Lock_time: MySQL 엔진 레벨의 테이블 잠금 대기 시간
  • Rows_examined: 쿼리 처리를 위해 접근한 레코드 수
  • Rows_sent: 실제 클라이언트로 전송된 결과 레코드 수

설정 방법

설정 파일(my.cnf)

  • long_query_time: 이 시간 이상 소요된 쿼리를 기록 (초 단위, 소수점 사용 가능)
  • slow_query_log_file: 파일 또는 테이블 저장 선택
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

쿼리문(SQL)

SHOW VARIABLES LIKE '%slow_query%';
Variable_name Value
slow_query_log OFF
slow_query_log_file /var/lib/mysql/84ad8baffa51-slow.log
SHOW VARIABLES LIKE '%long_query%';
Variable_name Value
long_query_time 10.000000
SET GLOBAL long_query_time=5;

로그 분석 도구

Percona Toolkit의 pt-query-digest

기능: 로그 파일을 분석하여 쿼리 성능 통계 제공

  • 슬로우 쿼리 통계: 전체 쿼리의 실행 시간, 잠금 대기 시간 등의 평균 및 최소/최대값

  • 실행 빈도 및 누적 실행 시간 랭킹: 쿼리별 응답 시간과 실행 횟수

  • 쿼리별 상세 정보: 실행 횟수, 누적 실행 시간, 응답 시간 히스토그램 등

로그 활용

  • 에러 로그는 주기적으로 검토하여 잠재적 문제 파악
  • 제너럴 로그는 필요할 때만 일시적으로 활성화 (성능 영향 고려)
  • 슬로우 쿼리 로그는 지속적으로 모니터링하여 성능 개선 포인트 파악
  • pt-query-digest 등의 도구를 활용하여 로그 분석 효율화

참고 내용

  • Real MySQL 8.0 1권 (백은빈, 이성욱)
@lim
기억은 기록기록