У меня проблемы с включением ротации журналов 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
Ни с одним из них ничего не вышло. Не могли бы вы помочь мне с некоторыми предложениями / рекомендациями, что делать дальше? Извините за длинный пост, спасибо.