mysql - 如何从 mysql-general.log 文件中 grep 与特定数据库相关的日志?

标签 mysql grep

我需要从通用查询日志文件中过滤与特定数据库相关的日志,我如何使用 grep 来实现此目的或有什么方法可以做到这一点?

最佳答案

运行查询时,常规查询日志不会记录当前数据库。该信息根本不在日志中。唯一的可能性是表是否由查询中的架构名称限定,并且您可以将其解析出来。

慢查询日志确实记录每个查询的默认数据库。并且可以设置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”时运行的查询。任何查询都可以通过使用架构名称限定表名称来访问其他数据库中的表,例如从 mydb.mytable 中选择*。但慢速日志可能仍会记录不同的默认数据库。

关于mysql - 如何从 mysql-general.log 文件中 grep 与特定数据库相关的日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690544/

相关文章:

c# - 由于异常 : "Access denied for user ' root' @'localhost' (using password: YES)",无法从 C# 应用程序访问 MySQL

php - Magento 静态 CMS block 存储在哪里?

MySQL 查询操作输出语言

mysql - 检索拍卖中每个项目的前 2 个出价

linux - Grep 在不使用管道的情况下获取文件中的字符串

linux - Unix/Linux Shell Grep 来切

mysql - 如何获取 52 周格式的 Mysql 数据?

bash - 在 BASH 的文件中找到匹配项后,如何删除上面的两行?

linux - 将 grep 传递给 bash 中的变量

linux - 如何剥离grep的输出?