Как вести журнал подключений пользователей к MySQL
Это перевод статьи: How to Log User Connections in MySQL
В MySQL 5.1 нет встроенных средств для ведения журнала подключений пользователей, но сочетание нескольких команд MySQL позволяет вести журнал подключений пользователей без необходимости включать общий журнал запросов. Я повторяю: вам не нужно включать общий журнал запросов для того, чтобы сделать это!
Вы бы хотели узнать, как это сделать?
С помощью статьи Бэрона Шварца (Baron Schwartz) по ссылке http://www.xaprb.com/blog/2006/07/23/how-to-track-what-owns-a-mysql-connection/ мне удалось найти подходящий способ. Однако, я захотел сделать это немного проще, потому что мне нужно было отслеживать подключения к MySQL. Возможно впоследствии я собираюсь дополнить этот способ, но пока что сохраню его простым.
Ингридиенты:
init-connect
NOW()
CURRENT_USER()
CONNECTION_ID()
Хотите увидеть, как их объединить?
Итак, вот рецепт...
Подразумевается, что информация будет сохраняться в базу данных admin.
Создадим таблицу для сохранения информации о подключениях.
CREATE TABLE admin.connections ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, connect_time DATETIME NOT NULL, user_host VARCHAR(50) NOT NULL, connection_id INT UNSIGNED NOT NULL );
Настроим значение переменной
init-connect
. Это запрос или команда, которая будет выполняться при каждом подключении клиента. Подробности здесь.SET GLOBAL init_connect = "INSERT INTO admin.connections (connect_time, user, connection_id) VALUES (NOW(), CURRENT_USER(), CONNECTION_ID());";
Убедитесь, что у всех пользователей есть права для вставки записей в таблицу
admin.connections
.При входе пользователя без глобальных прав в таблицу
admin.connections
должна вставиться строка. Отметим, что системная переменнаяinit-connect
не влияет на пользователей с глобальными правами. Все администраторы баз данных более-менее понимают, о чём речь.Наблюдайте, как растёт и расцветает таблица подключений. Вы только что начали новый хобби-проект.