A guide to using the `logrotate` utility on Linux to manage MariaDB log files, ensuring they don't consume excessive disk space by rotating, compressing, and archiving them.
[mariadb]
...
log_error=/var/log/mysql/mariadb.err
general_log
general_log_file=/var/log/mysql/mariadb.log
slow_query_log
slow_query_log_file=/var/log/mysql/mariadb-slow.log
long_query_time=5sudo mkdir /var/log/mysql/
sudo chown mysql:mysql /var/log/mysql/
sudo chmod 0770 /var/log/mysql/sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"
sudo restorecon -Rv /var/log/mysqlALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket;$ sudo tee /etc/logrotate.d/mariadb <<EOF
/var/log/mysql/* {
su mysql mysql
missingok
create 660 mysql mysql
notifempty
daily
minsize 1M # only use with logrotate >= 3.7.4
maxsize 100M # only use with logrotate >= 3.8.1
rotate 30
# dateext # only use if your logrotate version is compatible with below dateformat
# dateformat .%Y-%m-%d-%H-%M-%S # only use with logrotate >= 3.9.2
compress
delaycompress
sharedscripts
olddir archive/
createolddir 770 mysql mysql # only use with logrotate >= 3.8.9
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}
EOFsudo mkdir /var/log/mysql/archive/
sudo chown mysql:mysql /var/log/mysql/archive/
sudo chmod 0770 /var/log/mysql/archive/sudo logrotate --force /etc/logrotate.d/mariadb$ sudo ls -l /var/log/mysql/archive/
total 48
-rw-rw---- 1 mysql mysql 440 Mar 31 15:31 mariadb.err.1
-rw-rw---- 1 mysql mysql 138 Mar 31 15:30 mariadb.err.2.gz
-rw-rw---- 1 mysql mysql 145 Mar 31 15:28 mariadb.err.3.gz
-rw-rw---- 1 mysql mysql 1007 Mar 31 15:27 mariadb.err.4.gz
-rw-rw---- 1 mysql mysql 1437 Mar 31 15:32 mariadb.log.1
-rw-rw---- 1 mysql mysql 429 Mar 31 15:31 mariadb.log.2.gz
-rw-rw---- 1 mysql mysql 439 Mar 31 15:28 mariadb.log.3.gz
-rw-rw---- 1 mysql mysql 370 Mar 31 15:27 mariadb.log.4.gz
-rw-rw---- 1 mysql mysql 3915 Mar 31 15:32 mariadb-slow.log.1
-rw-rw---- 1 mysql mysql 554 Mar 31 15:31 mariadb-slow.log.2.gz
-rw-rw---- 1 mysql mysql 569 Mar 31 15:28 mariadb-slow.log.3.gz
-rw-rw---- 1 mysql mysql 487 Mar 31 15:27 mariadb-slow.log.4.gz- name: Create mariadb_logrotate_old_dir
file:
path: "{{ mariadb_logrotate_old_dir }}"
owner: mysql
group: mysql
mode: '770'
state: directory
- name: Configure logrotate
template:
src: "../templates/logrotate.j2"
dest: "/etc/logrotate.d/mysql"{{ mariadb_log_dir }}/* {
su mysql mysql
missingok
create 660 mysql mysql
notifempty
daily
minsize 1M {{ mariadb_logrotate_min_size }}
maxsize 100M {{ mariadb_logrotate_max_size }}
rotate {{ mariadb_logrotate_old_dir }}
dateformat .%Y-%m-%d-%H-%M-%S # only use with logrotate >= 3.9.2
compress
delaycompress
sharedscripts
olddir archive/
createolddir 770 mysql mysql # only use with logrotate >= 3.8.9
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}# MariaDB writes its logs here
mariadb_log_dir: /var/lib/mysql/logs
# logrotate configuration
mariadb_logrotate_min_size: 500M
mariadb_logrotate_max_size: 1G
mariadb_logrotate_old_files: 7
mariadb_logrotate_old_dir: /var/mysql/old-logs