使用 rsyslog 配置 MariaDB 以記錄到 mysql.log
我有點難過 - 我在這裡缺少一些明顯的東西。最近我從 mySQL 切換到了 mariaDB。到目前為止,一切都在工作 - 除了日誌記錄,正如我今天所意識到的那樣。
mariaDB 的所有日誌都進入 /var/log/daemon.log-log 文件而不是 /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 -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 在其他地方登錄?
好吧,這很容易——我的初始化腳本很糟糕:
# priority can be overriden and "-s" adds output to stderr ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i"
改變它,一切都很好。沒想到實際檢查初始化腳本……嗯……下次;)
對於帶有 systemd 的系統,我們需要設置一個覆蓋以使用以下指令將日誌發送到 syslog
`[Service] StandardOutput=syslog StandardError=syslog SyslogFacility=local5 SyslogLevel=err`
用於
systemctl edit mariadb
編輯 mariadb 啟動。然後從/etc/rsyslog.d/rules.conf 中移動所有選擇器規則/etc/rsyslog.conf to /etc/rsyslog.d/rules.conf
(注意:這是為了避免由於預設的 rsyslog 選擇規則而導致日誌重複),設置以下內容#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 配置的指令,因為它可能會阻止將完整的日誌消息發送到遠端 syslog 伺服器。