我想使用Syslog在Ubuntu(10.04 LTS)上记录MySQL(5.1.41)。我找到了将误差日志输出到syslog的信息。

[mysqld_safe]
syslog

但是我想使用syslog来记录一般日志和慢速查询日志。请告知我如何编写配置文件?

我在参考手册中找不到如何做到这一点。

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

有帮助吗?

解决方案

这更简单地以这种方式完成:

CD到MySQL文件夹:

mkfifo mysql-general.log

在我的cnf中告诉它:

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

然后,配置您的syslog/syslog-ng以读取FIFO管道并随身携带。

就我而言,我将其穿过网络到集中式服务器,仅具有错误日志和缓慢的查询日志。

在您要保留本地副本的情况下,只需将其设置为输出到表格和文件,如上所述。

其他提示

该机制与OS Syslog完全不同。

设置日志输出可以设置为表,文件(默认)或无

如果您使用此

[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;

syslog(var/log/消息)呢?您必须自己脚本。首先,您要么需要这个:

[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

试试看 !!!

在/etc/my.cnf中,设置它。

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

编辑 /etc/rsyslog.conf (RHEL/CENTOS)文件,并启用模块 imfile 读书 /path/to/mysql/dir/mysql-general.log 然后,将其发送到远程syslog服务器,尊重在 民意测验Interval 范围。

本节应如下所示:

module(load="imfile" PollingInterval="1")

input(type="imfile"
    File="/path/to/mysql/dir/mysql-general.log"
    stateFile="statefile-mysql-general"
    Tag="mysql-general"
    Severity="warning"
    Facility="local1")

无与伦比 WorkDirectory

$WorkDirectory /var/lib/rsyslog # where to place spool files

并将其配置为远程发送所有日志

*.* @@remote-ip:514 ## For TCP Connection

或者

 *.* @remote-ip:514 ## For UDP Connection
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top