날짜를 .. Query! 아래는 로그뷰어를 이용한 로그관리의 예시입니다.
Select date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -30 day) ;
이렇게하면오늘보다 30일이전날짜를알수있다!
select * from SystemEvents where ReceivedAt < date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -40 day);
## SystemEvents 라는테이블에 ReceivedAt 이라는 column 의데이터가현재시각보다 40일이전데이터보다작은값만쿼리한다는뜻!
꿀팁!!! 이걸 Mysql bash로돌리고싶을때는오뜨케하징?????
–참고 : -e 옵션을통해서명령어를수행할때는더블쿼테이션 (“) 을싱글쿼테이션 (‘) 으로치환하여사용하며, query문맨뒷절의세미클론 (;) 은뺍니다.
# mysql -uroot -p암호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”
나는이렇게썻다?
Syslog 디비에시스템로그를저장하고, My.cnf 설정에 mysql Query 로그를남기도록설정하고.
log=/var/log/mysql/my.log
아래와같이로그를한달지난로그는 ReceivedAt 테이블의시간을참고하여, 삭제대상이되는컬럼을조회하고파일로남긴뒤
해당컬럼을삭제하고, 그다음 mysql 쿼리로그를메일로발생하여확인하였음.
#!/bin/sh today=`date +%Y%m%d`
/usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)” >> /tmp/log_data_$today.log sleep 1;
#mysql log delete echo “” > /var/log/mysql/my.log
## delete /usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “delete from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”
cat /var/log/mysql/my.log | mail -s “[SyslogDB] delete $today DATA query result” pajuguy@nate.com |
이러면 DB 가 계속 쌓여도, 30일 지나면 삭제되니까 유지관리가 편하다.?