tail -f equivalente para banco de dados de log do MySQL

11

Foi decidido que deveríamos passar a usar um banco de dados (MySQL) para nossos logs de aplicativo (é um aplicativo Java usando o logback lib). Espero encontrar algo como tail -f que eu possa usar com uma tabela específica no banco de dados que mostrará novas linhas à medida que forem adicionadas (semelhante a como tail -f trabalhou nos arquivos de log).

    
por Nick Spacek 22.09.2010 / 21:37

7 respostas

5

Ative o registro binário do MySQL. Em seguida, você pode usar o comando mysqlbinlog para ver todas as instruções de modificação de dados.

    
por 23.09.2010 / 00:08
7

Eu não acho que algumas pessoas entendem a pergunta (ou não). Você não quer registrar as consultas no banco de dados; em vez disso, um log de um aplicativo está entrando em um banco de dados. Se fosse um arquivo, você poderia seguir o log. Como você segue uma tabela para que quando uma nova linha seja adicionada, ela seja produzida?

Não deve ser difícil escrever um loop simples para lidar com isso, supondo que você tenha um campo exclusivo que aumenta monotonicamente ao longo do tempo (por exemplo, um número de sequência).

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
    
por 23.09.2010 / 00:05
3

Parece que muitos de nós não entendem muito bem sua pergunta. O que você quer dizer com "banco de dados de registro" , que não é um termo padrão do MySQL.

Use o Registro geral de consultas do MySQL, que registra cada declaração recebida de um cliente.

Você pode definir log_output = TABLE no seu my.cnf. O arquivo será gravado em $ mysql_data_directory / general_log.CSV. Você pode tail -f este arquivo para ver as consultas em tempo real.

    
por 22.09.2010 / 22:34
2

Aqui está o que eu uso. Parece a solução mais simples, embora não seja muito eficiente:

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

    
por 29.10.2015 / 23:27
1

Você pode fazer isso de maneira hacker usando tail -f no arquivo de banco de dados (/var/lib/mysql/database_name/table_name.MY*) e, em seguida, executando sua consulta toda vez que uma linha é lida.

    
por 22.09.2010 / 21:41
1

Sugiro adicionar um campo de carimbo de data / hora a qualquer tabela que você queira acompanhar. Isso permitirá que você obtenha os resultados desejados com muita facilidade com uma simples consulta.

    
por 23.09.2010 / 00:37
1

Você pode gostar disso:

link

É velho e não foi tocado por 3 anos - mas eu apenas tentei e funciona bem. Clone o repositório BZR e leia o README.

    
por 22.11.2012 / 03:39

Tags