Jak mogę włączyć powolny dziennik zapytań MySQL bez ponownego uruchamiania MySQL?

88

Postępowałem zgodnie z instrukcjami tutaj: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/, ale wydaje się, że ustawia tylko próg.

Czy muszę robić coś innego, np. Ustawić ścieżkę do pliku?

Zgodnie z dokumentacją MySQL

Jeśli nie podano wartości nazwa_pliku dla --log-slow-queries, domyślną nazwą jest 
nazwa_hosta-slow.log. Serwer tworzy plik w katalogu danych, chyba że
Podana jest bezwzględna nazwa ścieżki, aby określić inny katalog. 

Bieganie

POKAŻ ZMIENNE

nie wskazuje ścieżki do pliku dziennika i nie widzę żadnego wolnego pliku dziennika zapytań na moim serwerze ...

EDYTOWAĆ

Wygląda na to, że używam serwera w wersji 5.0.77, więc musiałem zrobić:

SET GLOBAL log_slow_queries = 1;

ale otrzymuję: ERROR 1238 (HY000): Zmienna `` log_slow_queries '' jest zmienną tylko do odczytu

Zakładam, że będę musiał zrestartować serwer i ustawić log_slow_queries w mojej konfiguracji?

mmattax
źródło
5
Dlaczego nie przetestujesz tego na pudełku programistycznym?
Martin

Odpowiedzi:

93

Spróbuj SET GLOBAL slow_query_log = 'ON';i możeFLUSH LOGS;

Zakłada się, że używasz MySQL 5.1 lub nowszego. Jeśli używasz wcześniejszej wersji, musisz ponownie uruchomić serwer. Jest to udokumentowane w podręczniku MySQL . Możesz skonfigurować dziennik w pliku konfiguracyjnym lub w wierszu poleceń.

Ian Gregory
źródło
8
FLUSH SLOW LOGS jest dostępne w wersji 5.5!
Carson Reinke
Pracował również dla mnie na 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';działa również zgodnie z oczekiwaniami. FLUSH LOGSnie było konieczne w żadnym przypadku.
rinogo
28

W przypadku powolnych zapytań w wersji <5.1 działała dla mnie następująca konfiguracja:

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

Zwróć również uwagę, aby umieścić go pod [mysqld]częścią pliku konfiguracyjnego i zrestartować mysqld.

Nitin
źródło
2
To raczej log_slow_queries niż log-slow-queries
naomi
6
Dodatkowo musisz ręcznie utworzyć plik dziennika przed:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Karolem
1
log_slow_querieszostał uznany za przestarzały w MySQL 5.1.29 przez slow-query-log. MySQL 5.1 Reference Manual ma więcej szczegółów.
Xeoncross
18

Znajdź dziennik włączony czy nie?

SHOW VARIABLES LIKE '%log%';

Ustaw dzienniki: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
źródło
7

Podręcznik MySQL - plik dziennika powolnego zapytania

To twierdzi, że możesz uruchomić następujące polecenie, aby ustawić plik slow-log (od wersji 5.1.6):

set global slow_query_log_file = 'path';

Zmienna slow_query_log tylko kontroluje, czy jest włączona, czy nie.

Jaskółka oknówka
źródło
6

Te działają

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

Uszkodzony w mojej konfiguracji 5.1.42

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

Wygląda na to, że najlepszym sposobem na to jest ustawienie log_slow_time na bardzo wysokie, co powoduje „wyłączenie” powolnego dziennika zapytań. Zmniejsz log_slow_time, aby go włączyć. Użyj tej samej sztuczki (ustaw na OFF) dla log_queries_not_using_indexes.

mikeytown2
źródło
5

Myślę, że problemem jest upewnienie się, że serwer MySQL ma prawa do pliku i może go edytować.

Jeśli możesz uzyskać dostęp do pliku, możesz spróbować ustawić:
SET GLOBAL slow_query_log = 1;

Jeśli nie, zawsze możesz „przeładować” serwer po zmianie pliku konfiguracyjnego. W Linuksie jest to zwykle/etc/init.d/mysql reload

Jonathan
źródło
Otrzymuję: ERROR 1193 (HY000): Nieznana zmienna systemowa 'slow_query_log'
mmattax
Jakiej wersji MySQL używasz?
Ian Gregory
3

Jeśli chcesz włączyć ogólne dzienniki błędów i powolne dzienniki błędów zapytań w tabeli zamiast w pliku

Aby rozpocząć logowanie do tabeli zamiast do pliku:

set global log_output = “TABLE”;

Aby włączyć ogólny i powolny dziennik zapytań:

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

Aby wyświetlić dzienniki:

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

Aby uzyskać więcej informacji, odwiedź ten link

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

dilraj singh
źródło
1

To powinno działać na mysql> 5.5

POKAŻ ZMIENNE JAK „% long%”;

SET GLOBAL long_query_time = 1;

Gerard
źródło