Вопрос

Я только недавно обновился до MySQL 5.1.6, чтобы воспользоваться возможностью сохранить общий журнал в таблице -> IE mysql.general_log. Как только я это сделал, я сразу удивлен, сколько запросов фактически поражает нашу систему. У меня около 40 000 строк в этой общей таблице журналов с первого часа. Я не нашел его, написанного на документах MySQL о том, есть ли общий ограничение размера таблицы журналов.

Есть ли проблема, позволяющая этому общему журналу расти с такой скоростью?

Если есть проблема с размером, как с ней справиться?

Есть ли некоторые принятые практики, как решить проблему размера, если она есть?

Должен ли я сделать событие, чтобы очистить таблицу и сохранить данные в файл время от времени?

Большое спасибо за помощь!

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

Решение

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

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

Я делаю что -то подобное для моего файла журнала. Я заинтересован только в том, чтобы сохранить последние 24 часа, но вы можете настроить мероприятие, чтобы создать архивные столы и т. Д. Он не будет заходить в течение нескольких секунд, которые требуется для работы, но я не против.

CREATE EVENT `prune_general_log` ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-18'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT 'This will trim the general_log table to contain only the past 24 hours of logs.'
DO BEGIN
  SET GLOBAL general_log = 'OFF';
  RENAME TABLE mysql.general_log TO mysql.general_log2;
  DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 24 HOUR;
  OPTIMIZE TABLE general_log2;
  RENAME TABLE mysql.general_log2 TO mysql.general_log;
  SET GLOBAL general_log = 'ON';
END

Вы должны использовать какую -то утилиту, как mysql-log-rotate http://dev.mysql.com/doc/refman/5.0/en/log-file-maination.html Для вращающегося файла журнала.

Не уверен, что это лучшая практика, но это было моим решением:

DATE=$(date +"%Y%m%d%H%M")
mv general_log.CSV general_log.${DATE}.csv  # move the log table file
sudo -u mysql -g mysql touch general_log.CSV  # create a new log table file with correct owner and group
mysql -u root -e "FLUSH TABLE mysql.general_log"  # flush the log table
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top