我们决定转移到使用(MySQL)数据库作为我们的应用程序日志(这是一个使用logback lib的Java应用程序)。 我希望能find像tail -f这样的东西,我可以使用该数据库中的特定表格,这些表格会在添加新行时向我显示新行(类似于tail -f在日志文件上的工作方式)。
打开MySQL二进制日志logging。 然后您可以使用mysqlbinlog命令查看所有数据修改语句。
我不认为有人理解这个问题(或者我不)。 您不想logging针对数据库的查询; 而是来自应用程序的日志正在进入数据库。 如果它是一个文件,你可以尾巴的日志。 你如何尾巴表,这样,当一个新的行被添加它是输出?
假设你有一个随时间单调递增的唯一字段(例如,一个序列号),编写一个简单的循环来处理这个问题不是很难。
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
看来,我们很多人都不太理解你的问题。 “日志数据库”是什么意思,这不是一个标准的MySQL术语。
使用MySQL General Query Log ,logging从客户端收到的每条语句。
然后,您可以在my.cnf中设置log_output = TABLE 。 该文件将被写入$ mysql_data_directory / general_log.CSV。 你可以tail -f这个文件实时查看查询。
这是我使用的。 似乎最简单的解决scheme,虽然它不是非常有效的:
watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"
你可以通过在数据库文件(/var/lib/mysql/database_name/table_name.MY*)上使用tail -f来做到这一点,然后在每次读取一行时运行查询。
我build议添加一个时间戳字段到任何你想要尾巴的表。 这将使您可以通过简单的查询轻松获得所需的结果。
你可能想要这样做:
http://www.jetprofiler.com/blog/10/tail–f-table-with-myterm/#comments
它已经很老了,3年没有碰过 – 但是我只是试了一下,结果还行。 克隆BZR回购并阅读自述文件。