Mysql Log 설정 정리

Web/WAS 로그도 중요하지만, DB로그도 운영에 있어서 소홀히 할 수 없다.
그래서 Mysql 쿼리 로그를 설정했던 경험을 기록해보기로 했다.


general_log

Mysql에서 실행되는 모든 쿼리를 저장
default는 OFF로 설정되어 있음
ON으로 설정해야 로그를 기록함

#general_log 확인
mysql> show variables like 'general%';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | OFF                          |
| general_log_file | /var/lib/mysql/localhost.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)


#사용여부 ON
mysql> set global general_log = ON;
Query OK, 0 rows affected (0.00 sec)

#로그 위치변경
mysql> set global general_log_file = '/var/log/mysql/general-mysql.log';
Query OK, 0 rows affected (0.00 sec)

데이터가 굉장히 빨리 쌓이므로 용량관리에 주의해야 함


slow_query_log

설정된 시간보다 오래걸리는 쿼리를 저장
얼마나 오래 걸리는지에 대해서는 long_query_time 에서 설정하기 나름

#long_query_time 확인
mysql> show variables like 'long_query%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
#slow_query_log 확인
mysql> show variables like 'slow%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_launch_time    | 2                                 |
| slow_query_log      | OFF                               |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
3 rows in set (0.00 sec)


#사용여부 ON
mysql> set global slow_query_log = ON;
Query OK, 0 rows affected (0.01 sec)

#로그 위치변경
mysql> set global slow_query_log_file = '/var/log/mysql/slow-mysql.log';
Query OK, 0 rows affected (0.00 sec)


ps. 위와 같은 쿼리로 설정한 상태에서 Mysql을 재시작하면 초기화 되므로, my.cnf에 설정하면 영구 보존된다.

#my.cnf
[mysqld]
log-error=/var/log/mysql/err-mysql.log
general_log=ON
general_log_file=/var/log/mysql/general-mysql.log
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow-mysql.log

logrotate

logrotate를 사용하지 않으면 로그파일이 무한정 커진다.
/etc/logrotate.d 폴더의 mysql 파일에 세팅값을 설정한다. (없으면 생성)

/var/log/mysql/general-mysql.log {
        create 640 mysql mysql
        notifempty
        daily
        rotate 50
        missingok
        dateext
        postrotate
               # just if mysqld is really running
               if test -x /usr/bin/mysqladmin && \
                  /usr/bin/mysqladmin ping &>/dev/null
               then
                  /usr/bin/mysqladmin flush-logs
               fi
        endscript
}