配置 MariaDB 使用 rsyslog 记录到 mysql.log

配置 MariaDB 使用 rsyslog 记录到 mysql.log

我有点困惑——这里显然我忽略了一些事情。最近我从 mySQL 切换到了 mariaDB。到目前为止,一切都正常——除了日志记录,这是我今天才意识到的。

mariaDB 的所有日志都进入 /var/log/daemon.log-logfile 而不是 /var/log/mysql.log - 我无法弄清楚为什么。

因此,根据mariadb的my.cnf

# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# we do want to know about network errors and such
log_warnings            = 2

日志记录在 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 中配置。此文件包含以下行:

[mysqld_safe]
syslog
syslog-facility = mysql

那么,好吧 - 应该没问题,对吧?但是 ps -ef|grep logger 显示:

logger -t mysqld -p daemon.error

那么...什么?为什么?我真的不明白为什么它要使用“守护进程”功能?好吧,深入挖掘一下 - 我发现以下内容。当我尝试通过自己调用记录器来测试日志记录时,我得到了以下内容:

$> logger -p mysql.error test
logger: unknown facility name: mysql.

好吧,我想——虽然这对我来说毫无意义,但现在就使用 local1 吧。但是这样做,在将 mysqld_safe_syslog.cnf 中的值更改为

syslog-facility = local1

什么都没改变:

$> ps -ef|grep logger
logger -t mysqld -p daemon.error

我四处寻找,但找不到有关此主题的任何有用信息。你能帮助我吗?如何让 mariadb 记录到其他地方?

答案1

嗯,这很简单——我的初始化脚本坏了:

# priority can be overriden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i"

修改后一切正常。没想到要真正检查一下初始化脚本……好吧……下次 ;)

答案2

对于使用 systemd 的系统,我们需要使用以下指令设置覆盖以将日志发送到 syslog

`[Service]
 StandardOutput=syslog
 StandardError=syslog
 SyslogFacility=local5
 SyslogLevel=err`

用于systemctl edit mariadb编辑 mariadb 启动。然后从中移动所有选择器规则/etc/rsyslog.conf to /etc/rsyslog.d/rules.conf(注意:这是为了避免由于默认的 rsyslog 选择规则而导致日志重复),在 /etc/rsyslog.d/rules.conf 中设置以下内容

#custom mariDB logging
if $syslogfacility-text == 'local5' or $programname == 'mysqld-scl-helper' or $programname == 'mysqld*' then {
        action(type="omfile" file="/var/log/mariadb/mariadb-error.log")
        action(type="omfwd" Target="syslogserver.com" Port="514" Protocol="tcp")
        *.* stop
}

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local5.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

最后,您需要log-error从 mariadb 配置中注释指令,因为它可能会阻止将完整的日志消息发送到远程系统日志服务器。

相关内容