Ich versuche, die langsame Abfrageprotokollierung auf unserem Server zu aktivieren, um Abfragen zu identifizieren, die optimiert werden könnten. Klingt einfach, meine Datei wird jedoch nicht beschrieben. Ich bekomme keine Fehler oder ähnliches, es scheint nur nicht die langsamen Abfragen zu protokollieren. Ich habe daran gedacht, mysql nach meinen Konfigurationsänderungen neu zu starten.
Ich benutze MySQL Ver 5.1.61. Folgendes habe ich in meiner.cnf:
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1
Die Datei /var/logs/my.slow.log hat Mysql als Eigentümer, auch im Interesse des Debuggens habe ich allen in der Protokolldatei Lese- / Schreibzugriff gegeben.
Ich habe die long_query_time oben auf 1 gesetzt, da ich nur sehen möchte, ob es funktioniert. Ich habe versucht, es niedriger einzustellen (z. B. 0,3), aber ich bekomme immer noch nichts protokolliert. Ich weiß, dass die Abfragen, die in meiner App ausgeführt werden, länger als 1 Sekunde dauern und ich habe auch absichtlich Abfragen ( SELECT sleep(10);
) im Terminal zum Testen protokolliert und das Protokoll ist immer noch leer.
Ich habe die Dokumente durchgesehen, soweit ich sehen kann, sollte dies funktionieren. Hat jemand Vorschläge, was ich falsch mache? Jeder Rat wäre dankbar, vielen Dank!
Bearbeiten: Wie in Kommentaren gefragt, habe ich die Abfrage ausgeführt:
`SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');`
Das Ergebnis:
10.0000000
/var/run/mysqld/mysqld-slow.log
OFF
Offensichtlich werden meine Konfigurationsänderungen nicht berücksichtigt, da ich glaube, dass dies Standardeinstellungen sind. Ich bin mir ziemlich sicher, dass die my.cnf-Datei, die ich ändere, analysiert wird, als ob ich einen ungültigen Wert eingebe. Mysql wird beim Neustart einen Fehler machen. Was könnte hier los sein?
Ein weiterer Edit:
Nachdem ich @RolandoMySQLDBAs Rat befolgt und meine Konfigurationszeilen für langsame Abfragen unter [mysqld]
meine Einstellungen verschoben habe, scheint dies zu speichern. Jetzt lautet das Ergebnis der obigen variable_value-Abfrage:
1.0000000
/var/logs/my.slow.log
ON
Die Datei my.slow.log, in die geschrieben wird, wird jedoch immer noch nicht angezeigt. Ich glaube nicht, dass es sich um ein Berechtigungsproblem handelt, da die Datei im Besitz von mysql ist und ich alle Berechtigungen für alle Benutzer der Datei hinzugefügt habe. Konnte sich jemand einen Grund vorstellen, warum dies nicht funktionieren würde?
Edit: Gelöst! Der Pfad zum langsamen Abfrageprotokoll war falsch. Es sollte /var/log/my.slow.log anstelle von /var/log * s * / my.slow.log lauten. Danke an alle für die Hilfe, ich habe allot gelernt!
quelle
SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');
und poste die Ausgabe.SET GLOBAL log_output=FILE
reparierte es für mich.Antworten:
Ich glaube, ich habe die Antwort bekommen:
Sie müssen diese Optionen unter den
[mysqld]
Abschnitt stellenund starten Sie MySQL neu
UPDATE 2013-03-05 16:36 EST
Ich weiß nicht, warum das immer noch passiert, aber bitte versuchen Sie Folgendes:
dann laufen
SELECT SLEEP(10);
und sehen, ob es landet/var/logs/my.slow.log
quelle
/var/logs/
statt/var/log
[mysqld_safe]
, was jedoch nicht funktionierte. Indem man sie[mysql]
unterwirft, ist das Problem gelöst.