2013-12-04 12 views
2

Я хочу определить, когда произошло событие в общем журнале запросов MySQL (v5.1.71). В качестве примера, на OS сервер CLI (Unix), я побежал простой Grep вытащить данные из файла журнала:MySQL Общий журнал отсутствует Временные метки

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) 

Я просмотрел весь журнал для других типов информации, которые я бы вытащил, и заметил, что в записи также отсутствовали временные метки. Кажется, MySQL только предшествует записи журнала с YYMMDD HH: MI: SS, когда значение SS изменилось с момента последней записи в журнале. В приведенном выше примере у меня не было бы способа определить DATE/TIME записи журнала user1, так как у меня будет только милли/nano/секунда.

Я в настоящее время работает MySQL со следующими параметрами: --user = MySQL --general_log --ssl-са =/path_to_file1 --ssl-серт =/path_to_file2 --ssl ключ =/path_to_file3

Итак, как заставить MySQL поставить временную метку на каждую строку?

SK

ответ

2

Вы должны использовать 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'; 

Теперь вы можете запросить таблицу вместо файла оглавлению:

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

Это действительно отличное решение, и я благодарю вас за ответ. Однако я должен был добавить, что из-за наших политик организации здесь я должен использовать что-то из MySQL, а не для дополнительного стороннего инструмента. – scryptKiddy

+0

Мне интересно, будет ли это предложение менять журнал, чтобы перейти к таблице: [link] http://stackoverflow.com/questions/303994/log-all-queries-in-mysql?rq=1 [/ link] Кажется, у вас есть метка времени, но я не уверен, что она введет значение в столбец для каждой записи в журнале или нет. Мысли? – scryptKiddy

+1

Да, это должно сработать. Я уточню свой ответ. –

Смежные вопросы