与MySQL日志记录数据库等效的tail -f


12

决定我们应该转到对应用程序日志使用(MySQL)数据库(这是使用logback lib的Java应用程序)。我希望tail -f可以在数据库中的特定表中找到类似的内容,以便在添加新行时向我显示新行(类似于tail -f在日志文件上的工作方式)。

Answers:


5

打开MySQL二进制日志记录。然后,您可以使用该mysqlbinlog命令查看所有修改数据的语句。


您能否以您选择的语言或bash展示如何执行此操作的示例?
亚历山大·米尔斯

7

我认为有些人不明白这个问题(或者我不明白)。您不想将查询记录在数据库中。而是来自应用程序的日志正在进入数据库。如果是文件,则可以拖尾日志。您如何尾部表格,以便在添加新行时输出?

假设您有一个随时间单调增加的唯一字段(例如,序列号),那么编写一个简单的循环来处理该问题就不难了。

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

这被称为轮询,它并不是那么有趣:)但是,如果您必须使用轮询,我想这是一种很好的技术。
亚历山大·米尔斯


2

这是我用的。似乎是最简单的解决方案,尽管它不是很有效:

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


1

您可以通过在数据库文件(/var/lib/mysql/database_name/table_name.MY*)上使用tail -f,然后在每次读取一行时运行查询来以骇人的方式进行。


1

我建议将时间戳字段添加到要尾部的任何表中。这样,您可以通过简单的查询轻松获得所需的结果。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.