Mysql

使用 rsyslog 配置 MariaDB 以記錄到 mysql.log

  • September 10, 2019

我有點難過 - 我在這裡缺少一些明顯的東西。最近我從 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 伺服器。

引用自:https://serverfault.com/questions/613340