MySQL (MariaDB) 로그들 logrotate 설정하기

리눅스/MySQL|2022. 10. 7. 17:03
반응형

MySQL (MariaDB) 에는 여러 로그가 있지만 그 중 general log 에 사용하기 적합한 logrotate 설정법 입니다.

binary log 파일은 my.cnf 환경 설정 파일에서 보관 일수를 정할 수 있기 때문에 디스크를 많이 사용하지 않지만

general log 는 제한없이 하나의 파일에 계속 데이터가 누적되기 때문입니다.

아래와 같이 설정을 하면 mysql 재시작 없이 자동적으로 설정한 값에 의해 로그 파일이 분리, 삭제 됩니다.

 

우선 logrotate 설정 파일이 모여 있는 디렉토리로 이동 후 mysql 설치된 디렉토리의 샘플 mysql-log-rotate 파일을 가져와서 수정 합니다.

 

# cd /etc/logrotate.d

# cp -arp /usr/local/mysql/support-files/mysql-log-rotate .

# vi mysql-log-rotate

/usr/local/mysql/data/general_query.log {
    create 660 mysql mysql    # 생성되는 파일 퍼미션 및 권한
    daily                                  # 매일 실행
    rotate 10                           # 로그파일 보관 개수
    missingok                         # 로그파일이 없어도 에러처리하지 않음
    compress                         # 로그 파일 압축 보관
    postrotate                        # 여기부터 끝까지는 로그파일 처리 후 동작 스크립트 입니다.
        # just if mariadbd is really running
        if test -x /usr/local/mysql/bin/mysqladmin && \
           /usr/local/mysql/bin/mysqladmin -uroot -p12345678 ping &>/dev/null
        then
           /usr/local/mysql/bin/mysqladmin -uroot -p12345678 --local flush-general-log
        fi
    endscript
}

 

패스워드와 파일 변경 후 flush 할 로그 파일을 명시합니다.

여러개의 로그파일을 flush 하고자 할 경우 아래와 같이 띄어쓰기로 구분하여 사용합니다.

 

--local flush-error-log flush-engine-log flush-general-log flush-slow-log

 

설정이 잘 되었는지 미리 확인 (실행) 하는 방법은 아래와 같습니다.

 

# logrotate -f /etc/logrotate.d/mysql-log-rotate

 

참고로 flush-general-log 등의 옵션은 DB 버전에 따라 제공되거나 그렇지 않습니다.

테스트 환경은 MariaDB 10.6.9 이며 flush-general-log 옵션이 확인되었지만,

mysql 8.0.26 버전에서는 해당 옵션이 확인되지 않아서 명령 실행이 불가능 했습니다.

 

반응형

댓글()