ubuntu mysql db logrotate 설정

Jayden Yun·2022년 1월 4일
0

DB로그를 기간단위로 남겼을때 경험을 기록한다

mysql의 설정 확인

SHOW VARIABLES LIKE '%general_log%';

general_log_file : 로그파일 저장위치
★위치에 따라 하단에 logrotate 설정에 참고★

general_log 가 OFF라면 ON으로 바꿔준다.

set global general_log = "ON";

로그 저장방식 확인

show variables like 'log_output';

log_output 이 TABLE로 되어있다면 file로 바꿔준다.
(file,tabel 양쪽에 쌓을수도 있지만 서버에 부하가 좀 걸릴수 있다.)

set global log_output='file'

mysqladmin 설정

sudo su
vi /root/.my.cnf

.my.cnf 파일

[mysqladmin]
user=유저명
password="패스워드"

mysqladmin을 사용하도록 설정한 후

vi /etc/logrotate.d/mysql

logrotate.d/mysql 파일

/var/lib/mysql/logs/db.log{
    create 600 mysql mysql
    daily
    rotate 14
    missingok
    dateext
    postrotate
    	if test -x /usr/bin/mysqladmin &&\
        	/usr/bin/mysqladmin ping &> /dev/null
        then
        	env HOME=/root/ /usr/bin/mysqladmin flush-log
        fi
    endscript
           
}

위의 코드에서 postrotate가 가장 중요하다.
mysql을 flush-log를 해주지 않으면 logrotate의 순환이 제대로 이루어지지 않는다.

아래의 코드는 postrotate를 실행하면서 mysqladmin을 실행하지 못하여 추가하였다.

– env HOME=/root/

옵션설명
daily : 일 단위로 순환 다른 옵션 으로는 weekly, monthly, yearly 가 있다
rotate : 순환 파일개수 ex) 14일 경우는 14개 까지만 저장
missingok : 로그파일이 존재하지 않아도 에러를 발생하지 않음
dateext : 로그파일명에 YYYYMMDD형식 추가
postrotate : logrotate 순환 후에 실행되는 옵션

강제실행 코드

/usr/sbin/logrotate -fv /etc/logrotate.d/mysql

실행을 해보며 정상적으로 작동하는지 테스트

profile
이것저것 알고 싶은게 많은 개발자

0개의 댓글