MySQL General Log缺少时间戳

时间:2013-12-04 20:48:24

标签: mysql logging

我想确定MySQL的通用查询日志中发生事件的时间(v5.1.71)。 例如,在服务器OS CLI(Unix)上,我运行了一个简单的grep来从日志文件中提取数据:

grep“拒绝访问”/data/mysql/my_servername.log

            1249390 Connect Access denied for user 'user1'@'user.1.ip.add' (using password: YES)
131204 17:51:00 1254417 Connect Access denied for user 'user2'@'user.2.ip.add' (using password: NO)

我查看了整个日志,了解了我要提取的其他类型的信息,并注意到条目也缺少时间戳。当SS值自上次日志条目以来发生更改时,MySQL似乎仅在日志条目之前使用YYMMDD HH:MI:SS。在上面的例子中,我无法确定user1的日志条目的日期/时间,因为我只有毫秒/毫秒/秒。

我目前正在使用以下选项运行mysql: --user = mysql --general_log --ssl-ca = / path_to_file1 --ssl-cert = / path_to_file2 --ssl-key = / path_to_file3

那么如何让MySQL在每一行都加上时间戳呢?

SK

1 个答案:

答案 0 :(得分:3)

您应该使用pt-query-digest

从这样的事情开始:

pt-query-digest \
--type genlog \
--print \
--no-report \
--filter '$event->{arg} && $event->{arg} =~ /Access denied/' \
/data/mysql/my_servername.log

或者,您可以将日志格式从FILE切换为TABLE(也可以在my.cnf文件中执行此操作,以便在重新启动后仍然存在),并且每个行中都会显示时间戳。表:

set global log_output='TABLE';

现在您可以查询表而不是grepping文件:

select * from mysql.general_log where argument like 'Access denied%';