Jak włączyć funkcję MySQL, która rejestruje każdą instrukcję zapytania SQL otrzymaną od klientów i czas wysłania instrukcji zapytania? Czy mogę to zrobić w phpmyadmin lub NaviCat? Jak analizować dziennik?
252
Po pierwsze, pamiętaj, że ten plik dziennika może być bardzo duży na zajętym serwerze.
Dla mysql <5.1.29:
Aby włączyć dziennik kwerend, umieścić to w /etc/my.cnf
w [mysqld]
dziale
log = /path/to/query.log #works for mysql < 5.1.29
Ponadto, aby włączyć go z konsoli MySQL
SET general_log = 1;
Zobacz http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Dla mysql 5.1.29+
W mysql 5.1.29+ log
opcja jest przestarzała. Aby określić plik dziennika i włączyć rejestrowanie, użyj tego w my.cnf w [mysqld]
sekcji:
general_log_file = /path/to/query.log
general_log = 1
Alternatywnie, aby włączyć rejestrowanie z konsoli MySQL (musisz także jakoś określić lokalizację pliku dziennika lub znaleźć lokalizację domyślną):
SET global general_log = 1;
Należy również pamiętać, że istnieją dodatkowe opcje rejestrowania tylko wolnych zapytań lub tych, które nie używają indeksów.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Spójrz na tę odpowiedź na inne powiązane pytanie. Pokazuje, jak włączyć, wyłączyć i zobaczyć dzienniki na serwerach na żywo bez ponownego uruchamiania.
Zaloguj wszystkie zapytania w mysql
Oto podsumowanie:
Jeśli nie chcesz lub nie możesz zrestartować serwera MySQL, możesz postępować w ten sposób na uruchomionym serwerze:
Utwórz tabele dziennika (patrz odpowiedź )
Włącz rejestrowanie zapytań w bazie danych (zwróć uwagę, że ciąg „tabela” powinien być umieszczony dosłownie i nie powinien być zastępowany żadną nazwą tabeli. Dzięki Nicholas Pickering )
źródło
Używam tej metody do logowania, gdy chcę szybko zoptymalizować różne obciążenia strony. To mała wskazówka ...
Logowanie do TABELI
Następnie możesz wybrać z mojego
mysql.general_log
tabeli, aby pobrać ostatnie zapytania.Mogę wtedy zrobić coś podobnego do
tail -f
mysql.log, ale z większymi udoskonaleniami ...Ułatwia to sprawdzenie moich zapytań, które mogę spróbować ograniczyć. Korzystam z 8-sekundowego interwału, aby pobierać tylko zapytania wykonane w ciągu ostatnich 8 sekund.
źródło
To było już w komentarzu, ale zasługuje na własną odpowiedź: Bez edycji plików konfiguracyjnych: w mysql, jako root, wykonaj
Nie zapomnij go później wyłączyć:
źródło
/tmp/
, może skończyć się gdzieś jak/tmp/systemd-private-...-mariadb.service-.../tmp/
Możesz wyłączyć lub włączyć ogólny dziennik zapytań (który rejestruje wszystkie zapytania) za pomocą
źródło
Chciałem również włączyć plik dziennika MySQL, aby zobaczyć zapytania, i rozwiązałem to za pomocą poniższych instrukcji
/etc/mysql/mysql.conf.d
i włącz poniższe linie
/etc/init.d/mysql restart
/var/log/mysql/
i sprawdź dziennikiźródło
źródło
W systemie Windows możesz po prostu przejść do
Wstaw tę linię do my.ini
Plik my.ini w końcu wygląda tak
źródło
W wersji MySQL 5.6 występuje błąd. Nawet mysqld pokazuje jako:
Naprawdę ustawienia są odczytywane w następującej kolejności:
Sprawdź plik: „C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”
Mam nadzieję, że to komuś pomoże.
źródło
dla mysql> = 5.5 tylko dla wolnych zapytań (1 sekunda i więcej) my.cfg
źródło
Aby włączyć dziennik zapytań na komputerze MAC:
Otwórz następujący plik:
Ustaw adres URL dziennika zapytań w sekcji „mysqld” w następujący sposób:
Niewiele maszyn nie rejestruje zapytania poprawnie, więc w takim przypadku możesz włączyć je z konsoli MySQL
źródło
Nie do końca odpowiedź na pytanie, ponieważ pytanie ma już świetne odpowiedzi. To jest informacja dodatkowa. Włączenie general_log naprawdę obniża wydajność MySQL.
general_log =1
Przypadkowo opuściłem serwer produkcyjny i spędziłem godziny, by dowiedzieć się, dlaczego wydajność nie jest porównywalna z podobną konfiguracją na innych serwerach. Potem znalazłem to, co wyjaśnia wpływ włączenia ogólnego dziennika. http://www.fromdual.com/general_query_log_vs_mysql_performance .Istota historii, nie umieszczaj
general_log=1
w.cnf
pliku. Zamiast tego używajset global general_log =1
przez krótki czas, aby się zalogować, aby dowiedzieć się, co próbujesz znaleźć, a następnie wyłączyć.źródło
W phpMyAdmin 4.0, przejdź do Status> Monitor. Tam możesz włączyć dziennik wolnych zapytań i dziennik ogólny, zobaczyć monitor na żywo, wybrać część wykresu, zobaczyć powiązane zapytania i je przeanalizować.
źródło
W pewnym momencie musiałem upuścić i ponownie utworzyć dziennik ogólny. Podczas odtwarzania zestawy znaków zostały popsute i skończyło się na tym błędzie w dziennikach:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Więc jeśli standardowa odpowiedź „sprawdź, czy logowanie jest włączone” nie działa, sprawdź, czy pola mają odpowiedni zestaw znaków.
źródło