我想使用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
log_syslog
。
我想使用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
log_syslog
。
Answers:
这样更简单:
cd到mysql文件夹:
mkfifo mysql-general.log
在my.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;
那么系统日志(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
试试看 !!!
在/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服务器,并遵守在PollingInterval参数。
本节如下所示:
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