Powolne zapytania nie są rejestrowane

13

Próbuję włączyć powolne rejestrowanie zapytań na naszym serwerze, aby zidentyfikować wszelkie zapytania, które mogłyby skorzystać z optymalizacji. Brzmi dość prosto, jednak mój plik nie jest zapisywany. Nie otrzymuję żadnych błędów ani nic podobnego, po prostu nie rejestruje powolnych zapytań. Pamiętam, aby zrestartować mysql po moich zmianach konfiguracji.

Używam MySQL wer. 5.1.61. Oto, co mam w my.cnf:

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

plik /var/logs/my.slow.log ma mysql jako właściciela, również w interesie debugowania dałem odczyt / zapis wszystkim w pliku dziennika.

Mam long_query_time ustawiony powyżej na 1, ponieważ chcę tylko sprawdzić, czy to działa. Próbowałem ustawić niższą wartość (np. 0,3), ale nadal nic nie loguję. Wiem, że zapytania, które są uruchomione przez moją aplikację, trwają dłużej niż 1 sekundę, a także celowo uruchomiłem zapytania SELECT sleep(10);w terminalu ( ) w celu przetestowania, a dziennik jest nadal pusty.

Przejrzałem dokumenty, z tego, co widzę, powinno działać. Czy ktoś ma jakieś sugestie, co robię źle? Wszelkie porady będą mile widziane, wielkie dzięki!

Edycja: Jak zapytałem w komentarzach, uruchomiłem zapytanie:

 `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');`

Wynik:

10.0000000
/var/run/mysqld/mysqld-slow.log
OFF

Oczywiście moje zmiany konfiguracji nie są brane pod uwagę, ponieważ uważam, że są to wartości domyślne. Jestem pewien, że plik my.cnf, który zmieniam, jest analizowany, tak jak gdybym wprowadził niepoprawną wartość, mysql wyświetli błąd podczas restartu. Co tu się dzieje?

Kolejna edycja:

Po skorzystaniu z porady @RolandoMySQLDBA i przeniesieniu moich wierszy konfiguracji z powolnymi zapytaniami do pod [mysqld]moimi ustawieniami wydaje się oszczędzać. Teraz wynikiem powyższego zapytania zmienna_wartość jest:

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

Jednak nadal nie widzę pliku, do którego zapisywany jest mój.slow.log. Nie sądzę, że jest to problem z uprawnieniami, ponieważ plik jest własnością mysql i dodałem wszystkie uprawnienia dla wszystkich użytkowników pliku. Czy ktoś mógłby wymyślić powód, dla którego to nie zadziałałoby?

Edycja: rozwiązana! Ścieżka do dziennika powolnych zapytań była niepoprawna. Powinien to być /var/log/my.slow.log zamiast / var / log * s * / my.slow.log. Dzięki wszystkim za pomoc, nauczyłem się dużo!

Metoda
źródło
1
Uruchom SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');i opublikuj jego wynik.
RolandoMySQLDBA
1
Jeśli po przeczytaniu tego ktoś nadal ma problemy, sprawdź zmienną log_output. SET GLOBAL log_output=FILEnaprawiłem to dla mnie.
molholm

Odpowiedzi:

21

Myślę, że mam odpowiedź:

Musisz umieścić te opcje w [mysqld]sekcji

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

i zrestartuj mysql

AKTUALIZACJA 2013-03-05 16:36 EST

Nie wiem, dlaczego tak się dzieje, ale spróbuj tego:

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

następnie biegnij SELECT SLEEP(10);i zobacz, czy wyląduje/var/logs/my.slow.log

RolandoMySQLDBA
źródło
Dzięki! To, co zasugerowałeś, pomogło, wygląda na to, że ustawienia są poprawnie zapisywane, ale nadal nie otrzymuję żadnych zapisów. Zredagowałem moje pytanie, aby to odzwierciedlić.
TheMethod
Hej, po prostu ciekawy, uruchamiam system Debian pod maszyną wirtualną. Czy ścieżka jest poprawna w twojej odpowiedzi? /var/logs/zamiast/var/log
Silviu-Marian
Tylko informacje. „touch & chown” są również konieczne w środowisku CentOS 6.6 mysql 5.1.73.
Fumisky Wells,
Właśnie natknąłem się na system, w którym próbowali je wprowadzić [mysqld_safe], co nie działało. Poddanie ich [mysql]rozwiązaniu problemu.
Michael Hampton,