1. 程式人生 > >[Linux] 利用logrotate對MySQL日誌進行輪轉

[Linux] 利用logrotate對MySQL日誌進行輪轉

日誌輪轉特別適用於具有固定檔名的日誌檔案,比如MySQL的出錯日誌、常規查詢日誌、慢查詢日誌等。Linux系統有一個非常好用的根據logratate可以實現自動輪轉,本文介紹它的原理和用法。

預設情況下,logrotate部署為每天執行的cron job,你可以在目錄/etc/cron.daily裡找到名為logrotate的配置檔案。那麼它是在每天的上面時候執行的呢?開啟檔案/etc/crontab就知道了,下面是我機器上的情況:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
從上面的配置我們可以知道,/etc/cron.daily是在每天凌晨4:02執行。也就是說,每天4:02分/etc/cron.daily/logrotate將會自動執行,下面是它的內容:
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
從上面我們可以知道,logratate預設的配置檔案是/etc/logratate.conf,下面是它的內容:
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
[
[email protected]
/etc/cron.daily ]# cat /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp -- we'll rotate them here /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly minsize 1M create 0600 root utmp rotate 1 }
從上面我們可以知道,這個預設的配置檔案將讀取目錄/etc/logrotate.d,所以我們只要把自己寫的配置檔案放到該目錄下即可。

MySQL本省提供了一個rotate的參考配置檔案,在support-files目錄下,檔名為mysql-log-rotate,內容如下:

# This logname can be set in /etc/my.cnf
# by setting the variable "err-log"
# in the [safe_mysqld] section as follows:
#
# [safe_mysqld]
# err-log=/opt/mysql/data/mysqld.log
#
# 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 !

/opt/mysql/data/mysqld.log {
        # create 600 mysql mysql
        notifempty
        daily
        rotate 3
        missingok
        compress
    postrotate
        # just if mysqld is really running
        if test -x /opt/mysql/bin/mysqladmin && \
           /opt/mysql/bin/mysqladmin ping &>/dev/null
        then
           /opt/mysql/bin/mysqladmin flush-logs
        fi
    endscript
}

logrotate常見選項:

選項 含義
compress 壓縮日誌檔案的所有非當前版本
copy 複製當前的日誌檔案,忽略create引數
copytruncate 複製當前的日誌檔案,並置空當前檔案
daily 每天輪日誌檔案i
dateext 輪換的日誌字尾為-YYYYMMDD格式
delaycompress 壓縮除了當前和最近之外的所有其他版本
missingok 如果日誌不存在,不會報錯
notifempty 如果日誌為空,則不輪換
rotate n 在輪換方案中包含n個版本的日誌
size=logsize 如果日誌檔案大於logsize才輪換

我們只要根據自己的需要,修改相應配置即可,下面是一個例子:

1)建立MySQL root密碼檔案

vi /root/.my.cnf

[mysqladmin]
password = ***
user= root

chmod 600 /root/.my.cnf
2)把mysql-log-rotate拷貝至/etc/logrotate.d目錄下,修改其內容為:

/data/mysql/log/slow.log
/data/mysql/log/alert.log {
        create 600 mysql mysql
        notifempty
        daily
        rotate 7
        missingok
        # compress
    postrotate
        # just if mysqld is really running
        if test -x /opt/mysql/bin/mysqladmin && \
           /opt/mysql/bin/mysqladmin ping &>/dev/null
        then
           /opt/mysql/bin/mysqladmin flush-logs
        fi
    endscript
}

3)執行以下命令測試

/usr/sbin/logrotate -f /etc/logrotate.d/mysql-log-rotate


相關推薦

[Linux] 利用logrotateMySQL日誌進行輪轉

日誌輪轉特別適用於具有固定檔名的日誌檔案,比如MySQL的出錯日誌、常規查詢日誌、慢查詢日誌等。Linux系統有一個非常好用的根據logratate可以實現自動輪轉,本文介紹它的原理和用法。 預設情況下,logrotate部署為每天執行的cron job,你可以在目錄/et

利用logrotateTomcat日誌進行切分

最近在做伺服器資源釋放的時候發現有一臺伺服器的find命令無法使用(原因不詳),所以之前利用cronolog對Tomcat日誌進行切分之後。是基於包含find命令的shell指令碼做的自動清理。這時就想到了用logrotate對Tomcat日誌進行切分。 1、指令碼如下: /usr/lo

利用logrotatenginx日誌進行切分

1、指令碼如下: /gdsfapps/flgw/logs/nginx/*.log{ missingok dateext notifempty daily rotate 7 sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx

linux下啟用定時任務mysql資料庫進行定時備份

                                          &

Django中models利用ORMMysql進行查表的語句

一: all()  返回模型類對應表格中所有的資料。 二:get():返回表格中滿足條件的一條資料,如果查到多條資料,則拋異常:MultipleObjectsReturned,查詢不到資料,則拋異常:DoesNotExist。 三:filter():引數寫查詢條件,返回滿足條件 Q

linux下使用awk,wc,sort,uniq,grepnginx日誌進行分析和統計

通過對awk, wc, uniq, grep, sort等命令的組合,分析nginx的access和error日誌。 統計各種總量、單位時間量。 access.log日誌格式(見下圖) 說明: a). 按照Tab鍵拆分每項資料 b). 欄位含義(如下說明)

nodejs 利用mysql資料庫進行查詢和插入資料

nodejs對資料庫的操作是比較簡單的。下面看一個對laughter庫操作: 這是專案檔案結構圖: config.js的配置如下: //資料庫配置檔案 module.exports = { mysql: {

利用mysqltuner工具mysql資料庫進行優化

mysqltuner工具使用,本工具建議定期執行,發現目前MYSQL資料庫存在的問題及修改相關的引數工具的下載及部署 解決環境依賴,因為工具是perl指令碼開發的,需要perl指令碼環境 # yun install -y perl* 下載指令碼 在http://mysql

怎樣在Linux中用Vim文件進行密碼保護

linux文件加密Vim 有個 -x 選項,這個選項能讓你在創建文件時用它來加密。一旦你運行下面的 vim 命令,你會被提示輸入一個密鑰:$ vim -x file.txt 警告:正在使用弱加密方法;參見 :help ‘cm‘ 輸入加密密鑰:******* 再次輸入相同密鑰:*******如果第二次輸入的密鑰

CentOS Linux使用logrotate分割管理日誌

日誌切割logrotate程序是一個日誌文件管理工具。用於分割日誌文件,刪除舊的日誌文件,並創建新的日誌文件,起到“轉儲”作用。可以節省磁盤空間。logrotate命令格式:logrotate [OPTION...] <configfile>-d, --debug :debug模式,測試配置文件是

django 利用ORM單表進行增刪改查

man api light 賦值 連接 取出 簡單 extern follow 牛小妹上周末,一直在嘗試如何把數據庫的數據弄到界面上。畢竟是新手,搞不出來,文檔也看不懂。不過沒關系,才剛上大學。今晚我們就來解釋下,要把數據搞到界面的第一步。先把數據放到庫裏,然後再把數據從庫

logstashnginx日誌進行解析

eat sent bytes list min oat try port log logstash對nginx日誌進行解析過濾轉換等操作;配置可以用於生產環境,架構為filebeat讀取日誌放入redis,logstash從redis讀取日誌後進行操作;對user_agen

利用opencv圖片大小進行修改

執行環境:ubuntu16.04 + opencv 2.4.13 + c++ (系統g++版本5.4.0) #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #inc

利用python 將 mysql 資料進行抽取並清理成標準格式後 存入MSSql 資料中

from pymongo import MongoClientfrom pymysql import connectimport pymssqlfrom datetime import datetime, timedeltaimport time Nagios 資料庫的IP 地址 NagiosDB_IP

DJANGO專案用WEB的方式MYSQL資料庫進行備份匯出等管理任務的實現

環境:PYTHON2.7,DJANGO1.9.9 urls.py 加一行: url(r'^mysqldatamanage/', views.mysqldatamanage,name='mysqldatamanage'),   views.py新增對應的方mysqldatam

mysqlbinlog日誌進行操作的總結包括 啟用,過期自動刪除 等

操作命令: show binlog events in ‘binlog.000016’ limit 10; reset master 刪除所有的二進位制日誌 flush logs 產生一個新的binlog日誌檔案 show master logs; / show binary log

Spring Boot 2.x使用Spring Data JpaMySQL資料庫進行CRUD操作

 只需兩步!Eclipse+Maven快速構建第一個Spring Boot專案 構建了第一個Spring Boot專案。 Spring Boot連線MySQL資料庫 連線了MySQL資料庫。 本文在之前的基礎上,使用Spring Data Jpa對MySQL

Linux系統下進入MySql資料庫進行操作

1、進入mysql資料庫 [email protected]# mysql -root -123456   <root是使用者名稱,123456是密碼> 2、查詢所有的庫 mysql> show databases;  3、進入資料庫“student”是庫名 mysql>

利用Comparator列舉型別進行排序的實現(ComparatorChain、BeanComparator、FixedOrderComparator)

背景:         工作中遇到按照類的某個屬性排列,這個屬性是個列舉型別(完全是自定義的,沒有明顯的比較標誌),現要按照要求的優先順序排列。        如一個蘋果類有大小和甜度屬性,大小有“特大”,“大”,“中”,“小”,“很小”的等級,甜度有“很甜”,“甜”

C++MySQL資料庫進行匯出和匯入操作

相信大家應該在網上看到很多利用SQL語句對MySQL資料庫的表或者資料庫本身進行匯出和匯入操作。在window環境下利用dos命令列匯出資料庫(我的mysq直接裝在c盤根目錄下下,其bin目錄為:c:/mysql/bin): 1、執行MySQL資料庫匯出操作: c:\my