我有点困惑——这里显然我忽略了一些事情。最近我从 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 配置中注释指令,因为它可能会阻止将完整的日志消息发送到远程系统日志服务器。