본문 바로가기
Linux/APM

MariaDB의 log file 설정

by aegypius 2022. 2. 8.
728x90
반응형

(1) General Log

General Log는 DB의 연결과 해제를 포함한 모든 쿼리에 대한 기록이다.(때문에 용량이 금새 커질 수 있다.) 아래와 같이 설정상태를 확인할 수 있다

MariaDB [(none)]> show variables like 'gene%';
+------------------+---------------+
| Variable_name    | Value         |
+------------------+---------------+
| general_log      | OFF           |
| general_log_file | localhost.log |
+------------------+---------------+
2 rows in set (0.001 sec)

MariaDB [(none)]> show variables like 'data%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.001 sec)

MariaDB [(none)]>

기본적으로 general_log는 비활성(OFF) 상태이며, 로그파일의 이름(general_log_file)은 호스트네임(localhost.log)으로 설정되어 있다. 로그파일의 위치는 datadir의 설정값 '/var/lib/mysql/'이다.

general_log를 활성화 하기 위해서는 아래와 같이 SET GLOBAL 을 사용할 수 있다.

MariaDB [(none)]> set global general_log=1;
Query OK, 0 rows affected (0.016 sec)

MariaDB [(none)]> show variables like 'gene%';
+------------------+---------------+
| Variable_name    | Value         |
+------------------+---------------+
| general_log      | ON            |
| general_log_file | localhost.log |
+------------------+---------------+
2 rows in set (0.001 sec)

MariaDB [(none)]>

 

1은 활성화(ON)이며, 2는 비활성화(OFF)이다. 또한 general_log_file의 이름을 원하는대로 변경 할 수 있다.

MariaDB [(none)]> set global general_log_file='mariadb.log';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> show variables like 'gene%';
+------------------+-------------+
| Variable_name    | Value       |
+------------------+-------------+
| general_log      | ON          |
| general_log_file | mariadb.log |
+------------------+-------------+
2 rows in set (0.001 sec)

MariaDB [(none)]>

위에서 general_log를 활성화 했기 때문에, 로그가 저장되는 위치(/var/lib/mysql)에서 mariadb.log가 즉시 생성되는 것을 확인할 수 있다.

하지만........이렇게 시스템 변수의 값을 변경하더라도 DB 서버를 재시작(서버의 리부팅 등)하면 기본 설정값으로 되돌아 간다.  서버가 재시동 되더라도 설정값을 그대로 유지하기 위해서는 옵션 파일(option file)의 설정이 필요하다. 옵션 파일의 위치는 MariaDB의 설치 방법에 따라서 차이가 있지만 대부분은 /etc/my.cnf 이다.

my.cnf 에 설정된 /etc/my.cnf.d 에서 server.cnf 을 찾아서 아래와 같이 편집할 수 있다.

...
[mariadb-10.4]
general_log=on
general_log_file=/var/log/DBgeneral.log
...

general_log의 파일명과 저장위치를 모두 변경했다. /var/log 디렉토리는 리눅스의 각종 로그파일이 저장되는 디렉토리이기에 편의상(?) db의 로그도 이곳에 저장되도록 설정한 것이다. 기본값인 /var/lib/mysql이 더 편하게 느껴질 수도 있다. 로그 파일이 저장될 디렉토리가 /var/lib/mysql 처럼 소유자, 소유그룹이 mysql에게 있지 않다면 설정한 로그파일을 해당 디렉토리에 직접 만든 후에 소유자와 소유그룹을 mysql로 변경해야 한다.

 

(2) Error Log

Error Log는 DB의 시작과 중지, 테이블의 손상 등 DB서버가 작동하는 도중에 발생하는 오류정보를 저장한다. 로그파일이 저장되는 위치는 General Log와 마찬가지로 datadir의 설정에 따르며, 로그파일의 이름을 특별히 지정하지 않으면 호스트네임으로 설정된다. 기본 설정값은 아래와 같이 확인할 수 있다.

MariaDB [(none)]> show variables like 'data%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.001 sec)

MariaDB [(none)]> show variables like 'error_log';
Empty set (0.001 sec)

MariaDB [(none)]> show variables like 'log_error';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_error     |       |
+---------------+-------+
1 row in set (0.001 sec)

MariaDB [(none)]>

Error Log를 활성화하고 기록하기 위해서 아래와 같이 옵션파일을 편집할 수 있다.

.....
[mariadb-10.4]
log_error=on
log-error=/var/log/DBerror.log
...

log_error=on을 통해서 Error Log를 활성화 했으며, 사용할 로그 파일의 이름은 DBerror.log, 저장될 위치는 /var/log로 설정했다. General Log와 마찬가지로 /var/log 디렉토리는 소유자와 소유그룹은 mysql이 아니기 때문에 해당 위치에 DBerror.log라는 파일을 수동으로 직접 만들어야 하며, 소유자와 소유그룹 또한 mysql로 설정해야 한다. 로그파일의 이름과 저장 위치는 각자 관리하기 편한 곳에 두는 것으로....-_-;

 

(3) Slow Query Log

Slow Query Log는 실행되는데 오랜시간이 걸리는 쿼리에 대한 로그이다. 기본값은 아래와 같이 확인해 볼 수 있다.

MariaDB [(none)]> show variables like 'long%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.001 sec)

MariaDB [(none)]>

 

기본값인 오랜시간은 10초(sec)인데 SET GLOBAL을 사용해서 변경이 가능하다.

MariaDB [(none)]> show variables like 'long%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.001 sec)

MariaDB [(none)]> set global long_query_time=5;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
[root@localhost harepius]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.4.13-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show variables like 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.001 sec)

MariaDB [(none)]>

 

slow query log를 활성화 하려면 SET GLOBAL을 이용해서 slow_query_log를 1로 설정하면 된다. 

MariaDB [(none)]> show variables like 'slow_q%';
+---------------------+--------------------+
| Variable_name       | Value              |
+---------------------+--------------------+
| slow_query_log      | OFF                |
| slow_query_log_file | localhost-slow.log |
+---------------------+--------------------+
2 rows in set (0.001 sec)

MariaDB [(none)]>

로그파일 또한 ${hostname}-slow.log 형태이며, 저장되는 디렉토리는 다른 로그들과 마찬가지로 datadir의 설정에 따른다. 다른 로그와 마찬가지로 옵션파일에서 아래와 같이 설정할 수 있다.

...
[mariadb-10.4]
slow_query_log=on
slow_query_log_file=/var/log/DBslow.log
long_query_time=5.0
...

로그파일의 이름을 설정할 때에 경로를 생략하면 datadir의 설정값이 생성 경로가 된다.

세부적인 사항은 MariaDB.com의 slow query log 의 개요를 살펴보자.

 

Slow Query Log Overview

A record of SQL queries that took a long time to perform.

mariadb.com

728x90
반응형

댓글