我试图找出我们的数据库上执行某些查询的时间。为此,我开始在 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 中运行多个命令。请查看这个问题以及不同的答案。