tail -f equivalente per il database di registrazione MySQL


12

È stato deciso di passare all'utilizzo di un database (MySQL) per i nostri registri delle applicazioni (si tratta di un'app Java che utilizza la lib di logback). Spero di trovare qualcosa del genere tail -fche posso usare con una tabella specifica in quel database che mi mostrerà nuove righe man mano che vengono aggiunte (simile a come ha tail -ffunzionato sui file di registro).

Risposte:


5

Attiva la registrazione binaria di MySQL. Quindi è possibile utilizzare il mysqlbinlogcomando per visualizzare tutte le istruzioni di modifica dei dati.


puoi mostrare un esempio di come farlo nella lingua che preferisci o con bash?
Alexander Mills,

7

Non credo che alcune persone capiscano la domanda (o non lo so). Non si desidera registrare le query sul DB; piuttosto un registro da un'applicazione sta andando in un DB. Se fosse un file, potresti adattare il registro. Come si adatta una tabella in modo che quando viene aggiunta una nuova riga venga emessa?

Non dovrebbe essere difficile scrivere un semplice ciclo per gestirlo, supponendo che tu abbia un campo unico che aumenta monotonicamente nel tempo (ad esempio, un numero progressivo).

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

questo si chiama polling e non è molto divertente :) ma suppongo sia una buona tecnica, se devi usare il polling.
Alexander Mills,


2

Ecco cosa uso. Sembra la soluzione più semplice, anche se non è molto efficiente:

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


1

Puoi farlo in modo confuso usando tail -f sul file di database (/var/lib/mysql/database_name/table_name.MY*) e quindi eseguendo la tua query ogni volta che viene letta una riga.


1

Suggerisco di aggiungere un campo timestamp a qualsiasi tabella che si desidera modificare. Ciò ti consentirà di ottenere i risultati desiderati molto facilmente con una semplice query.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.