MySQL Медленная конфигурация журнала журнала
-
22-10-2019 - |
Вопрос
Есть ли способ сделать медленные журналы 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