2016年12月1日 星期四

Log Server 資料定期備份並清除

Rack 在公司架了一台 Log Server,並使用 LogAnalyzer 進行分析整理並寄發 Warning 及 Error的 Log Report,懶惰的 Rack 只要每日查看 Report 就好,不用到每一台 Server 上逐條查看了。

但,Rack 也遇到一個狀況就是,資料太多了,服務打開,沒多久就塞了1萬多筆 Log 進來,本來 Rack 想說就放著吧,不過這幾天爬網時,剛好看到有大大的經驗分享,該大大設定每日晚上排程清空資料表,以保證效能不減,並且大方的提供了他的 script,嗯...前人種樹,後人乘涼,Rack 就很高興的搬來用啦!!

資料來源:
http://wpjh.tc.edu.tw/joomla/index.php/2012-04-25-23-06-11/2012-04-30-07-56-38/2013-03-25-13-04-19/343-20130308


/etc/crontab 內容

10 0 * * * root /usr/sbin/ntpdate time.stdtime.gov.tw; /usr/sbin/hwclock -w

40 5 * * * root yum -y update && yum clean packages

58 23 * * * root /root/backup.sh

1 0 * * * root php /root/truncatetable.php





/root/backup.sh內容

backup_dir="/home/xxxx/xxxxx"

sub_dir="20"`date '+%y%m%d'`

cd $backup_dir

mkdir $sub_dir

chown xxxx:xxxx $sub_dir

databasename="Syslog"

rootpassword="xxxxxxxx"

sqlfilename="log-sql-20"`date '+%y-%m-%d'`.sql

mysqldump $databasename > $backup_dir/$sub_dir/$sqlfilename -uroot -p$rootpassword

zip $backup_dir/$sub_dir/$sqlfilename.zip $backup_dir/$sub_dir/$sqlfilename

rm -rf $backup_dir/$sub_dir/$sqlfilename





/root/truncatetable.php內容  (為避免被濾掉,<跟?php中間多加一個空白)
< ?php

$db_host = "localhost";

$db_user = "root";

$db_pass = "xxxxxxxxx";

$db_name = "Syslog";

$connect = @mysql_connect($db_host,$db_user,$db_pass);

@mysql_select_db($db_name);



// Empty table

$query = "TRUNCATE TABLE SystemEvents";

mysql_query($query);

?>