새소식

DataBase/MySQL

MySQL 로그와 General, Slow Log 설정 (with. Aurora)

  • -

MySQL은 서버를 정상적으로 운영하고 상태를 기록하기 위한 다양한 로그가 존재합니다.

 

Error log -MySQL을 시작, 실행, 종료 시 발생한 문제를 기록

General Log - 클라이언트 연결 설정 및 실행된 쿼리를 기록

Binary Log - 테이블 생성 및 데이터 변경과 같은 변경 사항을 기록(SELECT 쿼리는 남기지 않음)

Relay Log - 복제 구성 시 마스터의 변경 사항을 기록

Slow Log - long_query_time 파라미터로 설정된 시간보다 수행시간이 긴 쿼리를 기록

DDL Log - DDL문의 실행을 기록

 

이 중 General Log, Slow Log, Binary Log가 가장 많이 사용됩니다. 이번에는 General Log와 Slow Log에 대해 알아보겠습니다.

 

로그 저장 위치

기본적으로 활성화된 로그는 data 디렉토리 내에 기록됩니다. 또한 로그 플러시를 통해 로그 파일을 통해 메모리에 있는 데이터를 디스크로 동기화할 수 있습니다. 로그 플러시의 경우 다양한 문제를 유발할 수 있기에 주의해서 사용해야합니다. RDS나 IDC의 경우 data 디렉토리에서 확인이 가능하며 Aurora의 경우 Serverless 이기에 직접적으로 디렉토리에 접근은 불가합니다. (/rdsdbdata/log/ 디렉토리에 쌓이는 것으로 보임)

 

General Log, Slow Log 설정

log_output

쿼리가 어떤 방식으로 쌓일지 설정하는 파라미터입니다. General Log, Slow Log는 Table 혹은 File 방식으로 쌓이게됩니다. 5.7 버전은 File이 기본값으로 설정되어있으며 File 로 생성하였을 경우 데이터 추출 및 이동이 편리합니다. Aurora MySQL의 경우에는 CloudWatch에서 로그를 확인하려면 File로 구성되어야만 합니다. 터미널로 접근이 불가하기 때문에 Cloud Watch의 로그 탭에서 파일로 추출이 가능합니다.

  • TABLE - General Log는 mysql.general_log , Slow Log는 mysql.slow_log 테이블에 저장합니다.
  • FILE - 지정된 파일에 로그를 기록합니다.
  • NONE - 쿼리를 로깅하지 않습니다.
mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+

 

general_log

show variables LIKE '%general%'
+------------------+------------------------------------------+
| Variable_name    | Value                                    |
+------------------+------------------------------------------+
| general_log      | ON                                       |
| general_log_file | /rdsdbdata/log/general/mysql-general.log |
+------------------+------------------------------------------+

 

제너럴 로그를 활성화하기 위해서는 general_log 파라미터를 ON 으로 변경해야합니다. 아래의 명령어로 수정이 가능하며 Aurora의 경우 파라미터 그룹을 통해 수정할 수 있습니다. (0 : off, 1: on)

set global general_log = on;

 

slow query log 활성화

mysql> show variables like '%slow_query%';
+---------------------+----------------------------------------------+
| Variable_name       | Value                                        |
+---------------------+----------------------------------------------+
| slow_query_log      | ON                                           |
| slow_query_log_file | /rdsdbdata/log/slowquery/mysql-slowquery.log |
+---------------------+----------------------------------------------+

 

슬로우 쿼리도 제너럴 로그와 수정 방식은 동일합니다.

set global slow_query_log = 'ON';
set global long_query_time = 2;  # 실행 시간이 2초 이상인 쿼리

 

다만 슬로우 쿼리의 경우 추가 옵션이 존재합니다.

  • long\_query\_time : 실행 시간 값을 초단위로 설정합니다. (Default : 10, Min : 0)
  • log\_queries\_not\_using\_indexes : 인덱스를 사용하지 않는 모든 쿼리를 기록합니다. 이 때 long_query_time 보다 실행 시간이 작아도 기록하게 됩니다.

 

로그 조회

log_output을 Table 로 설정 시 아래의 스크립트로 조회가 가능합니다. 조회가 간편하기에 일반적으로 사용하는 방법입니다.

SELECT * FROM mysql.general_log
SELECT * FROM mysql.slow_log

 

Aurora log_output Table 설정의 경우 DB 클러스터 파라미터 그룹이 아닌 인스턴스의 DB 파라미터 그룹의 설정을 변경해주어야만합니다.

Aurora의 경우 구성 > 게시된 로그 > 일반(느린쿼리) 탭에 들어가면 Cloud Watch 를 통해 쿼리 실행 로그를 확인할 수 있습니다.

 

만약 로그 탭에 항목이 표시되지 않았을 경우에는 클러스터 구성 시 로그 내보내기에 체크가 되어있는지 확인이 필요합니다.

 

로그 관리

로깅이 활성화되면 Aurora는 정기적으로 테이블 로그를 교체하거나 파일을 삭제합니다. 이 때 log_output파라미터 설정에 따라 로그 관리 방식이 다릅니다.

  • File
    • 1시간 마다 로그 파일을 검사하고 30일이 지난 로그 파일 삭제
    • DB 인스턴스에 할당된 공간의 2%가 넘을 경우 가장 오래된 로그 파일 삭제
  • TABLE
    • 24시간마다 체크
    • 스토리지 공간의 20% 이상이거나 로그의 크기가 10GB보다 큰 경우
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.