My Mysql.general_log становится слишком большой?
-
27-10-2019 - |
Вопрос
Я только недавно обновился до 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