视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
[Linux]利用logrotate对MySQL日志进行轮转_MySQL
2020-11-09 18:48:22 责编:小采
文档


bitsCN.com

[Linux] 利用logrotate对MySQL日志进行轮转

日志轮转特别适用于具有固定文件名的日志文件,比如MySQL的出错日志、常规查询日志、慢查询日志等。Linux系统有一个非常好用的根据logratate可以实现自动轮转,本文介绍它的原理和用法。

默认情况下,logratate部署为每天运行的cron job,你可以在目录/etc/cron.daily里找到名为logratate的配置文件。那么它是在每天的上面时候运行的呢?打开文件/etc/crontab就知道了,下面是我机器上的情况:

[plain]

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/logratate将会自动执行,下面是它的内容:

[plain]

#!/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,下面是它的内容:

[plain]

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

[root@lx202 /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 06 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,内容如下:

[plain]

# 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 =

# user= root

#

# where "" 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

[plain]

[mysqladmin]

password = ***

user= root

chmod 600 /root/.my.cnf

2)把mysql-log-rotate拷贝至/etc/logrotate.d目录下,修改其内容为:

[plain]

/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)执行以下命令测试

[plain]

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

bitsCN.com

下载本文
显示全文
专题