随着时间资料累积久都会有占空间与查询不易的问题,在Mysql的日志中常用的error log 和 slow log 都是写入同一个文件中,在使用找纪录上说真的不太方便。
以下内容会用到,先认识一下这句指令意思:
#关闭并重新打开服务器正在写入的任何日志文件(达到清除或重新加载各种内部缓存效果)
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/ 目录底下的配置文件。
设定上:
vim /etc/logrotate.d/mysql
/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内容被切换至日期档了
#几天後会像这样,根据日期分配在查找纪录上也会方便许多。
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
我们在定义类别或结构时,有时候会需要做初始化的动作,简单说,就是给一个值,譬如我们在写C的时候,如果...
Data Analytics Pipeline 如下图所示: 目前我们已经成功将资料源 - WAF ...
写这篇主要是提供那些动不动会改错料号 需要回复前一版料号,首先要知道如果关联是用float时 子阶料...
tags: OC 30 day 什麽是面向对象? 实现需求之一: Ex:要如何将大象放入冰箱? 打开...
Toolbar Toolbar是对於顶端横幅栏的设计,不同於之前介面设计的元件,对於整个程序来讲可以...