Вопрос: Существует ли запрос, который вернет всех пользователей, которые в данный момент вошли в MariaDB?
Ответ: В MariaDB есть системная таблица с именем information_schema.processlist, которая показывает потоки, которые в данный момент выполняются. Вы можете выполнить запрос к этой системной таблице, который возвращает всех пользователей, у которых в данный момент есть соединение, работающее в базе данных MariaDB.
Чтобы получить всех пользователей, вошедших в MariaDB, вы можете выполнить следующий SQL запрос:
1 2 3 4 5 6 |
SELECT SUBSTRING_INDEX(HOST, ':', 1) AS HOST_short, GROUP_CONCAT(DISTINCT USER) AS USERs, COUNT(*) AS threads FROM information_schema.processlist GROUP BY HOST_short ORDER BY COUNT(*), HOST_short; |
Этот оператор SELECT возвращает хост, пользователя и количество потоков для этой комбинации хост/пользователь.
СОВЕТ. У вас должны быть привилегии PROCESS, чтобы просматривать потоки, принадлежащие другим пользователям. В противном случае вы увидите только свои потоки.
Таблица information_schema.processlist содержит следующие столбцы:
Столбец | Пояснение |
---|---|
ID | Уникальный идентификатор |
USER | Имя пользователя (то есть: root, trizor и т.д.) |
HOST | хост для пользователя |
DB | База данных, в которой запущен поток |
COMMAND | Команда, которая выполняется (например: Query, Sleep и т.д.). |
TIME | Количество секунд, в течение которых работал поток (т.е. 301, 325). |
STATE | Состояние потока (т.е. выполняется) |
INFO | Отображает информацию о потоке. (то есть: если COMMAND = 'Query' и STATE = 'executing', будет отображаться SQL, который запускает пользователь) |
TIME_MS | Количество миллисекунд, в течение которых выполнялся поток (то есть: 301471.887, 325595.370) |
STAGE | Этап, на котором находится поток |
MAX_STAGE | Максимальное количество этапов |
PROGRESS | Прогресс текущего этапа (то есть: 10%, 95% и т.д.) |
MEMORY_USED | Объем памяти, используемой потоком (то есть: 50200, 82920 и т.д.) |
EXAMINED_ROWS | Количество строк, проверенных потоком |
QUERY_ID | ID запроса |