Вопрос

Есть ли способ сделать медленные журналы MySQL для запуска нового файла журнала каждый день? На данный момент это всего лишь один большой файл, и ему приходится грип -линии на каждый день. Было бы намного удобнее иметь отдельные файлы на каждые дни медленные журналы.

Должен ли я настроить функцию my.cnf или какую -то функцию Linux?

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

Решение

Все привыкли к этому, старый добрый текстовый файл.

Просто запустите следующее, чтобы промывать медленный журнал каждый день

Шаг 01) Выключите журнал медленного запроса

SET GLOBAL slow_query_log = 'OFF';

Шаг 02) Скопируйте текстовый файл

cat slow-query.log | gzip > /logs/slow-query-`date +"%Y%m%d-%H%M"`.log.gz

Шаг 03) Обрезайте файл на нулевые байты

echo -n > slow-query.log 

Шаг 04) Включите журнал медленного запроса

SET GLOBAL slow_query_log = 'ON';

Вы могли бы переключиться на log-output=TABLE и разобраться с этим как таблица, чтобы запросить.

Шаг 01) преобразовать mysql.slow_log из CSV в myisam

ALTER TABLE mysql.slow_log ENGINE = MyISAM;

Шаг 02) Индексировать таблицу

ALTER TABLE mysql.slow_log ADD INDEX (start_time);

Шаг 03) Активируйте формат журнала, чтобы быть таблицей

[mysqld]
log-output=TABLE

Шаг 04) service mysql restart

После того, как вы запустите Mysqld, записи медленных журналов записываются в таблице Myisam mysql.slow_log;

Чтобы повернуть записи до полуночи, вы можете что -то вроде этого:

SET GLOBAL slow_query_log = 'OFF';
SET @dt = NOW();
SET @dtstamp = DATE_FORMAT(@dt,'%Y%m%d_%H%i%S');
SET @midnight = DATE(@dt) + INTERVAL 0 SECOND;
ALTER TABLE mysql.slow_log RENAME mysql.slow_log_old;
CREATE TABLE mysql.slow_log LIKE mysql.slow_log_old;
INSERT INTO mysql.slow_log SELECT * FROM mysql.slow_log_old WHERE start_time >= @midnight;
DELETE FROM mysql.slow_log_old WHERE start_time >= @midnight;
SET @sql = CONCAT('ALTER TABLE mysql.slow_log_old RENAME mysql.slow_log_',@dtstamp);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
SET GLOBAL slow_query_log = 'ON';

И это все для медленных журналов ...

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

ОбновлятьКак указывает Аарон, есть вероятность, что копирование и уточнение может пропустить некоторые записи. Таким образом, более безопасным методом является перемещение и FLUSH.

Оригинал

эта статья имеет основной принцип для вращения медленного журнала запросов, который я использую. В основном вам нужно скопировать медленный журнал в новый файл, а затем усечь содержимое Slow.log:

cp log/slow.log log/slow.log.`date +%M`; > log/slow.log

Если вы просто перемещаете медленный журнал в новый файл и создаете новый «slow.log», он не будет работать, потому что перемещенный файл все еще имеет такой же INODE, и MySQL все еще открыт. Я полагаю, перемещение файла, а затем выпустить FLUSH SLOW LOGS Команда будет работать, так как это закрывает файл и вновь открывается, но я считаю, что копия и урезание такими же эффективными и не требует входа в MySQL.

В его статье упоминается использование Logrotate в Linux, но я только что сделал Cronjob, чтобы бегать один раз в день в полночь, чтобы сделать это для меня.

Кроме того, чтобы решить проблему репликации на FLUSH LOGS:

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

Так что нет, поскольку эти утверждения не записаны в бинарный журнал, это не будет мешать репликации. Для ваших целей я бы указал FLUSH SLOW LOGS только закрыть/открыть журнал медленного запроса.

Используйте logrotate.d, чтобы ежедневно вращать файлы и сохранить столько дней, сколько вы хотите, или отключите их ... затем выпустите флеш-logs из одного и того же скрипта, чтобы MySQL запустил новый файл .... Имея его в журнале Вращайтесь, установить на ежедневное время, чтобы получить то, что вы хотите ..

Я надеюсь, что когда -нибудь они реализуют что -то похожее на 'expirire_log_days' для отладки журналов, таких как Genlog и Mlow Log

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top