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
실행을 해보며 정상적으로 작동하는지 테스트