Pregunta

Quiero usar syslog para el registro de MySQL (5.1.41) en Ubuntu (10.04 LTS). He encontrado que la información de registro de errores de salida a syslog.

[mysqld_safe]
syslog

Pero quiero usar syslog para registrar los registros generales y registros de consultas lentas. Espero su consejo cómo escribir archivo de configuración?

No pudo encontrar la manera de hacer eso en el manual de referencia.

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

¿Fue útil?

Solución

Esto es mucho más simple hecho de esta manera:

cd a las carpetas de MySQL:

mkfifo mysql-general.log

en my.cnf dicen que:

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

A continuación, configure su syslog / syslog-ng a leer la tubería FIFO y hacer con ella lo que lo hará ..

En mi caso, la tubería al otro lado de la red a un servidor centralizado con sólo los registros de errores y registros de consultas lento sin embargo.

En situaciones en las que desea mantener también copia local, acaba de establecer en la salida a la tabla y el archivo como se describe anteriormente.

Otros consejos

Ese mecanismo es completamente diferente de registro del sistema operativo.

Configuración de inicio de sesión de salida se puede establecer en mesa, ARCHIVO (por defecto), o NINGUNO

Si se utiliza este

[mysqld]
log-output=TABLE

Esto hará que el registro para el registro general y / o registro lento para ir a un archivo CSV. Puede convertir CSV a que MyISAM de la siguiente manera:

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;

A continuación, puede dejar este archivo crece enormemente y que tendrá que purgar la tabla de vez en cuando. Aquí es cómo purgar la tabla general_log y mantener los 3 últimos días:

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;

¿Qué hay de registro del sistema (var / log / messages)? Debe script que usted mismo. En primer lugar, que sea necesario lo siguiente:

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

Si desea recopilar el registro general en ambos formatos o

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

por sólo el formato de archivo.

Ahora hacer un script para cobrar a los cambios /var/log/general.log. El guión debe parecerse mucho a esto:

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

Ejecutar este script cada minuto. Recomiendo truncar el registro general de cada medianoche como esto

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

darle una oportunidad !!!

En /etc/my.cnf, la puso.

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

Editar archivo /etc/rsyslog.conf (RHEL / CentOS), y activar el módulo imfile para leer / ruta / a / mysql / dir / MySQL -general.log y, a continuación, enviarlo al servidor de registro del sistema remoto, respetando un intervalo configurado en el parámetro PollingInterval.

Esta sección debe tener este aspecto a continuación:

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 la línea con WorkDirectory

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

y configurarlo para enviar todos los registros de forma remota

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

o

 *.* @remote-ip:514 ## For UDP Connection
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top