
db서버로 이용하고 있는 ubuntu서버에 용량이 꽉 찼다는 에러메시지를 받았다.
해결하기 위해 해당 디스크의 용량 확인 부터 하니, data가 쌓이는 곳의 경로의 디스크는 용량이 많이 남았지만, log가 쌓이는 곳의 용량이 avail이 0이었다.
문제를 파악하기 위해 /var/log의 용량을 확인해보니 역시 mariadb를 이용하는 mysql의 로그가 398gb... 따라서 이를 해결하기 위해 몇 가지 조치사항을 해주었다.
로그의 종류가 몇가지 있는데, general.log, error.log, binary.log, mysql-slow.log..등 여러가지 가 있다.
여기서 문제가 된게 general 로그였다. 혼자 398gb나 차지하고 있는 녀석,,;; 따라서 이를 관리해주기 위해 log rotate를 이용하였다. 간단히 log회전, 즉 로그를 여러개로 나누고 압축하고, 회전시켜서 갯수 이상된건 삭제하도록 해주는 관리기능 같은 것이다.
/var/log/mysql/mysql.log /var/log/mysql/general.log /var/log/mysql/mysql-slow.log /var/log/mysql/mariadb-slow.log /var/log/mysql/error.log {
daily // 매일 로그 파일 관리
rotate 7 // 최대 7개의 파일로 로그 파일 유지, 7개 파일이 넘어가면 가장 오래된 로그파일 삭제
size 100MB
missingok // 로그파일이 없을 경우 오류 무시
create 640 mysql adm // 소유자 및 권한
compress // 로그파일 압축
sharedscripts // 여러 로그파일에 대해 한 번만 실행
postrotate // 실행 명령어
test -x /usr/bin/mysqladmin || exit 0
if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
# If this fails, check debian.conf!
mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}
위처럼 설정해줄 수 있다. 경로는 /etc/logrotate.d 에 있다.
하지만 일반적으로 mariadb등을 설치하면 general.log는 저장 안되게 off로 설정되어 있다.
mariadb에서 show variables like '%general%' 를 쳐보면 off로 되어 있을 것이다. 이를 on으로 설정해주어야 파일이 생성된다.
binary로그등을 관리해주는 법도 있다. show variables like '%%' 등 설정에서 몇개의 binary 로그 파일만 남길지도 설정해줄 수 있다.