Mysql

如何將 MySQL 日誌輸出到 syslog?

  • December 31, 2021

我想使用 syslog 在 Ubuntu(10.04 LTS)上記錄 MySQL(5.1.41)。我找到了將錯誤日誌輸出到 syslog 的資訊。

[mysqld_safe]
syslog

但我想使用 syslog 來記錄一般日誌和慢查詢日誌。請告訴我如何編寫配置文件?

我在參考手冊中找不到如何做到這一點。

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

這樣做更簡單:

cd 到 mysql 文件夾:

mkfifo mysql-general.log

在 my.cnf 中告訴它:

[mysqld]
general-log-file = /path/to/mysql/dir/mysql-general.log

然後,配置您的 syslog/syslog-ng 以讀取 FIFO 管道並按照它的方式處理它。

在我的情況下,我通過網路將它通過管道傳輸到一個集中式伺服器,但是只有錯誤日誌和慢查詢日誌。

在您還想保留本地副本的情況下,只需將其設置為輸出到表和文件,如上所述。

該機制與作業系統系統日誌完全不同。

設置日誌輸出可以設置為 TABLE、FILE(預設)或 NONE

如果你用這個

[mysqld]
log-output=TABLE

這將導致正常日誌和/或慢速日誌的日誌記錄轉到 CSV 文件。您可以將該 CSV 轉換為 MyISAM,如下所示:

SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;

然後你可以讓這個文件極大地增長,你將不得不每隔一段時間清理一次表。以下是清除 general_log 表並保留最近 3 天的方法:

SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
CREATE TABLE mysql.general_log_new LIKE mysql.general_log;
INSERT INTO mysql.general_log_new
SELECT * FROM mysql.general_log WHERE event_time > NOW() - INTERVAL 3 DAY;
DROP TABLE mysql.general_log;
ALTER TABLE mysql.general_log_new RENAME mysql.general_log;
SET GLOBAL general_log = @old_log_state;

系統日誌(var/log/messages)呢?您必須自己編寫腳本。首先,你要麼需要這個:

[mysqld]
log
log-ouput=TABLE,FILE
general-log-file=/var/log/mysql-general.log

如果您想收集兩種格式的正常日誌或

[mysqld]
log
general-log-file=/var/log/mysql-general.log

僅用於文件格式。

現在編寫一個腳本來收集對 /var/log/general.log 的更改。腳本應該看起來很像這樣:

NEWCOUNT=`wc -l < /var/log/mysql-general.log`
if [ -f /tmp/general-log-lines.txt ]
then
   OLDCOUNT=`cat /tmp/general-log-lines.txt`
   if [ ${OLDCOUNT} -lt ${NEWCOUNT} ]
   then
       DIFF=`echo ${NEWCOUNT}-${OLDCOUNT}|bc`
       tail -${DIFF} < /var/log/mysql-general.log >> /var/log/messages
       echo ${NEWCOUNT} > /tmp/general-log-lines.txt
   fi
fi

每分鐘執行一次此腳本。我建議像這樣在每個午夜截斷一般日誌

echo -n > /var/log/mysql-general.log

試一試 !!!

引用自:https://dba.stackexchange.com/questions/3552