it-swarm.it

Come posso inviare i log di MySQL a syslog?

Voglio usare syslog per la registrazione di MySQL (5.1.41) su Ubuntu (10.04 LTS). Ho trovato informazioni che hanno generato il log degli errori su syslog.

[mysqld_safe]
syslog

Ma voglio usare syslog per registrare registri generali e registri di query lente. Per favore, mi consigli come scrivere il file di configurazione?

Non sono riuscito a trovare come farlo nel manuale di riferimento.

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

13
inohiro

Questo è MOLTO più semplicemente fatto in questo modo:

cartelle da cd a mysql:

mkfifo mysql-general.log

in my.cnf dillo:

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

Quindi, configura il tuo syslog/syslog-ng per leggere il FIFO e farlo con esso come sarà ..

Nel mio caso, lo installo attraverso la rete a un server centralizzato con solo i log degli errori e i log delle query lente.

Nelle situazioni in cui si desidera conservare anche la copia locale, è sufficiente impostarlo su output su tabella e file come descritto sopra.

12
Joel Hanger

In /etc/my.cnf, impostalo.

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

Modifica / etc/rsyslog.conf (RHEL/CentOS) e abilita il modulo imfile per leggere / path/to/mysql/dir/mysql-general .log e quindi inviarlo al server syslog remoto, rispettando un intervallo configurato nel parametro PollingInterval.

Questa sezione dovrebbe essere simile al seguente:

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

Uncoment the line with WorkDirectory

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

E configuralo per inviare tutti i log in remoto

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

O

 *.* @remote-ip:514 ## For UDP Connection
4
Sergio

Tale meccanismo è completamente diverso dal syslog del sistema operativo.

L'impostazione dell'output del registro può essere impostata su TABLE, FILE (impostazione predefinita) o NONE

se lo usi

[mysqld]
log-output=TABLE

Ciò causerà la registrazione per il registro generale e/o il registro lento per passare a un file CSV. Puoi convertire quel CSV in MyISAM come segue:

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;

Puoi quindi lasciare che questo file cresca enormemente e dovrai eliminare la tabella ogni tanto. Ecco come eliminare la tabella general_log e conservare gli ultimi 3 giorni:

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;

Che dire del syslog (var/log/messages)? Devi scriverlo tu stesso. Innanzitutto, hai bisogno di questo:

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

se si desidera raccogliere il registro generale in entrambi i formati o

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

solo per il formato del file.

Ora crea uno script per raccogliere le modifiche in /var/log/general.log. Lo script dovrebbe assomigliare molto a questo:

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

Esegui questo script ogni minuto. Consiglio di troncare il registro generale ogni mezzanotte in questo modo

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

Provaci !!!

4
RolandoMySQLDBA