본문 바로가기
관심분야

Ubuntu에서 MySQL 로그 설정 및 장애대응 로그 확인 방법

by beresford 2023. 2. 11.

Linux[Ubuntu 22.04.1 LTS에서 실행]에서 MySQL을 설치한 후 장애 대응이나 운영을 위한 MySQL의 Error로그, SQL Query로그, Slow query log 등 로그수집하기 위한 환경설정과 수집된 로그를 확인하는 방법에 대해서 알아봅니다.  

 

1. MySQL 환경설정

1) MySQL 운영을 위한 명령어 모음

root@~#  mysql --help | grep my.cnf     ; MySQL의 환경설정 파일의 우선순위와 경로 확인

root@~# systemctl start mysql            ; MySQL의 시작

root@~# systemctl stop mysql            ; MySQL의 중지

root@~# systemctl restart mysql        ; MySQL의 환경설정 후 반영을 위한 재기동

root@~# systemctl status mysql         ; My SQL상태정보 조회

<systemctl status mysql 실행예시>

    mysql.service - MySQL Community Server

     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)

     Active: active (running) since Sat 2023-02-11 20:11:32 KST; 18s ago

       Docs: man:mysqld(8)

             http://dev.mysql.com/doc/refman/en/using-systemd.html

    Process: 749176 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)

   Main PID: 749215 (mysqld)

     Status: "Server is operational"

      Tasks: 34 (limit: 1143)

     Memory: 172.4M

     CGroup: /system.slice/mysql.service

             └─749215 /usr/sbin/mysqld

Feb 11 20:11:31 13-124-210-111.cprapid.com systemd[1]: mysql.service: Succeeded.

Feb 11 20:11:31 13-124-210-111.cprapid.com systemd[1]: Stopped MySQL Community Server.

Feb 11 20:11:31 13-124-210-111.cprapid.com systemd[1]: Starting MySQL Community Server...

Feb 11 20:11:32 13-124-210-111.cprapid.com systemd[1]: Started MySQL Community Server.

2) MySQL의 에러로그 설정

MySQL은 에러 로그는 디폴트로  /var/log/mysql/error.log에 저장됩니다. 에러로그 파일의 경로변경은  /etc/mysql/mysql.conf.d/mysqld.cnf 에서 지정 및 변경이 가능합니다. vi/vim에디터를 실행하여 Log error경로 및 파일명을 지정할 수 있습니다.

[mysqld]

pid-file        = /var/run/mysqld/mysqld.pid

socket          = /var/run/mysqld/mysqld.sock

datadir         = /var/lib/mysql

log-error       = /var/log/mysql/error.log

 

변경후 MySQL 재시동해서 파라미터 변경을 반영합니다. 또한, 정상기동되고 있는지 상태확인을니다.

root@~# systemctl restart mysql      

root@~# systemctl status mysql  

3) SQL Query 로그 설정

MySQL에서 실행되는 쿼리를 조회하기 위해서 로그를 활성화하고 경로를 지정합니다.

root@~#  mysql -u root

mysql>  show variables like 'general_log%';

+------------------+-----------------------------------+
| Variable_name    | Value                             |
+------------------+-----------------------------------+
| general_log      | OFF                               |
| general_log_file | /var/lib/mysql/13-124-210-111.log |
+------------------+-----------------------------------+
2 rows in set (0.00 sec)

mysql> set global general_log = ON;

mysql> set global general_log_file = '/var/lib/mysql/mysql-query.log';

mysql> show variables like 'general_log%';

+------------------+--------------------------------+

| Variable_name    | Value                          |

+------------------+--------------------------------+

| general_log      | ON                             |

| general_log_file | /var/lib/mysql/mysql-query.log |

+------------------+--------------------------------+

2 rows in set (0.00 sec)

3) Slow Query  로그 설정

데이터베이스의 병목현상을 유발하는 Slow Query를 확인하기 위해서 로그저장을 위한 설정을 합니다. Slow query에 대한 기준과 로그 경로 지정및 설정 활성화를 /etc/my.cnf 파일에 추가 해줍니다.

root@~#  mysql -u root

mysql> show variables like 'slow_query%';
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| slow_query_log      | OFF                                    |
| slow_query_log_file | /var/lib/mysql/13-124-210-111-slow.log |
+---------------------+----------------------------------------+
2 rows in set (0.00 sec)

 

root@~# vi /etc/my.cnf                  ;아래 기준을 추가

# query response time is greater than 5 seconds

long_query_time=5

# Slow Query Log Enable

slow_query_log = 1

# Log Storage Path

slow_query_log_file = /var/log/mysql/mysql_slow.log

 

root@~# systemctl restart mysql

root@~#  mysql -u root

mysql> show variables like 'slow_query%';

+---------------------+-------------------------------+

| Variable_name       | Value                         |

+---------------------+-------------------------------+

| slow_query_log      | ON                            |

| slow_query_log_file | /var/log/mysql/mysql_slow.log |

+---------------------+-------------------------------+

2 rows in set (0.01 sec)

 

2. MySQL 로그 확인

1) 에러로그 확인하고 모니터링

root@~# cat /var/log/mysql/error.log   ;전체파일을 화면에 display

root@~# tail -50f /var/log/mysql/error.log ;최근 로그 50개단위로 보여준다

2) SQL로그 확인하고 모니터링

root@~# tail -f /var/lib/mysql/mysql-query.log

2023-02-11T14:22:16.960385Z        87 Connect   root@localhost on mysql using Socket

2023-02-11T14:22:16.960762Z        87 Query     SELECT @@datadir

2023-02-11T14:22:16.960898Z        87 Quit

2023-02-11T14:22:16.985673Z        88 Connect   root@localhost on mysql using Socket

2023-02-11T14:22:16.985962Z        88 Quit

2023-02-11T14:22:51.980463Z        89 Connect   root@localhost on mysql using Socket

2023-02-11T14:22:51.980619Z        89 Query     set sql_mode='' /* DISABLE ANSI_QUOTES and normalize */

2023-02-11T14:22:51.995773Z        89 Query     SELECT user FROM mysql.user WHERE user LIKE 'cpses\_%'

2023-02-11T14:22:52.002246Z        89 Quit

2023-02-11T14:23:43.467365Z        71 Quit

3) Slow query로그 확인하고 모니터링

root@~# tail -f /var/log/mysql/mysql_slow.log

/usr/sbin/mysqld, Version: 8.0.32 (MySQL Community Server - GPL). started with:

Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock

Time                 Id Command    Argument

/usr/sbin/mysqld, Version: 8.0.32 (MySQL Community Server - GPL). started with:

Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock

Time                 Id Command    Argument

 

3. 마무리

MySQL을 운영 및 Torubleshooting에 필수 요소인 Error로그, SQL Query로그, Slow Query로그등의 설정 과정을 살펴보고, 수집된 로그를 확인 방법에 대해서 알아봤습니다. MySQL 운영과 장애 대응에 도움이 되기를 기대합니다. 

댓글