Список пользователей, обращающихся к базе данных - PullRequest
5 голосов
/ 07 апреля 2011

У меня есть база данных MySQL, к которой обращается группа моих товарищей по команде.Есть ли какая-либо команда, чтобы получить информацию журнала пользователей, которые в настоящее время обращаются или которые уже получили доступ и вышли из системы?

Ответы [ 2 ]

5 голосов
/ 07 апреля 2011

Запустите следующее из инструмента mysql для просмотра всех запущенных в настоящее время процессов (включая спящие соединения):

SHOW PROCESSLIST

Или вы можете запросить таблицу information_schema, чтобы получить то же самое:

select * from information_schema.processlist

Чтобы просмотреть историю всех пользователей, вошедших в систему, вы можете настроить общий журнал запросов, чтобы перейти к таблице, добавив следующий параметр запуска в ваш запуск mysqld "--log-output = TABLE --general-logmsgstr ", то вы можете запросить эту информацию из таблицы general_log в схеме mysql.Ниже приведен запрос, который вы можете использовать:

select * from mysql.general_log where command_type = 'Connect';

Предупреждение, эта таблица может стать огромной.Вы хотите периодически очищать его.

1 голос
/ 07 апреля 2011

Пользователи, которые в настоящее время поддерживают соединение с базой данных, могут получить доступ к SHOW PROCESSLIST или INFORMATION_SCHEMA.PROCESSLIST.

Историческая запись этих данных не должна быть.Использование общего журнала запросов для этого, как предложено в другом месте, не является хорошей идеей, поскольку он вообще не масштабируется: общий журнал запросов регистрирует каждое отдельное утверждение, которое видит ваш сервер, и его запись значительно увеличивает конфликт на LOCK_log и на диск I /О.Если ваш общий журнал запросов представляет собой таблицу CSV, он не может быть эффективно запрошен, и если это таблица MyISAM, он по существу будет сериализовать все запросы (даже запросы на чтение!) В вашей базе данных.

Это потому, чтокаждый запрос нужно будет регистрировать, даже читать запросы.Для этого необходима запись в общий журнал запросов.Для этого запрашивается блокировка таблицы в таблице журнала MyISAM.Это очень медленно и вообще не рекомендуется даже на серверах с низкой нагрузкой.

Другие форматы для общего журнала запросов не поддерживаются.

Существует набор переменных, которые могут определять действия надзапуск сервера, подключение подчиненного и подключение пользователя.

root@localhost [kris]> show global variables like 'init%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| init_connect  |       |
| init_file     |       |
| init_slave    |       |
+---------------+-------+
3 rows in set (0.00 sec)

Установив init_connect для оператора вставки, в котором регистрируется текущий пользователь, текущее время и идентификатор подключения, вы можете сгенерировать нужный журнал в более масштабируемом виде.Для этого используйте таблицу InnoDB с идентификатором auto_increment.

Обратите внимание, что init_connect не обрабатывается при входе в систему пользователя root (SUPER_PRIV) по соображениям безопасности.Это ускользнет от вашей регистрации.

В MySQL 5.5 API-интерфейс аудита был добавлен на сервер.Я считаю, что вы действительно хотите плагин аудита.Подробнее см. http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...