Domanda

C'è un modo di fare MySQL log lento a partire nuovo file di registro ogni giorno? Al momento è solo un singolo file di grandi dimensioni, e hanno a grep linee per tutti i giorni. Sarebbe molto più comodo avere file separati per ogni giorni logs lenti.

Devo configurare un my.cnf o qualche caratteristica linux?

È stato utile?

Soluzione

Tutti sono abituati a questo, il buon vecchio file di testo.

Basta eseguire il seguente per irrigare un lento log di tutti i giorni

STEP 01) Spegnere il log delle query lente

SET GLOBAL slow_query_log = 'OFF';

STEP 02) Copiare il file di testo

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

STEP 03) Tronca il file a zero byte

echo -n > slow-query.log 

STEP 04) Accendere il log delle query lente

SET GLOBAL slow_query_log = 'ON';

Si potrebbe passare a log-output=TABLE e trattare con esso come una tabella di query.

STEP 01) Convert mysql.slow_log dal CSV per MyISAM

ALTER TABLE mysql.slow_log ENGINE = MyISAM;

STEP 02) Indice della tabella

ALTER TABLE mysql.slow_log ADD INDEX (start_time);

STEP 03) formato di registro Attiva per essere TABELLA

[mysqld]
log-output=TABLE

STEP 04) service mysql restart

Una volta che l'avvio mysqld, le voci del registro lenti sono registrati nella mysql.slow_log tabella MyISAM;

Per ruotare le voci prima di mezzanotte, si potrebbe qualcosa di simile:

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';

e questo è tutto per i registri lenti ...

Altri suggerimenti

Aggiorna Come Aaron fa notare, v'è la possibilità che il copia-e-troncare può mancare alcune voci. Quindi il metodo più sicuro è quello di spostare e FLUSH.

Original

questo articolo ha il principio di base per la rotazione del log delle query lente che uso. Fondamentalmente è necessario copiare il log lento in un nuovo file, quindi troncare i contenuti del slow.log:

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

Se basta spostare il registro lento in un nuovo file e la creazione di un nuovo 'slow.log', non funzionerà perché il file spostato ha ancora lo stesso inode, e MySQL è ancora aperto. Suppongo che lo spostamento del file e quindi l'emissione di un comando FLUSH SLOW LOGS avrebbe funzionato, come che chiude il file e riapre, ma trovo la copia-e-Tronca a essere altrettanto efficace e non richiede registrazione in mysql.

Il suo articolo cita utilizzando logrotate in Linux, ma ho appena fatto un cronjob per eseguire una volta al giorno a mezzanotte per fare questo per me.

Inoltre, per affrontare la questione della replica su FLUSH LOGS:

REGISTRI colore, FLUSH Master, Slave A FILO, e tavoli a filo con LEGGI LOCK (con o senza un elenco tavolo) non sono scritti nel log binario in ogni caso, perché sarebbe causare problemi se replicato a uno schiavo. [fonte]

Quindi no, dal momento che tali affermazioni non vengono scritte nel log binario, esso non interferisce con la replicazione. Per i vostri scopi Vorrei specificare FLUSH SLOW LOGS solo vicino / aprire il log delle query lente.

utilizzare logrotate.d per ruotare tutti i giorni i file e mantenere il maggior numero di giorni che si desidera o spostarli fuori ... quindi emettere un flush-logs dello stesso script per ottenere MySQL per iniziare un nuovo file .... avendo che nel registro di rotazione, insieme a tutti i giorni dovrebbe ottenere ciò che vuoi ..

sto sperando un giorno si implementare qualcosa di simile a 'expire_log_days' per il debug log come Genlog e lento log

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top