天天看點

針對MySQL單一檔案名的日志管理(一)輪訓

關于MySQL的日志,有一些檔案名一直保持不變,但是如果打開會産生很多的檔案,那麼如何進行保留呢,一般就是使用輪訓的方式管理日志,下面就來研究下:

最大的特征:檔案名一直不變

根據MySQL提供的資料mysql-log-logrotate腳本可以知道這個指令logrtate

檢視/etc/crond.daily/logrotate

    /etc/logrotate.cnf

    /etc/logrotate.d   需要輪訓的腳本放在此目錄下

 logrotate是根據cron運作的,也就是說定時任務,打開腳本

#

# ATTENTION: The /root/.my.cnf file should be readable

# _ONLY_ by root !

#/opt/mysql/data/hack-slow.log

#/opt/mysql/data/mysql-general.log

/opt/mysql/data/*.log {

        create 600 mysql mysql

        notifempty

        daily

        rotate 5

        missingok

        compress

    postrotate

        # just if mysqld is really running

        if test -x /usr/local/mysql/bin/mysqladmin && \

           /usr/local/mysql/bin/mysqladmin ping &>/dev/null

        then

           /usr/local/mysql/bin/mysqladmin flush-logs

        fi

    endscript

}

執行指令測試:/usr/sbin/logrotate -f /etc/logrotate.d/mysql-log-rotate

可以切換兩個配置檔案.或者用*.log,切換目錄下所有

logrotate常見選項:

選項 含義

compress 壓縮日志檔案的所有非目前版本

copy 複制目前的日志檔案,忽略create參數

copytruncate 複制目前的日志檔案,并置空目前檔案

daily 每天輪日志檔案i

dateext 輪換的日志字尾為-YYYYMMDD格式

delaycompress 壓縮除了目前和最近之外的所有其他版本

missingok 如果日志不存在,不會報錯

notifempty 如果日志為空,則不輪換

rotate n 在輪換方案中包含n個版本的日志

size=logsize 如果日志檔案大于logsize才輪換

也可以自己手工寫一個大緻還是這個意思,假設需要保留七天的日志記錄

rotate-log.sh

#!/bin/bash

#rotate-log.sh

#Argument 1:log filename

if [ $# -ne 1 ]; then

    echo "Usage:$0 logname" 1>&2

    exit 1

fi

mysqladmin flush-logs

logfile=$1

mv $logfile.6 $logfile.7

mv $logfile.5 $logfile.6

mv $logfile.4 $logfile.5

mv $logfile.3 $logfile.4

mv $logfile.2 $logfile.3

mv $logfile.1 $logfile.2

mv $logfile $logfile.1

本文轉自 aklaus 51CTO部落格,原文連結:http://blog.51cto.com/aklaus/1636710