MySQL 로그 파일 관리 - mysql rotate를 이용하여 쿼리 로그 확인
2012. 2. 5. 19:55ㆍ개발/Mysql
======================================================= 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 =# user= root # # where " " 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 } ------------------------------------------------------------------------- -- 위의 파일을 /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 에 등록한뒤 적절한 시간마다 실행해주면 된다.
'개발 > Mysql' 카테고리의 다른 글
mysql 백업 및 복구 (0) | 2012.02.05 |
---|---|
Mysql max_connection 늘리기 (0) | 2012.02.05 |
mysql prosselist (0) | 2012.02.05 |
mysql 기본 (0) | 2012.02.05 |
InnoDB 테이블을 OPTIMIZE (0) | 2012.02.05 |