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 운영과 장애 대응에 도움이 되기를 기대합니다.
'관심분야' 카테고리의 다른 글
Magento2.4 를 위한 Elasticsearch설치 (0) | 2023.02.13 |
---|---|
AWS|EC2 웹서버 설치후 "This site can’t be reached" 에러 조치 (0) | 2023.02.12 |
AWS|EC2 마젠토 2.4 설치를 위한 Apache,Mysql,PHP설치하기 (0) | 2023.02.11 |
AWS|EC2 Ubuntu에서 사용자 생성 및 SSH접속하기 (0) | 2023.02.09 |
지게차 운전기능사 필기시험을 기출문제로 공부해서 합격하기 (0) | 2023.02.02 |
댓글