Jak mogę śledzić zapytania MySQL na moim serwerze Linux, gdy się pojawiają?
Na przykład chciałbym skonfigurować jakiś odbiornik, a następnie poprosić o stronę internetową i wyświetlić wszystkie zapytania wykonane przez silnik lub po prostu wyświetlić wszystkie zapytania uruchamiane na serwerze produkcyjnym. W jaki sposób mogę to zrobić?
mysql
monitoring
barfoon
źródło
źródło
Odpowiedzi:
Możesz uruchomić polecenie MySQL,
SHOW FULL PROCESSLIST;
aby zobaczyć, jakie zapytania są przetwarzane w danym momencie, ale prawdopodobnie nie osiągniesz tego, na co liczysz.Najlepszą metodą uzyskania historii bez konieczności modyfikowania każdej aplikacji korzystającej z serwera są prawdopodobnie wyzwalacze. Można skonfigurować wyzwalacze, aby każde uruchomienie zapytania powodowało wstawienie zapytania do jakiejś tabeli historii, a następnie utworzyć osobną stronę, aby uzyskać dostęp do tych informacji.
Pamiętaj jednak, że prawdopodobnie znacznie spowolni to wszystko na serwerze, dodając dodatkowo
INSERT
do każdego zapytania.Edycja: inną alternatywą jest Ogólny dziennik zapytań , ale zapisanie go do płaskiego pliku wyeliminowałoby wiele możliwości elastycznego wyświetlania, szczególnie w czasie rzeczywistym. Jeśli chcesz po prostu prostego, łatwego do wdrożenia sposobu, aby zobaczyć, co się dzieje, włączenie GQL, a następnie użycie uruchamiania
tail -f
na pliku dziennika załatwi sprawę .źródło
Możesz bardzo łatwo zapisać każde zapytanie do pliku dziennika:
Wykonuj zapytania (na dowolnym db). Grep lub w inny sposób zbadaj
/var/run/mysqld/mysqld.log
Więc nie zapomnij
lub wydajność spadnie, a dysk się zapełni!
źródło
tail -f -n300 /var/run/mysqld/mysqld.log
do śledzenia pliku dziennikaSELECT name FROM person where id=?
ale nie wiem coid
jest.SHOW VARIABLES
nie działało dla mnie. JednakSELECT @@GLOBAL.general_log_file;
działa dobrze. (MariaDB 10.1.9)SHOW VARIABLES LIKE "log_output%"
. Jeśli jest ustawiony natable
, dzienniki będą zapisywane w samej bazie danych, tabelamysql.general_log
nie w systemie plików. Możesz to zmienić zafile
pomocąSET GLOBAL log_output = 'file';
Mimo że odpowiedź została już zaakceptowana, chciałbym przedstawić, co może być najprostszą opcją:
Spowoduje to wydrukowanie bieżących zapytań na ekranie co sekundę.
-u
Użytkownik mysql, który chcesz wykonać jako polecenie-p
Monituj o hasło (więc nie musisz go zapisywać w pliku ani wyświetlać polecenia w historii poleceń)i
Interwał w sekundach.--verbose
flagi, aby wyświetlić pełną listę procesów, wyświetlając całe zapytanie dla każdego procesu. (Dzięki, nmat )Możliwy jest minus: szybkie zapytania mogą się nie pojawiać, jeśli będą działały między skonfigurowanym interwałem. IE: Mój interwał jest ustawiony na jedną sekundę i jeśli istnieje zapytanie, którego
.02
uruchomienie zajmuje kilka sekund i jest uruchamiane między interwałami, nie zobaczysz go.Użyj tej opcji najlepiej, gdy chcesz szybko sprawdzać uruchomione zapytania bez konieczności konfigurowania detektora lub czegokolwiek innego.
źródło
--verbose
aby zobaczyć pełne zapytaniaUruchom to wygodne zapytanie SQL, aby zobaczyć uruchomione zapytania MySQL. Może być uruchamiany z dowolnego środowiska, które ci się podoba, kiedy tylko chcesz, bez żadnych zmian kodu ani kosztów ogólnych. Może wymagać pewnej konfiguracji uprawnień MySQL, ale dla mnie działa po prostu bez specjalnej konfiguracji.
Jedynym haczykiem jest to, że często pomijasz zapytania, które wykonują się bardzo szybko, więc jest to najbardziej przydatne w przypadku zapytań o dłuższym czasie działania lub gdy serwer MySQL zawiera zapytania, których kopie zapasowe są tworzone - z mojego doświadczenia wynika, że właśnie wtedy chcę wyświetlić „ zapytania na żywo.
Możesz także dodać warunki, aby uczynić go bardziej szczegółowym dla dowolnego zapytania SQL.
np. pokazuje wszystkie zapytania działające przez 5 sekund lub dłużej:
np. Pokaż wszystkie uruchomione aktualizacje:
Aby uzyskać szczegółowe informacje, patrz: http://dev.mysql.com/doc/refman/5.1/en/processlist-table.html
źródło
Jestem w szczególnej sytuacji, w której nie mam uprawnień do włączania logowania i nie miałbym uprawnień do przeglądania dzienników, gdyby były włączone. Nie mogłem dodać wyzwalacza, ale miałem uprawnienia do wywoływania show list procesów. Dałem z siebie wszystko i wymyśliłem:
Utwórz skrypt bash o nazwie „showsqlprocesslist”:
Uruchom skrypt:
Ogon wyjściowy:
Bingo bango. Mimo że nie jest dławiony, zajmuje tylko 2-4% procesora na urządzeniach, na których go uruchomiłem. Mam nadzieję, że to może komuś pomóc.
źródło
strace
Najszybszym sposobem na sprawdzenie zapytań MySQL / MariaDB na żywo jest użycie debuggera. W systemie Linux możesz użyć
strace
na przykład:Ponieważ istnieje wiele znaków zmiany znaczenia, możesz sformatować dane wyjściowe strace przez potokowanie (wystarczy dodać
|
między tymi dwoma liniami) powyżej do następującego polecenia:Powinieneś więc widzieć dość czyste zapytania SQL bez czasu, bez dotykania plików konfiguracyjnych.
Oczywiście nie zastąpi to standardowego sposobu włączania dzienników, który jest opisany poniżej (co wymaga ponownego ładowania serwera SQL).
dtrace
Użyj sond MySQL do przeglądania zapytań MySQL na żywo bez dotykania serwera. Przykładowy skrypt:
Zapisz powyższy skrypt w pliku (jak
watch.d
) i uruchom:Dowiedz się więcej: Rozpoczęcie pracy z DTracing MySQL
Gibbs MySQL Spyglass
Zobacz tę odpowiedź .
Kłody
Oto kroki przydatne przy projektowaniu.
Dodaj te linie do swojego
~/.my.cnf
lub globalnegomy.cnf
:Ścieżki:
/var/log/mysqld.log
lub/usr/local/var/log/mysqld.log
może również działać w zależności od uprawnień do plików.następnie ponownie uruchom MySQL / MariaDB przez (przedrostek,
sudo
jeśli to konieczne):Następnie sprawdź swoje dzienniki:
Po zakończeniu, zmiany
general_log
do0
(dzięki czemu można go używać w przyszłości), a następnie usunąć plik i restart serwera SQL ponownie:killall -HUP mysqld
.źródło
general_log
z zapytania MySQL. Zacznie zapisywać do pliku, którygeneral_log_file
wskazuje.To najłatwiejsza konfiguracja na maszynie z systemem Linux Ubuntu, z którą się zetknąłem. Szalony, widząc wszystkie zapytania na żywo.
Znajdź i otwórz plik konfiguracyjny MySQL, zwykle /etc/mysql/my.cnf na Ubuntu. Poszukaj sekcji „Logowanie i replikacja”
Po prostu odkomentuj zmienną „log”, aby włączyć rejestrowanie. Uruchom ponownie MySQL za pomocą tego polecenia:
Teraz jesteśmy gotowi, aby rozpocząć monitorowanie zapytań w miarę ich pojawiania się. Otwórz nowy terminal i uruchom to polecenie, aby przewinąć plik dziennika, w razie potrzeby dostosowując ścieżkę.
Teraz uruchom aplikację. Zobaczysz, jak zapytania bazy danych zaczynają latać w oknie terminala. (upewnij się, że masz włączone przewijanie i historię na terminalu)
Z http://www.howtogeek.com/howto/database/monitor-all-sql-queries-in-mysql/
źródło
Z wiersza poleceń można uruchomić:
Zamień wartości [x] na swoje wartości.
Lub nawet lepiej:
źródło
Sprawdź mtop .
źródło
mtop (MySQL top) monitors a MySQL server showing the queries which are taking the most amount of time to complete.
mtop.sourceforge.net Czasami jest to dość przydatne.Chciałem zrobić to samo i stworzyłem rozwiązanie z różnych postów, a także stworzyłem małą aplikację konsolową do wyświetlania tekstu zapytania na żywo, gdy jest zapisywany w pliku dziennika. Było to ważne w moim przypadku, ponieważ używam Entity Framework z MySQL i muszę mieć możliwość sprawdzenia wygenerowanego SQL.
Kroki, aby utworzyć plik dziennika (niektóre powielanie innych postów, wszystko dla uproszczenia):
Edytuj plik znajdujący się w:
Dodaj „log = development.log” na dole pliku. (Uwaga: zapisanie tego pliku wymagało ode mnie uruchomienia edytora tekstów jako administrator).
Użyj MySql workbench, aby otworzyć wiersz poleceń, wprowadź hasło.
Uruchom następujące polecenie, aby włączyć rejestrowanie ogólne, które będzie rejestrować wszystkie uruchomione zapytania:
Spowoduje to, że uruchomione zapytania zostaną zapisane w pliku tekstowym w następującej lokalizacji.
Utwórz / uruchom aplikację konsoli, która wyświetli informacje dziennika w czasie rzeczywistym:
Źródło dostępne do pobrania tutaj
Źródło:
źródło
Oprócz poprzednich odpowiedzi opisujących, jak włączyć rejestrowanie ogólne, musiałem zmodyfikować jedną dodatkową zmienną w mojej waniliowej instalacji MySql 5.6, zanim jakikolwiek SQL został zapisany w dzienniku:
Domyślne ustawienie to „BRAK”.
źródło
Gibbs MySQL Spyglass
Firma AgilData uruchomiła niedawno narzędzie Gibbs MySQL Scalability Advisor (bezpłatne narzędzie samoobsługowe), które umożliwia użytkownikom przechwytywanie strumienia zapytań na żywo, które należy przesłać do Gibbs. Spyglass (czyli Open Source) będzie obserwował interakcje między Twoimi serwerami MySQL a aplikacjami klienckimi. Nie jest wymagana ponowna konfiguracja ani restartowanie serwera bazy danych MySQL (klienta ani aplikacji).
GitHub: AgilData / gibbs-mysql-spyglass
Dowiedz się więcej: Przechwytywanie pakietów MySQL za pomocą Rust
Polecenie instalacji:
źródło