我们决定将应用程序日志转为使用 (MySQL) 数据库(这是一个使用 logback 库的 Java 应用程序)。我希望找到类似的东西,tail -f
可以与该数据库中的特定表一起使用,该表将在添加新行时显示新行(类似于tail -f
日志文件的工作方式)。
答案1
打开 MySQL 二进制日志。然后您可以使用该mysqlbinlog
命令查看所有数据修改语句。
答案2
我认为有些人不明白这个问题(或者我不理解)。您不想记录针对数据库的查询;相反,应用程序的日志会进入数据库。如果它是一个文件,您可以跟踪日志。如何跟踪表,以便在添加新行时将其输出?
假设您有一个随时间单调增加的唯一字段(例如,序列号),那么编写一个简单的循环来处理这个问题应该不难。
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
答案3
看来我们很多人都不太明白你的问题。你所说的“日志数据库”,这不是标准的 MySQL 术语。
使用 MySQL通用查询日志,记录从客户端收到的每个语句。
然后您可以设置log_output = 表在您的 my.cnf 中。该文件将写入 $mysql_data_directory/general_log.CSV 。您可以通过tail -f
此文件实时查看查询。
答案4
如果你在 MySQL 中启用了二进制日志记录,则可以使用此方法https://coderwall.com/p/0tmhla/tailing-mysql-binary-log尾部查询:
export D=$(date +"%Y-%m-%d %H:%M:%S" --date="30 minutes ago"); watch "mysqlbinlog --start-datetime=\"$D\" /var/log/mysql/mysql-bin.000001|tail"
它将监视二进制日志并每 2 秒更新一次输出。