tail -f odpowiednik bazy danych rejestrowania MySQL


12

Zdecydowano, że powinniśmy przejść do korzystania z bazy danych (MySQL) dla naszych dzienników aplikacji (jest to aplikacja Java korzystająca z biblioteki logback). Mam nadzieję, że znajdę coś takiego tail -f, czego mogę używać z konkretną tabelą w tej bazie danych, która pokaże mi nowe wiersze po ich dodaniu (podobnie jak tail -fw przypadku plików dziennika).

Odpowiedzi:


5

Włącz rejestrowanie binarne MySQL. Następnie możesz użyć mysqlbinlogpolecenia, aby wyświetlić wszystkie instrukcje modyfikujące dane.


czy możesz pokazać przykład, jak to zrobić w wybranym języku lub za pomocą bash?
Alexander Mills

7

Nie sądzę, że niektórzy ludzie rozumieją pytanie (lub nie rozumiem). Nie chcesz rejestrować zapytań w bazie danych; raczej dziennik z aplikacji przechodzi do bazy danych. Gdyby to był plik, można zmodyfikować dziennik. Jak ogonić tabelę, aby po dodaniu nowego wiersza był on wyprowadzany?

Nie powinno być trudno napisać prostą pętlę, aby sobie z tym poradzić, zakładając, że masz unikalne pole, które monotonicznie zwiększa się w czasie (np. Numer sekwencyjny).

current_pos = select max(seq) from table
while true
  new_pos = select max(seq) from table
  if new_pos > current_pos
    select * from table where seq > current_pos
    current_pos = new_pos
  endif
  sleep 1
endwhile

nazywa się to odpytywaniem i nie jest to zbyt zabawne :), ale chyba dobra technika, jeśli musisz użyć odpytywania.
Alexander Mills

3

Wygląda na to, że wielu z nas nie rozumie twojego pytania. Co rozumiesz przez „rejestrowanie bazy danych” , co nie jest standardowym terminem MySQL.

Użyj dziennika ogólnych zapytań MySQL , który rejestruje każdą instrukcję otrzymaną od klienta.

Następnie możesz ustawić log_output = TABLE w pliku my.cnf. Plik zostanie zapisany w katalogu $ mysql_data_data / general_log.CSV. Możesz tail -ften plik, aby wyświetlić zapytania w czasie rzeczywistym.


2

Oto czego używam. Wydaje się najprostszym rozwiązaniem, choć nie jest bardzo wydajne:

watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"


1

Możesz to zrobić w hacky sposób, używając tail -f w pliku bazy danych (/var/lib/mysql/database_name/table_name.MY*), a następnie uruchamiając zapytanie za każdym razem, gdy czytany jest wiersz.


1

Sugeruję dodanie pola znacznika czasu do dowolnej tabeli, którą chcesz dopasować. To pozwoli ci bardzo łatwo uzyskać pożądane wyniki za pomocą prostego zapytania.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.