Wie kann ich das langsame Abfrageprotokoll von MySQL aktivieren, ohne MySQL neu zu starten?

88

Ich habe die Anweisungen hier befolgt: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/, aber das scheint nur den Schwellenwert festzulegen.

Muss ich noch etwas anderes tun, als den Dateipfad festzulegen?

Laut den Dokumenten von MySQL

Wenn für --log-slow-queries kein Dateiname angegeben wird, lautet der Standardname 
host_name-slow.log. Der Server erstellt die Datei im Datenverzeichnis, sofern nicht anders angegeben
Ein absoluter Pfadname wird angegeben, um ein anderes Verzeichnis anzugeben. 

Laufen

VARIABLEN ANZEIGEN

Gibt keinen Protokolldateipfad an und ich sehe keine langsame Abfrageprotokolldatei auf meinem Server ...

BEARBEITEN

Sieht so aus, als würde ich die Serverversion 5.0.77 verwenden, also musste ich Folgendes tun:

SET GLOBAL log_slow_queries = 1;

aber ich bekomme: FEHLER 1238 (HY000): Die Variable 'log_slow_queries' ist eine schreibgeschützte Variable

Ich gehe davon aus, dass ich den Server neu starten muss und log_slow_queries in meiner Konfiguration festgelegt habe.

mmattax
quelle
5
Warum testen Sie das nicht auf einer Entwicklungsbox?
Martin

Antworten:

92

Versuchen Sie es SET GLOBAL slow_query_log = 'ON';und vielleichtFLUSH LOGS;

Dies setzt voraus, dass Sie MySQL 5.1 oder höher verwenden. Wenn Sie eine frühere Version verwenden, müssen Sie den Server neu starten. Dies ist im MySQL-Handbuch dokumentiert . Sie können das Protokoll entweder in der Konfigurationsdatei oder in der Befehlszeile konfigurieren.

Ian Gregory
quelle
8
FLUSH SLOW LOGS ist in 5.5 verfügbar!
Carson Reinke
Arbeitete auch für mich am 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';funktioniert auch wie erwartet. FLUSH LOGSwar in beiden Fällen nicht notwendig.
Rinogo
28

Bei langsamen Abfragen in Version <5.1 hat die folgende Konfiguration für mich funktioniert:

log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=20
log_queries_not_using_indexes=YES

Beachten Sie auch, dass Sie es unter einen [mysqld]Teil der Konfigurationsdatei legen und neu starten mysqld.

Nitin
quelle
2
Es ist log_slow_queries eher als log-slow-Abfragen
naomi
6
Außerdem müssen Sie die Protokolldatei manuell erstellen, bevor:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles
1
log_slow_querieswurde in MySQL 5.1.29 von veraltet slow-query-log. Das MySQL 5.1-Referenzhandbuch enthält weitere Details.
Xeoncross
18

Protokoll aktiviert finden oder nicht?

SHOW VARIABLES LIKE '%log%';

Stellen Sie die Protokolle ein: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
quelle
7

MySQL Manual - Slow-Query-Log-Datei

Dies besagt, dass Sie Folgendes ausführen können, um die Slow-Log-Datei (ab 5.1.6) festzulegen:

set global slow_query_log_file = 'path';

Die Variable slow_query_log steuert nur, ob sie aktiviert ist oder nicht.

Martin
quelle
6

Diese arbeiten

SET GLOBAL LOG_SLOW_TIME = 1;
SET GLOBAL LOG_QUERIES_NOT_USING_INDEXES = ON;

In meinem Setup 5.1.42 kaputt

SET GLOBAL LOG_SLOW_QUERIES = ON;
SET GLOBAL SLOW_QUERY_LOG = ON;
set @@global.log_slow_queries=1;

http://bugs.mysql.com/bug.php?id=32565

Der beste Weg, dies zu tun, besteht darin, log_slow_time auf sehr hoch zu setzen und so das langsame Abfrageprotokoll "auszuschalten". Verringern Sie die log_slow_time, um sie zu aktivieren. Verwenden Sie denselben Trick (auf AUS gesetzt) ​​für log_queries_not_using_indexes.

mikeytown2
quelle
5

Ich denke, das Problem besteht darin, sicherzustellen, dass der MySQL-Server die Rechte an der Datei hat und diese bearbeiten kann.

Wenn Sie Zugriff auf die Datei erhalten können, können Sie folgende Einstellungen vornehmen:
SET GLOBAL slow_query_log = 1;

Wenn nicht, können Sie den Server nach dem Ändern der Konfigurationsdatei jederzeit neu laden. Unter Linux ist es normalerweise/etc/init.d/mysql reload

Jonathan
quelle
Ich erhalte: FEHLER 1193 (HY000): Unbekannte Systemvariable 'slow_query_log'
mmattax
Welche Version von MySQL verwenden Sie?
Ian Gregory
3

Wenn Sie allgemeine Fehlerprotokolle und ein langsames Abfragefehlerprotokoll in der Tabelle anstelle der Datei aktivieren möchten

So starten Sie die Anmeldetabelle anstelle der Datei:

set global log_output = TABLE”;

So aktivieren Sie das allgemeine und langsame Abfrageprotokoll:

set global general_log = 1;
set global slow_query_log = 1;

So zeigen Sie die Protokolle an:

select * from mysql.slow_log;
select * from mysql.general_log;

Weitere Details finden Sie unter diesem Link

http://easysolutionweb.com/technology/mysql-server-logs/

Dilraj Singh
quelle
1

Dies sollte auf MySQL> 5.5 funktionieren

VARIABLEN WIE '% long%' ANZEIGEN;

SET GLOBAL long_query_time = 1;

Gerard
quelle