it-swarm.com.de

Langsame Abfragen werden nicht protokolliert

Ich versuche, die langsame Abfrageprotokollierung auf unserem Server zu aktivieren, um alle Abfragen zu identifizieren, die optimiert werden könnten. Klingt einfach genug, aber meine Datei wird nicht beschrieben. Ich bekomme keine Fehler oder ähnliches, es scheint nur nicht die langsamen Abfragen zu protokollieren. Ich habe daran gedacht, mysql neu zu starten, nachdem sich meine Konfiguration geändert hat.

Ich verwende MySQL Ver 5.1.61. Folgendes habe ich in my.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 meine App ausführt, länger als 1 Sekunde dauern, und ich habe auch absichtlich Protokollabfragen (SELECT sleep(10);) im Terminal zum Testen ausgeführt, und das Protokoll ist 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 den 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 verursachen. Was könnte hier los sein?

Noch eine Bearbeitung:

Nachdem ich den Rat von @RolandoMySQLDBA befolgt und meine Konfigurationszeilen für langsame Abfragen auf unter [mysqld] Verschoben habe, scheinen meine Einstellungen zu speichern. Das Ergebnis der obigen Abfrage variable_value lautet nun:

1.0000000
/var/logs/my.slow.log
ON

Ich sehe jedoch immer noch nicht, in welche Datei my.slow.log geschrieben wird. Ich glaube nicht, dass es sich um ein Berechtigungsproblem handelt, da die Datei mysql gehört nd Ich habe alle Berechtigungen für alle Benutzer der Datei hinzugefügt. Könnte sich jemand einen Grund vorstellen, warum dies nicht funktionieren würde?

Edit: Gelöst! Der Pfad zum langsamen Abfrageprotokoll war falsch. Er sollte /var/log/my.slow.log anstelle von/var/log * s sein. */my.slow.log. Vielen Dank an alle für die Hilfe, ich habe viel gelernt!

13
TheMethod

Ich glaube ich habe die Antwort bekommen:

Sie müssen diese Optionen in den Abschnitt [mysqld] Einfügen

[mysqld]
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1

und starte mysql neu

UPDATE 2013-03-05 16:36 EST

Ich weiß nicht, warum das noch passiert, aber bitte versuchen Sie Folgendes:

service mysql stop
rm -f /var/logs/my.slow.log
touch /var/logs/my.slow.log
chown mysql:mysql /var/logs/my.slow.log
service mysql start

führen Sie dann SELECT SLEEP(10); aus und prüfen Sie, ob es in /var/logs/my.slow.log landet.

21
RolandoMySQLDBA