Esse mecanismo é totalmente diferente do syslog do SO.
A configuração da saída de log pode ser definida como TABLE, FILE (padrão) ou NENHUM
se você usar isso
[mysqld]
log-output=TABLE
Isso fará com que o log do log geral e / ou log lento vá para um arquivo CSV. Você pode converter esse CSV para MyISAM da seguinte maneira:
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;
Você pode deixar esse arquivo crescer tremendamente e precisará limpar a tabela de vez em quando. Aqui está como limpar a tabela general_log e manter os últimos 3 dias:
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;
E o syslog (var / log / messages)? Você deve escrever isso sozinho. Primeiro, você precisa disso:
[mysqld]
log
log-ouput=TABLE,FILE
general-log-file=/var/log/mysql-general.log
se você deseja coletar o log geral nos dois formatos ou
[mysqld]
log
general-log-file=/var/log/mysql-general.log
apenas para o formato do arquivo.
Agora faça um script para coletar alterações em /var/log/general.log. O script deve se parecer muito com isso:
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
Execute esse script a cada minuto. Eu recomendo truncar o log geral toda meia-noite como esta
echo -n > /var/log/mysql-general.log
De uma chance !!!