iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0

隨著時間資料累積久都會有佔空間與查詢不易的問題,在Mysql的日誌中常用的error log 和 slow log 都是寫入同一個文件中,在使用找紀錄上說真的不太方便。 /images/emoticon/emoticon40.gif

以下內容會用到,先認識一下這句指令意思:

#關閉並重新打開服務器正在寫入的任何日誌文件(達到清除或重新加載各種內部緩存效果)
mysql> FLUSH LOGS;
官方FLUSH語句詳細參考

下這句時可以發現binlog的話作用會截斷當前日誌產生一個新的EX:mysql_bin.00000x檔。而對於error log紀錄來說沒影響因為寫入的都是同一個文件,所以藉由FLUSH作用重新載入方便我們用換檔名產生新error.log檔的方式去做到日誌切割~

  • 廣告時間

這時候就可以用到Linux默認安裝的logrotate 日誌切割工具,基於cron運行,對於不斷增長的紀錄,可將內容按時間大小做區分並刪除,有效節省空間使用及管理上的便利。相較於自己寫shell完還要掛crontab上去跑,logrotate設定後就會根據設定時間去執行!

內容 位置
主配置文件 /etc/logrotate.conf
自定義配置 /etc/logrotate.d/...

大致上運行機制:

每天運行系統自帶排成 /etc/cron.daily/logrotate -> logrotate 腳本內容以 /etc/logrotate.conf 為配置文件執行logrotate ->logrotate.conf 腳本會透過 include 引入 /etc/logrotate.d/ 目錄底下的配置文件。

  • 實際運用
    EX: 目前Mysql error log位置-> /var/log/mysql/error.log

設定上:

  1. 先在/etc/logrotate.d目錄下新增自己的logrotate配置文件
vim /etc/logrotate.d/mysql
  1. 新增配置文件 (註解要記得拿掉!!)
/var/log/mysql/error.log {
    create 600 mysql mysql #指定切換後檔案權限
    daily #每日切換
    rotate 7 #保留7個切換後的檔案,多的會被刪除   
    dateext #切換後的檔名加上日期
    missingok #切換期間,有錯誤則忽略EX:日誌檔不存在  
    compress  #舊的檔案以壓縮方式儲存
    delaycompress #最近的檔案在下一次切換時才進行壓縮
    postrotate 
        # 確認mysql運作
        if test -x /usr/bin/mysqladmin && \
           /usr/bin/mysqladmin -u root -p1234 ping &>/dev/null
        then
           /usr/bin/mysqladmin -u root -p1234 flush-logs
        fi
    endscript
}

3.手動切換Debug確認執行內容

logrotate -vf /etc/logrotate.d/mysql

4.執行沒問題就可以看到log內容被切換至日期檔了 /images/emoticon/emoticon07.gif

#幾天後會像這樣,根據日期分配在查找紀錄上也會方便許多。
root@mysql-master:/var/log/mysql# ll
total 1452
drwxr-x---  2 mysql adm      4096 Aug  5 06:25 ./
drwxrwxr-x 10 root  syslog   4096 Aug  5 06:25 ../
-rw-------  1 mysql mysql  521988 Aug  6 02:23 error.log
-rw-------  1 mysql mysql   76255 Aug  1 06:25 error.log-20210801.gz
-rw-------  1 mysql mysql   76339 Aug  2 06:25 error.log-20210802.gz
-rw-------  1 mysql mysql   76457 Aug  3 06:24 error.log-20210803.gz
-rw-------  1 mysql mysql   79362 Aug  4 06:25 error.log-20210804.gz
-rw-------  1 mysql mysql  630110 Aug  5 06:25 error.log-20210805

logrotate參考文件


上一篇
Day.9 備份還原 - 還原資料 (MYSQL binlog )-下
下一篇
Day.11 搞懂主從架構- 主從複製(Master Slave Replication)
系列文
MYSQL-相關實務操作學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
obarisk
iT邦研究生 2 級 ‧ 2021-09-19 07:51:20

現在應該在 systemd-timer 上了

我要留言

立即登入留言