Langsame Abfragen werden nicht protokolliert

13

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!

Die Methode
quelle
1
Bitte starte 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.
RolandoMySQLDBA
1
Wenn nach dem Lesen noch Probleme auftreten, überprüfen Sie die Variable log_output. SET GLOBAL log_output=FILEreparierte es für mich.
Molholm

Antworten:

21

Ich glaube, ich habe die Antwort bekommen:

Sie müssen diese Optionen unter den [mysqld]Abschnitt stellen

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

und starten Sie MySQL neu

UPDATE 2013-03-05 16:36 EST

Ich weiß nicht, warum das immer 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

dann laufen SELECT SLEEP(10);und sehen, ob es landet/var/logs/my.slow.log

RolandoMySQLDBA
quelle
Vielen Dank! Was Sie vorgeschlagen haben, hat geholfen. Die Einstellungen werden anscheinend ordnungsgemäß gespeichert. Ich habe meine Frage bearbeitet, um dies widerzuspiegeln.
TheMethod
Hey, nur neugierig, ich führe ein Debian-System unter einer VM aus. Ist der Pfad in Ihrer Antwort korrekt? /var/logs/statt/var/log
Silviu-Marian
Nur Information. "touch & chown" ist auch in der CentOS 6.6 mysql 5.1.73-Umgebung erforderlich.
Fumisky Wells
Ich bin gerade auf ein System gestoßen, auf dem versucht wurde, diese einzuspielen [mysqld_safe], was jedoch nicht funktionierte. Indem man sie [mysql]unterwirft, ist das Problem gelöst.
Michael Hampton