Skip to content
난이도 문제은행 5

MySQL 로그 파일 ​

장애 대응의 첫 단서가 되는 로그 세 가지를 다룬다. 에러 로그(error log), 제너럴 로그(general query log), 슬로우 쿼리 로그(slow query log)다. 각각 언제 켜고 어디를 보는지 정리한다.

로그기록켜는 법용도
에러 로그시작·종료·에러·크래시 복구(crash recovery)기본 ON장애 첫 확인
제너럴 로그모든 쿼리(성공·실패)general_log=ON짧은 디버깅·감사1
슬로우 쿼리 로그기준 초과 쿼리slow_query_log=ON느린 쿼리 발굴

로그별 주의점 ​

  • 에러 로그: 기본으로 켜져 있다. 시작하다 멈춘 서버의 원인, 복구 과정, InnoDB 경고가 여기 남는다. 문제가 생기면 제일 먼저 본다.
  • 제너럴 로그: 모든 문장을 다 적으니 디스크 I/O(Input/Output, 입출력)가 폭증한다. 그래서 필요한 구간만 켰다 끄는 게 원칙이다. 비밀번호 같은 민감한 값도 찍히니 보관에 주의한다.
  • 슬로우 쿼리 로그: long_query_time(기본 10초)을 넘긴 쿼리를 기록한다. log_queries_not_using_indexes를 켜면 인덱스를 쓰지 않은 쿼리도 기록 후보가 된다. 검사한 행 수가 기준보다 적은 쿼리를 빼는 min_examined_row_limit 같은 조건의 영향도 받는다. 모인 기록은 mysqldumpslow나 pt-query-digest2로 비슷한 쿼리끼리 묶어 집계한다. 기준은 서비스에 맞게 조정한다. 기준 시간보다 짧지만 자주 도는 쿼리는 이 로그에 안 잡히므로, 쿼리 모양별 합계를 내는 Performance 스키마(Performance Schema)의 다이제스트(digest) 집계로 함께 본다(Performance 스키마와 sys 스키마 3).

슬로우 쿼리 로그는 느리다의 절대 정의가 아니라 설정한 기준을 넘은 기록이다. 인덱스 미사용 로깅을 별도로 켰다면, 인덱스로 범위를 좁히지 않고 전체를 훑는 풀 스캔(full scan)이 실행 시간이 짧아도 기록될 수 있다. 쓰는 순서는 이렇다. 슬로우 쿼리 로그로 문제 쿼리를 찾고, EXPLAIN으로 실행 계획(execution plan)을 본 뒤, 원인을 확인한다(실행 계획 분석 참고).

면접 포인트 ​

  • "느린 쿼리를 어떻게 찾나요?" → 슬로우 쿼리 로그 + 집계 + EXPLAIN. 한 흐름으로.
  • "제너럴 로그를 상시 켜면?" → I/O·용량·민감 정보. 디버깅 구간 한정.
  • "서버가 안 떠요" → 에러 로그부터. 크래시 복구 메시지를 읽는다.

참고

  1. 누가 언제 어떤 쿼리를 실행했는지 나중에 확인할 수 있게 남겨 두는 것. ↩︎

  2. Percona Toolkit에 들어 있는 명령행 도구. 슬로우 쿼리 로그를 읽어 쿼리 모양별로 횟수와 총 시간을 집계해 준다. ↩︎

관련 문서