Mysql

Mysql Log설정

Flambee 2021. 5. 1. 16:47

오늘은 Mysql Log 설정에 대해서 글을 쓰려고 합니다.

 

Mysql의 로그 종류에는 아래와 같습니다.

  • ErrorLog
  • GeneralLog
  • BinaryLog
  • SlowQueryLog

오늘은 위의 로그에 대해 알아보고, 설정 방법 그리고 logRotate에 대해서 알아보려고 합니다.


읽기 전 체크사항

  • 일단 Mysql의 로그는 File과 DB로 각각 기록할 수 있으며, File 설정이 Default임을 기억하셨으면 합니다.
  • 해당 글에서 Log 설정 방법은 my.cnf를 변경하는 방법만 적어놓았습니다. my.cnf를 변경하게 되면 mysql을 다시 재시작하여야 합니다.
  • 하지만 Mysql에 직접 접속하여, 설정을 한다면 재시작할 필요는 없으나, Mysql이 재시작되면 해당 설정을 다시 해줘야 하기 때문에 my.cnf로 확실하게 설정을 하셔야 합니다.
  • 로그를 남길 디렉터리 및 로그 파일 소유자는 mysql로 되어야 합니다.

Error Log

Mysql DB Error에 메시지를 기록하는 로그이다.

  • DB과 시작하는 과정
  • 비 정상적인 종료 시 발생하는 트랜잭션 메시지
  • 쿼리 도중에 발생하는 모든 에러
  • InnoDB의 상태 조회 명령의 결과 메시지 기록

Error Log 설정 방법

/etc/my.cnf 파일에서 설정이 가능

기본 값으로 /var/log/mysqld.log 로 저장

/etc/my.cnf "log-error=/경로파일명.log"로 설정 가능

mysql data 디렉터리에 .err 설정 가능

General Log

  • Mysql에서 실행되는 모든 쿼리가 기록
  • 쿼리 도중에 발생하는 에러들도 기록

General Log 설정 방법

/etc/my.cnf에서 설정 가능

general_log = 1이면 ON, 0이면 OFF

general_log_file = /경로 및 파일 명.log

SlowQuery Log

  • Long_query_time으로 설정한 시간 이상 소요 한하여 정상적이게 완료된 쿼리를 모두 기록
  • 에러 로그에 대해서는 남기지 않는다.

SlowQuery Log 설정 방법

/etc/my.cnf 에서 설정 가능

slow-query-log = 1 

slow-query-log-file = 경로 및 파일 명.log 

long_query_time = 5  // 시간 설정

Binary Log/Relay Log

  • DML 쿼리만 기록되는 로그
  • DML 중에서도 Insert, Update, Delete를 저장
  • Binary Log와 Relay Log에 기록되는 내용은 동일, 마스터 서버에 Binary Log, 슬레이브 서버에는 Relay Log 기록

Binary Log/Relay Log 설정 방법

/etc/my.cnf에서 설정 가능

log-bin= 로그 위치 경로.log  

binlog_cache_size= 로그 캐시 사이즈    

max_binlog_size= 로그 최대 사이즈 

expire_logs_days= 보관 기관                 

Log Rotate

Mysql log을 사용하다 보면, Log File이 무한정 커질 수 있습니다. 그래서 Log File을 정리하는 LogRotate에 대해 설정을 하여야 합니다.

/etc/logrotate.d 폴더의 mysql 파일에 세팅값을 설정

/var/log/mysql/*.log {
su root root : logrotate를 실행 할 때 권한 부분에 문제가 생기는 경우 해당 옵션을 집어 넣는다.
create 640 mysql mysql : 새로 만들어지는 log 파일의 권한과 소유자
notifempty : log file이 empty일 때 새로 생성, 순환하지 않고 유지
daily : 매일 실행
rotate 5 : 순환되는 파일 개수, 5로 지정되어있으니 log를 5개까지 저장시키고 나머지 파일들은 삭제.
missingok : 로그파일이 없어도 에러처리하지 않는다.
compress : 압축 실행
dateext : 로그 파일을 년월일로 표시
postrotate : logrotate 작업 이후에 지정된 작업

#파일을 변경해주는 작업

if test -x /usr/local/mysql/bin/mysqladmin && \
/usr/local/mysql/bin/mysqladmin --socket=/box/mysql/mysql.sock ping &>/dev/null
then
#/usr local/mysql/bin/mysqladmin -- socket=/box/mysql/mysql.sock flush-logs
/usr/local/mysql/bin/mysql -e 'flush logs;'
fi
endscript
}

#정상 실행 체크, 강제로 rotate 시킬 때 -f 옵션을 추가하여 실행
logrotate -v /etc/logrotate.d/mysql-log-rotate 

 

이상입니다. 읽어주셔서 감사합니다.

 

참고 사이트

- MysqlLog

toshi15shkim.github.io/articles/2019-06/db-mysql-log

 

Mysql Log 설정 정리 | Toshi의 개발 블로그

Mysql

toshi15shkim.github.io

- logRotate 

blog.naver.com/PostView.nhn?blogId=tpgpfkwkem0&logNo=222073388273&parentCategoryNo=&categoryNo=62&viewDate=&isShowPopularPosts=false&from=postView

 

[Mysql] Logrotate로 Log를 관리하자.

안녕하세요 닷닷입니다. 위에는 Mysql이라고 적어봤지만.. 오라클에서도 충분히 LOG관리가 가능한 Lin...

blog.naver.com

myinfrabox.tistory.com/10

 

[MySQL][Admin] 로그종류와 특징

■ MySQL Log란 DBMS에서는 자신의 상태를 기록하기 위해 로그라는 방법으로 자신의 상태를 기록합니다. MySQL에서도 마찬가지로 여러가지 로그를 제공합니다. 시스템에 관련된 로그, 복제를 구성하

myinfrabox.tistory.com