本文旨在通过把 MariaDB 的错误日志重定向到 Docker 的错误控制台以实现通过 Loki 收集日志,并使用日志轮转控制日志文件大小。
指定固定的日志文件名
1
2
| [mariadb]
log_error=/config/databases/mariadb.err
|
把容器中的错误日志重定向到 Docker 日志控制台
在容器的环境变量中添加以下内容:
1
2
| DOCKER_MODS=lscr.io/linuxserver/mods:universal-stdout-logs
LOGS_TO_STDOUT=/config/databases/mariadb.err
|
设置 MariaDB 的 root@localhost 用户的鉴权方式
创建 root@localhost 用户:
1
| CREATE USER 'root'@'localhost' IDENTIFIED VIA 'unix_socket';
|
或更改已存在的 root@localhost 用户的鉴权方式:
1
| ALTER USER 'root'@'localhost' IDENTIFIED VIA 'unix_socket';
|
受权 RELOAD 给 root@localhost 用户
1
| GRANT RELOAD ON *.* TO 'root'@'localhost';`
|
配置 logrotate
在宿主机创建 /etc/logrotate.d/mariadb
:
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
| /mnt/user/appdata/mariadb/databases/mariadb.err {
su nobody users
missingok
create 660 nobody users
notifempty
daily
minsize 1M
maxsize 100M
rotate 30
dateext
dateformat .%Y-%m-%d-%H-%M-%S
compress
delaycompress
sharedscripts
olddir ../archive/
createolddir 770 nobody users
postrotate
# just if mysqld is really running
if docker exec mariadb test -x /usr/bin/mysqladmin && \
docker exec mariadb /usr/bin/mysqladmin ping &>/dev/null
then
docker exec mariadb /usr/bin/mysqladmin --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}
|
可通过以下命令测试效果:
1
| logrotate --force /etc/logrotate.d/mariadb`
|