管理资源吧

当前位置:管理资源吧首页>>>tech>>>c1>>>服务器教程

利用logrotate对MySQL日志进行轮转

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

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

双击代码全选
1 2 3 4 5 6 7 8 9 10 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将会自动执行,下面是它的内容:

双击代码全选
1 2 3 4 5 6 7 8 #!/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,下面是它的内容:

双击代码全选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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 0664 root utmp      rotate 1  }         /var/log/btmp {      missingok      monthly      minsize 1M      create 0600 root utmp      rotate 1  }

[Ok3w_NextPage]

从上面我们可以知道,这个默认的配置文件将读取目录/etc/logrotate.d,所以我们只要把自己写的配置文件放到该目录下即可。

MySQL本省提供了一个rotate的参考配置文件,在support-files目录下,文件名为mysql-log-rotate,内容如下:

双击代码全选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 # 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常见选项:

利用logrotate对MySQL日志进行轮转

我们只要根据自己的需要,修改相应配置即可,下面是一个例子:

1)创建MySQL root密码文件

vi /root/.my.cnf

双击代码全选
1 2 3 [mysqladmin]  password = ***  user= root

chmod 600 /root/.my.cnf

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

双击代码全选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /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  }

[Ok3w_NextPage]

3)执行以下命令测试

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

tech首页 更多tech