Frage

Gibt es eine Möglichkeit, MySQL langsame Protokolle zu machen, um jeden Tag eine neue Protokolldatei zu starten? Im Moment ist es nur eine einzige große Datei und muss für jeden Tag Linien grep. Es wäre viel bequemer, für alle Tage lang separate Dateien zu haben. Langsame Protokolle.

Muss ich eine My.cnf- oder eine Linux -Funktion konfigurieren?

War es hilfreich?

Lösung

Jeder ist an diese gewöhnt, die gute alte Textdatei.

Führen Sie einfach Folgendes aus, um jeden Tag einen langsamen Protokoll zu spülen

Schritt 01) Schalten Sie das langsame Abfrageprotokoll aus

SET GLOBAL slow_query_log = 'OFF';

Schritt 02) Kopieren Sie die Textdatei

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

Schritt 03) Die Datei auf Null -Bytes abschneiden

echo -n > slow-query.log 

Schritt 04) Schalten Sie das langsame Abfrageprotokoll ein

SET GLOBAL slow_query_log = 'ON';

Sie könnten zu wechseln log-output=TABLE und damit umgehen als Tisch zur Abfrage.

Schritt 01) Konvertieren

ALTER TABLE mysql.slow_log ENGINE = MyISAM;

Schritt 02) Index die Tabelle index

ALTER TABLE mysql.slow_log ADD INDEX (start_time);

Schritt 03) Aktivieren Sie das Protokollformat, um Tabelle zu sein

[mysqld]
log-output=TABLE

Schritt 04) service mysql restart

Sobald Sie MySQLD gestartet haben, werden die langsamen Protokolleinträge in der MyISAM -Tabelle mysql.slow_log aufgezeichnet.

Um die Einträge vor Mitternacht zu drehen, könnten Sie so etwas wie dieses:

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

Und das ist alles für langsame Protokolle ...

Andere Tipps

AktualisierenWie Aaron betont, besteht die Möglichkeit, dass der Kopier und die Trunken einige Einträge verpassen. Die sicherere Methode ist also zu bewegen und FLUSH.

Original

Dieser Artikel Hat das Grundprinzip, das langsame Abfrageprotokoll zu drehen, das ich verwende. Grundsätzlich müssen Sie das langsame Protokoll in eine neue Datei kopieren und dann den Inhalt des Slow.logs abschneiden:

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

Wenn Sie das langsame Protokoll nur in eine neue Datei verschieben und einen neuen "Slow.log" erstellen, funktioniert es nicht, da die bewegte Datei immer noch den gleichen Inode hat und MySQL es immer noch offen hat. Ich nehme an, die Datei zu verschieben und dann a zu geben FLUSH SLOW LOGS Der Befehl würde funktionieren, da dies die Datei schließt und wiedereröffnet wird, aber ich finde, dass das Kopieren und Trunken genauso effektiv ist und keine Anmeldung bei MySQL erfordert.

Sein Artikel erwähnt, dass Logrotate in Linux verwendet wird, aber ich habe gerade einen Cronjob gemacht, um einmal am Tag um Mitternacht zu laufen, um dies für mich zu tun.

Auch um das Problem der Replikation auf anzugehen FLUSH LOGS:

Flush -Protokolle, Flush -Master, Flush -Sklave und Flush -Tabellen mit Lesesperre (mit oder ohne Tabellenliste) werden in keinem Fall in das Binärprotokoll geschrieben, da sie Probleme verursachen würden, wenn sie an einen Sklaven repliziert würden. SRC

Nein, da diese Aussagen nicht in das binäre Protokoll geschrieben werden, wird es die Replikation nicht beeinträchtigen. Für Ihre Zwecke würde ich angeben FLUSH SLOW LOGS Nur das langsame Abfrageprotokoll zu schließen/zu öffnen.

Verwenden Sie Logrotate.d, um die Dateien täglich zu drehen und so viele Tage wie Sie möchten, oder verschieben Sie sie aus. Geben Sie dann ein Flush-Logs aus demselben Skript aus, um MySQL dazu zu bringen, eine neue Datei zu starten. drehen, auf täglich eingestellt werden, sollte Ihnen das bringen, was Sie wollen.

Ich hoffe

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top