Frage

Ich möchte Syslog für die Protokollierung von MySQL (5.1.41) auf Ubuntu (10.04 LTS) verwenden. Ich fand Informationen, die Fehlerprotokoll für Syslog ausgab.

[mysqld_safe]
syslog

Aber ich möchte Syslog für die Protokollierung allgemeiner Protokolle und langsamer Abfrageprotokolle verwenden. Bitte beraten Sie mir, wie ich Konfigurationsdatei schreibe.

Ich konnte nicht finden, wie das im Referenzhandbuch geht.

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

War es hilfreich?

Lösung

Dies ist viel einfacher auf diese Weise:

CD zu MySQL -Ordnern:

mkfifo mysql-general.log

In my.cnf sagen Sie es:

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

Konfigurieren Sie dann Ihr Syslog/syslog-ng, um das FIFO-Rohr zu lesen, und machen Sie damit so.

In meinem Fall leite ich es über das Netz über einen zentralisierten Server mit nur den Fehlerprotokollen und den langsamen Abfrageprotokollen.

In Situationen, in denen Sie auch die lokale Kopie behalten möchten, stellen Sie sie einfach so ein, wie oben beschrieben auf Tabelle und Datei ausgegeben werden.

Andere Tipps

Dieser Mechanismus unterscheidet sich völlig vom OS -Syslog.

Das Einstellen von Abmeldungen kann entweder auf Tabelle, Datei (Standard) oder keine festgelegt werden

Wenn Sie dies verwenden

[mysqld]
log-output=TABLE

Dies führt dazu, dass die Protokollierung für das allgemeine Protokoll- und/oder langsames Protokoll zu einer CSV -Datei geht. Sie können diesen CSV wie folgt in MyISAM konvertieren:

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;

Sie können diese Datei dann enorm wachsen lassen und müssen den Tisch von Zeit zu Zeit reinigen. Hier erfahren Sie, wie Sie die Tabelle General_log reinigen und die letzten 3 Tage behalten:

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;

Was ist mit dem Syslog (var/log/messus)? Sie müssen das selbst einstellen. Erstens brauchen Sie entweder Folgendes:

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

Wenn Sie das allgemeine Protokoll in beiden Formaten sammeln möchten oder

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

für nur das Dateiformat.

Machen Sie nun ein Skript, um Änderungen an /var/log/general.log zu sammeln. Das Skript sollte dem sehr ähnlich aussehen:

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

Führen Sie dieses Skript jede Minute aus. Ich empfehle, das allgemeine Protokoll alle Mitternacht wie diese abzuschneiden

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

Versuche es !!!

In /etc/my.cnf, setzen Sie es.

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

Bearbeiten /etc/rsyslog.conf (Rhel/centos) Datei und Modul aktivieren IMFILE lesen /path/to/mysql/dir/mysql-general.log und senden Sie es dann an Remote Syslog Server und respektieren Sie ein in der konfiguriertes Intervall Abrufintervall Parameter.

Dieser Abschnitt sollte unten so aussehen:

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")

Die Grenze mit der Linie mit Arbeitsverzeichnis

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

Und konfigurieren Sie es, um alle Protokolle remote zu senden

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

Oder

 *.* @remote-ip:514 ## For UDP Connection
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top