Не работает ротация журнала Mysql

У меня проблемы с включением ротации журналов Mysql. Я не знаю, почему это так сложно, хотя я следовал документации и советам в Интернете, все равно не могу заставить это работать. Я включил все 3 журнала на Mysql: общий журнал, журнал ошибок и медленный запрос в трех файлах: error.log, mysql-slow.log, mysql.log . Все 3 журнала работают нормально. Один из этих файлов (mysql.log) генерирует 10 Гбит / с ежедневно, и я хочу регистрировать этот файл каждые 2 дня, то есть я хочу всегда хранить данные за последние 2 дня и продолжать циклически повторять данные, чтобы они никогда не превышали 30 Гб данных, поэтому он будет выглядеть примерно так (я изменил вывод, чтобы дать вам пример того, что я хочу):

ls -lh
-rw-r----- 1 mysql mysql 9.1G Apr 18 06:30 mysql.log
-rw-r----- 1 mysql mysql 9.3G Apr 17 06:28 mysql.log-20210417.backup
-rw-r----- 1 mysql mysql 9.0G Apr 16 06:28 mysql.log-20210416.backup

Сначала я попытался изменить файл /etc/logrotate.conf , это выглядело так:

# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# 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

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

/var/log/mysql/mysql.log {

su mysql mysql
       create 600 mysql mysql
       notifempty
       daily
       rotate 2
       missingok
       compress
   copytruncate
    postrotate
        just if mysqld is really running
       if test -x /usr/bin/mysqladmin && \
          /usr/bin/mysqladmin ping &>/dev/null
       then
          /usr/bin/mysqladmin flush-logs
       fi
    endscript
}

Я просто добавил в конец файла часть, которая начинается с /var/log/mysql/mysql.log { Затем я создал файл mysql в каталоге /etc/logrotate.d/ и обновил его частью, которая начинается с / var / log / mysql / mysql. журнал {.

Оба метода завершились неудачно (с использованием файлов /etc/logrotation.conf и /etc/logrotate.d/mysql), журналы файлов накапливаются более 2 дней:

total 52G
-rw-r----- 1 mysql mysql  13K Apr 16 08:41 error.log
-rw-r----- 1 mysql mysql  140 Apr  1 06:25 error.log.1
-rw-r----- 1 mysql mysql 5.7G Apr 18 09:37 mysql-slow.log
-rw-r----- 1 mysql mysql 114K Apr 18 19:24 mysql.log
-rw-r----- 1 mysql mysql 9.1G Apr 18 06:30 mysql.log.1
-rw-r----- 1 mysql mysql 9.3G Apr 14 06:28 mysql.log.1-2021041506.backup
-rw-r----- 1 mysql mysql 9.0G Apr 15 06:28 mysql.log.1-2021041606.backup
-rw-r----- 1 mysql mysql 9.2G Apr 16 06:28 mysql.log.1-2021041706.backup
-rw-r----- 1 mysql mysql 9.1G Apr 17 06:28 mysql.log.1-2021041806.backup

Кроме того, я заметил, что создается еще один файл с "1" в конце имени: mysql.log.1 .Странный.

Еще я пытался изменить файл /etc/cron.daily/logrotate : Я пробовал 2 сценария:

#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.d/mysql

и

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.d/mysql
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Ни с одним из них ничего не вышло. Не могли бы вы помочь мне с некоторыми предложениями / рекомендациями, что делать дальше? Извините за длинный пост, спасибо.

0
задан 27 April 2021 в 17:43

0 ответов

Другие вопросы по тегам:

Похожие вопросы: