Day10 日志管理工具 - Logrotate (Linux)

随着时间资料累积久都会有占空间与查询不易的问题,在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参考文件


<<:  Day12 订单是什麽? 能吃吗

>>:  Golang 转生到web世界 - 套件管理

Day 10 Swift语法-进阶篇(3/5)-Initialization

我们在定义类别或结构时,有时候会需要做初始化的动作,简单说,就是给一个值,譬如我们在写C的时候,如果...

【Day 26】 实作 - 於 AWS QuickSight 建立 Parameters 以及 Filter 设定

Data Analytics Pipeline 如下图所示: 目前我们已经成功将资料源 - WAF ...

21.移转 Aras PLM大小事-回复料号

写这篇主要是提供那些动不动会改错料号 需要回复前一版料号,首先要知道如果关联是用float时 子阶料...

iOS APP 开发 OC 第六天, 面向过程&面向对象

tags: OC 30 day 什麽是面向对象? 实现需求之一: Ex:要如何将大象放入冰箱? 打开...

Android Studio初学笔记-Day22-ToolBar

Toolbar Toolbar是对於顶端横幅栏的设计,不同於之前介面设计的元件,对於整个程序来讲可以...