본문 바로가기

Database/mariaDB administrator

slow_query_log general_log 테이블 설정 방법

slow_query_log general_log 테이블 설정 방법

 

 

mysql 및 mariadb에서 영구적으로 슬로 쿼리 및 SQL general log가 쌓이도록 설정하는 방법을 안내합니다.

 

우선 아래와 같이 서버에서 my.cnf 파일을 엽니다.

 

vi /etc/my.cnf

위 파일을 열면 여러 가지 설정이 주르륵 나옵니다. 여기에서 [mysqld]라고 표시된 아래쪽으로 이동합니다.

 

거의 초반부에 있을 겁니다.

[mysqld]
socket=/tmp/mysql.sock
datadir=/home/mysql_data
basedir = /usr/local/mysql
#user = mysql
#bind-address = 0.0.0.0
#
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
port = 23306

#dns query
skip-name-resolve

#connection
max_connections = 1000
max_connect_errors = 1000
wait_timeout= 60

#slow-queries
#slow_query_log = /home/mysql_data/slow-queries.log
#long_query_time = 3
#log-slow-queries = /home/mysql_data/mysql-slow-queries.log

##timestamp
explicit_defaults_for_timestamp

symbolic-links=0

### log
log-error=/home/mysql_data/mysqld.log
pid-file=/tmp/mysqld.pid

###chracter
character-set-client-handshake=FALSE
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci

symbolic-links=0

##Password Policy
#validate_password_policy=LOW
#validate_password_policy=MEDIUM


### MyISAM Spectific options
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1

뭐 이런 화면이 쭉 나올 겁니다.

 

여기에서 마지막 부분으로 이동을 합니다.

 

그리고 아래와 같이 parameter를 입력해 줍니다.

general_log=on
log_output='TABLE'
slow_query_log=1
slow_query_log_file = /home/mysql_data/slow_query.log
long_query_time = 5

여기에서 하나하나 설명을 드려보겠습니다.

general_log=on 은 SQL log의 기록 여부를 on/off로 입력하는 것입니다. on으로 입력합니다.

log_output='TABLE' 은 SQL log를 테이블에 쌓을 거냐 파일로 쌓을 거냐라는 의미입니다. 둘 다 선택도 가능합니다. 전 테이블에 쌓길 원하기 때문에 TABLE 이라고 입력을 했습니다. 파일로 쌓길 원하시면 FILE, 그리고 둘다 원하면 TABLE, FILE이라고 입력하면 됩니다.

slow_query_log=1 은 slow 쿼리 로그를 남길 것인지에 대한 선택 값입니다. 1은 on, 0은 off입니다.

slow_query_log_file = /home/mysql_data/slow_query.log 는 slow 쿼리 로그 파일 경로를 입력하는 부분입니다.

long_query_time = 5는 slow 쿼리를 판별하는 기준입니다. 단위는 sec(초)입니다. 즉, 5초 이상 응답 시간이 소요되는 SQL을 slow 쿼리로 log를 남기겠다는 의미가 되겠습니다.

 

이렇게 원하시는 데로 설정을 한 뒤에는 MySQL 또는 Mariadb를 재시작해주시면 됩니다.

service mysql stop
service mysql start

그러고 나서 아래와 같이 SQL을 실행하시면 SQL log가 쌓인 것을 확인할 수 있습니다.

select * from mysql.general_log;

아래와 같이 결과가 나옵니다.

더불어서, slow query log를 간단하게 확인하는 방법이 있습니다.

mysqldumpslow -a /home/mysql_data/slow_query.log

위 명령어를 통해서 간단하게 slow 쿼리 결과를 확인할 수 있습니다.

 

유용하게 잘 쓰시길 바랍니다.

 

감사합니다.

 

 

 

 

by.sTricky