tail -f 相当于 MySQL 日志数据库

tail -f 相当于 MySQL 日志数据库

我们决定将应用程序日志转为使用 (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 秒更新一次输出。

相关内容