从 mysqlbinlog 中 grepping 时显示文件名

从 mysqlbinlog 中 grepping 时显示文件名

我试图找出我们的数据库上执行某些查询的时间。为此,我开始在 MySql 二进制日志中查找,使用mysqlbinlog

find -name "binlog.000056*" -exec mysqlbinlog {} \; | grep -i "update .* my_special_column=value"

问题是,通过这种方式,我无法找出它在哪个文件中找到结果,因为 grep 从其输入(通过管道)获取输入,而不是从直接文件中获取输入。

我考虑使用tee,但没有成功。

所以问题是:如何使用find -exec mysqlbinlog...grep,显示 grep 找到结果的文件名?

答案1

每个 SQL 命令上方都有注释和时间戳。

当你运行 grep 时,使用 -A、-B 或 -C 选项

其作用如下

  • -A在找到模式后向您显示几行
  • -B在找到模式之前显示几行
  • -C显示找到模式前后的行数

例如,像这样运行 grep 以包含匹配模式上方的 2 行

find -name "binlog.000056*" -exec mysqlbinlog {} \; | grep -i -B 2 "update .* my_special_column=value"

如果您想要遍历名称并查看文件名,请执行以下操作

for X in `ls binlog.000056*` ; do echo ${X} ; mysqlbinlog ${X} | grep -i -B 2 "update .* my_special_column=value" ; done

试一试 !!!

答案2

您需要在 exec 中运行多个命令。请查看这个问题以及不同的答案。

相关内容