Как выводить журналы MySQL в системный журнал?

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

  •  16-10-2019
  •  | 
  •  

Вопрос

Я хочу использовать системный журнал для регистрации MySQL (5.1.41) в Ubuntu (10.04 LTS).Я нашел информацию, которая выводит журнал ошибок в системный журнал.

[mysqld_safe]
syslog

Но я хочу использовать системный журнал для регистрации общих журналов и журналов медленных запросов.Подскажите пожалуйста, как написать конфиг?

В справочном руководстве я не нашел, как это сделать.

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

Это было полезно?

Решение

Это НАМНОГО проще сделать так:

перейдите в папки MySQL:

mkfifo mysql-general.log

в my.cnf скажите это:

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

Затем настройте свой системный журнал/syslog-ng для чтения канала FIFO и поступайте с ним по своему усмотрению.

В моем случае я передаю его по сети на централизованный сервер, который хранит только журналы ошибок и журналы медленных запросов.

В ситуациях, когда вы также хотите сохранить локальную копию, просто настройте ее для вывода в таблицу и файл, как описано выше.

Другие советы

Этот механизм полностью отличается от системного журнала ОС.

Настройка вывода в систему может быть установлен либо на таблицу, файл (по умолчанию), либо нет

Если вы используете это

[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;

Как насчет системного журнала (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 а затем отправьте его на сервер удаленного системного журнала, уважая интервал, настроенный в Опрос параметр.

Этот раздел должен выглядеть ниже:

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