Моя таблица mysql.general_log становится слишком большой? - PullRequest
6 голосов
/ 18 февраля 2012

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

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 19 октября 2013

Я делаю что-то подобное для моего файла журнала.Меня интересует только сохранение последних 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
5 голосов
/ 18 февраля 2012

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

1 голос
/ 18 февраля 2012

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

0 голосов
/ 23 ноября 2018

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

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
...