Цей механізм повністю відрізняється від системного журналу ОС.
Налаштування журналу-виводу може бути встановлено як TABLE, FILE (за замовчуванням), або NONE
якщо ви використовуєте це
[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;
Що з syslog (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
Спробувати !!!