2011-01-13 2 views
2

Возможно ли зарегистрировать все выполненные запросы? Я рассматриваю базу данных, к которой обращаются многие различные приложения. Один из них изменяет значение таблицы таким образом, каким он не должен. Я пытаюсь выяснить, какое приложение является виновником. Это поможет мне много, если я смогу захватить все запросы, которые выполняются на этой таблице и в какое время.Как я могу регистрировать запросы MySQL?

Большое спасибо за вашу помощь.

+0

, что это лучшее место, чтобы поставить my.cnf и как я говорю MAMP, где этот файл? так что это сработает. beckause независимо от того, что я ничего не делаю, регистрируется. Я использую mac с MAMP, как wamp на окнах. –

ответ

0

Насколько я знаю, в настоящее время в MySQL нет возможностей аудита. Регистрировать запросы из приложений, которые их генерируют, или перехватывать соединения с сервером.

+0

Пожалуйста, оставьте комментарий с вашим нисходящим потоком. Что не так с моим ответом? Благодарю. –

+0

@Sarmen: Пожалуйста, направляйте нас в документацию для этой функции. Если он существует, я с радостью удалю/отредактирую ответ. В противном случае, пожалуйста, удалите ваш downvote. В любом случае, downvotes лучше всего сопровождать _explanations_. Благодарю. –

+0

[Общий журнал запросов] (http://dev.mysql.com/doc/refman/5.1/en/query-log.html), который по какой-либо причине я не заметил восемь месяцев назад, может быть уместным здесь. –

0

в вашей .ini конфигурации добавьте эту строку

log=allqueries.log 

вам нужно будет перезапустить MySQL

+0

, какой файл ini вы имеете в виду? –

0

Возможное решение вашей проблемы является использование триггера обновления на столе вопроса. Триггер будет запущен при любом обновлении в таблице, и можно написать триггер таким образом, что когда он удовлетворяет определенным критериям (значение, о котором идет речь, изменяется), выполняется действие (возможно, запись во временную таблицу, инструкцию SQL что делает изменение). Для получения дополнительной информации, я предлагаю посмотреть на Trigger Syntax.

0

You can use the general log in MySQL to achieve this. Я рекомендую вам это делать только в тестовой/информационной базе данных без множества одновременных пользователей, так как объем генерируемого результата огромный. Однако я не уверен, что он регистрирует временную метку.

Если это не так, то при установке unix/linux я бы написал простой скрипт, который считывал строки из stdin и печатал строки с текущей меткой времени, когда они были прочитаны, и pipe tail -f on файл журнала, чтобы вы могли добавить свои собственные отметки времени.

1

Либо использовать переключатель --log[=file_name] командной строки на туздЫ или изменить/создать my.cnf содержащий:

[mysqld] 
log=/tmp/mysql.log 

полностью Разъяснения в this article.

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