4.4 아키텍처 - MySQL 로그 파일

Tarte·2025년 11월 29일

서론
로그 파일은 MySQL 상태 진단의 가장 기본 도구이므로 로그 파일을 잘 살펴보자

4.4.1 에러 로그 파일

MySQL 내부에서 발생하는 각종 에러, 경고, 서버 시작/종료 정보 등을 기록

4.4.1.1 서버 시작/파라미터 적용 확인 메시지

MySQL을 재시작하면 에러 로그에 다음이 남음:

  • 서버 시작 성공 여부(ready for connections)
  • 파라미터가 정상 적용되었는지
  • 잘못된 파라미터가 무시됐는지(ignore)
    왜 중요한가?
    → MySQL 설정 파일(my.cnf)을 수정하고 재시작할 때, 반드시 에러 로그로 설정 적용 여부를 확인해야 하기 때문

4.4.1.2 비정상 종료 후 InnoDB 복구 메시지

서버가 강제로 꺼졌거나 비정상 종료되면, 다음 실행 시 InnoDB가 자동 복구(recovery)를 시도함
복구 내용 예:

  • 완료되지 않은 트랜잭션 롤백
  • 디스크에 기록되지 않은 버퍼 풀 데이터 flush
    복구 실패 시:
  • innodb_force_recovery 를 1~6 단계로 설정해 강제 복구해야 할 수도 있음

4.4.1.3 쿼리 처리 도중 발생하는 문제 메시지

  • deadlock
  • foreign key 오류
  • 디스크 I/O 문제
  • 테이블 손상

4.4.1.4 비정상 커넥션 종료

  • 클라이언트가 소켓을 정상 종료하지 않고 갑자기 끊을 때 기록됨
    원인 예:
  • 애플리케이션에서 커넥션 close 안 함
  • 네트워크 불안정
  • max_connect_errors 제한을 넘김 → host blocked 발생

4.4.1.5 InnoDB 모니터링 / 상태 정보 출력

SHOW ENGINE INNODB STATUS or deadlock monitor, lock monitor 활성화 시
매우 큰 양의 정보가 에러 로그에 출력됨
문제: 모니터링을 켜둔 채 방치하면 에러 로그가 수십 GB가 될 수도 있음

4.4.1.6 MySQL 종료 메시지

  • 정상 종료: Received SHUTDOWN from user ...
  • 비정상 종료: segmentation fault → 스택 트레이스 출력
    => 이 메시지가 서버 다운 원인을 찾는 유일한 실마리가 됨

4.4.1 제너럴 쿼리 로그 파일

MySQL이 수신한 모든 쿼리를 기록하는 로그
특징

  • 쿼리가 실행되기 ‘전’에 기록됨
    (실행 실패해도 로그에 남음)
  • 너무 많은 로그가 쌓이므로 운영환경에서는 거의 사용하지 않음
    확인 방법
SHOW GLOBAL VARIABLES LIKE 'general_log%';
  • general_log = ON/OFF
  • general_log_file = 로그 파일 위치
  • log_output = FILE or TABLE

출력 예시

Connect root@localhost
Query Show databases
Query Select @@version_comment
Query Show tables

4.4.1 슬로우 쿼리 로그

튜닝 대상 쿼리를 찾을 때 가장 중요한 로그

언제 기록되는가?

  • long_query_time 에 설정된 시간 이상 걸린 쿼리를 기록함.
  • long_query_time 기본값은 10초
  • 소수점으로 설정하면 마이크로초까지 가능
  • 예:
SET GLOBAL long_query_time = 0.1;  -- 100ms 이상이면 기록

기록되는 정보

  • Time: 쿼리가 끝난 시간 (시작 시간이 아님)
  • User@Host: 실행 사용자
  • Query_time: 쿼리 총 실행 시간
  • Lock_time: MySQL 엔진 레벨의 테이블 락 대기 시간
    (InnoDB 레코드 잠금과는 무관)
  • Rows_examined: 얼마나 많은 레코드를 읽었는가
  • Rows_sent: 클라이언트에 보낸 행 수

Lock_time이 InnoDB에서 의미 없는 이유

  • InnoDB 엔진의 레코드 수준(lock)은 MySQL 서버에서 측정 못 함
  • Lock_time은 거의 항상 매우 작게 나옴 → 튜닝 지표로 부적절

4.4.3.1 슬로우 쿼리 통계

파일 전체를 통계로 요약한 정보

  • 전체 실행 횟수
  • 평균/최소/최대 쿼리 시간
  • 평균 Lock_time
  • 평균 rows_examined / rows_sent
  • Query size

4.4.3.2 쿼리별 실행 횟수 / 누적 실행 시간 랭킹

  • 슬로우 쿼리를 정렬해서 “문제 쿼리 순위”를 자동으로 보여 줌
  • 이걸 통해 무엇부터 튜닝해야 할지 바로 알 수 있음
1) 특정 SELECT orders joined …
2) 특정 SELECT users_details…
3) …

4.4.3.3 각 쿼리의 상세 정보

각 랭킹 쿼리마다 아래 내용 제공:

  • 실행 횟수
  • 전체/평균 쿼리 시간
  • 전체/평균 Lock_time
  • Rows_examined / Rows_sent
  • 쿼리 히스토그램(1ms ~ 10초 이상 밀도)
  • 해당 쿼리의 실제 SQL
  • 사용 테이블 구조
  • EXPLAIN 결과
profile
기술 블로그

0개의 댓글