MySQL langsame Protokollkonfiguration
-
22-10-2019 - |
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?
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