세이박스

MySQL 로그 파일 관리 - mysql rotate를 이용하여 쿼리 로그 확인

데이타베이스
=======================================================
   MySQL 로그 파일 관리
=======================================================

Mysql 의 로그 파일은 다음과 같이 크게 3종류가 있습니다.
1. 에러로그
2. 일반적인 로그
3. UPDATE 로그
첫번째 에러 로그는 hostname.err 의 이름으로 서버 실행시 에러를 기록하는 파일입
니다. 두번째 로그파일은 mysql 에 접근하는 사용자와 그들이 파일과 관련된 쿼리를
실행할 경우에 기록되는 로그 파일로 /usr/local/mysql/var 밑에 host_name.log 으로
저장이 되어집니다. Mysql 데이터에 파일을 기록하므로 파일과 관련된 쿼리는 DB 생
성/삭제 , 테이블 생성/삭제 , 레크드 삽입/갱신 이 있습니다.
이 로그 파일은 Mysql 실행시 --log 옵션을 주어 활성화 시키면 된다.
# /usr/local/mysql/bin/safe_mysqld --log &
업데이터로그는 테이블이 변경될때마다 해당 쿼리가 기록 됩니다. 기본적으로 활성
화 되지 않고 Mysql 실행시 --log-update 옵션으로 가능하다.
# /usr/local/mysql/bin/safe_mysql --log-update &
업데이터 로그는 /usr/local/mysql/var 밑에 host_name.00X 식으로 서버가 다시
실행되거나 mysqladmin reflesh 혹은 mysqladmin flush-logs 명령을 내릴때마다
뒤의 번호가 1씩 증가 한다. 혹은 --log-update=mysql.log 와 같이 로그파일명을
정해줄수도 있다.  Update 로그는 update 쿼리만 저장하거 같지만 ..
delete , create 등의 쿼리도 모두 저장한다.
mysql 의 사용량이 많은 사이트는 이런 로그파일이 쌓이므로 해서 디스크 용량에
문제가 생길수 있다. 관리자는 수시로 점검하여 삭제를 해어야 한다.
로그 파일을 관리하는 방법으로는 두가지가 있다.
먼저 /usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법과
간단한 스크립트를 작성하여 cron 에 등록한뒤 관리하는 방법이 있다.
/usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법은 ..
--log-update=mysqld.log 와 같이 로그파일을 정해서 관리할때 이용하면 된다.
# vi /usr/local/mysql/share/mysql/mysql-log-rotate
-------------------------------------------------------------------------
----
# This logname is set in mysql.server.sh that ends up in /etc/rc.d/init.d/mysql
#
# If the root user has a password you have to create a
# /root/.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password = <secret>
# user= root
#
# where "<secret>" is the password.
#
# ATTENTION: This /root/.my.cnf should be readable ONLY
# for root !
/usr/local/mysql/var/mysqld.log {
        # create 600 mysql mysql
        notifempty
    daily
        rotate 3
        missingok
        compress
    postrotate
    # just if mysqld is really running
    if test -n "`ps acx|grep mysqld`"; then
            /usr/local/mysql/bin/mysqladmin flush-logs
    fi
    endscript-x
}
-------------------------------------------------------------------------
--
위의 파일을 /etc/logrotate.d 디렉토리에 복사만 하면 알아서 로테이트 하게 된다.
단..로그파일을 교체한후 mysqladmin flush-logs 를 적용하므로 root 홈디렉토리에
.my.cnf 파일을 만든후 MySQL 의 root 사용자의 암호와 사용자 명을 적어주어야 한
다.
vi /root/.my.cnf
--------------------------------------
[mysqladmin]
password = xxxxxxxxx
user = root
--------------------------------------
정상적인 로그 교체의 확인은 다음과 같이 하면 된다.
# logrotate -f /etc/logrotate.d/mysql-log-rotate

이밖에 --log-update 등의 옵션을 이용하면 수시로 로그파일의 뒤에 001,002 씩으로
번호가 증가 되면서 저장이 되므로 별도의 스크립트를 작성하여 관리해야 한다.
이는 각자 머리를 잘 짜면 될거 같다.
#!/bin/sh
find /usr/local/mysql/var -name "*.[0-9]*" -type f -mtime +3 -exec rm -f {} \;
/usr/local/mysql/bin/mysqladmin flush-logs
위와 같은 만들면 된다. 이는 "3일 지난 파일은 지워라" 로 cron 에 등록한뒤 적절한
시간마다 실행해주면 된다.