mysqlログをsyslogに出力するにはどうすればよいですか?

dba.stackexchange https://dba.stackexchange.com/questions/3552

  •  16-10-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

これは、この方法ではるかに簡単に行われます。

MySQLフォルダーへのCD:

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;

syslog(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
ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top