我需要从一般查询日志文件中过滤与特定数据库相关的日志,如何使用grep进行此操作或有没有办法执行此操作?
答案 0 :(得分:0)
运行查询时,常规查询日志不会记录当前数据库。信息根本不在日志中。唯一的可能性是,如果表在查询中由模式名称限定,您可以解析它。
慢查询日志 记录每个查询的默认数据库。您可以set global long_query_time=0
为所有查询创建慢查询日志记录信息,就像一般日志一样。
要过滤掉特定当前数据库的日志条目,我使用pt-query-digest,它是免费的,是Percona Toolkit的一部分。
例如,这是一个读取慢查询日志的命令,过滤当前数据库所在的条目" test"并以新的慢查询日志的格式输出。
pt-query-digest --filter '$event->{db} eq "test"' mysql-slow.log --no-report --output slowlog
但是,您应该知道,这只能过滤默认数据库为" test"时运行的查询。任何查询都可以通过使用模式名称限定表名来访问其他数据库中的表,例如SELECT * FROM mydb.mytable
。但是慢速日志可能仍会记录不同的默认数据库。