As vezes se faz extremamente necessário saber quem esta acessando nossa base de dados naquele momento. O MySQL apesar de ter ferramentas gráficas até bem maduras, diferente do postgreSQL(na minha opnião). Você terá sempre a possibilidade de usar tudo via terminal.
Apesar de conseguir fazer isso facilmente através do comando “SHOW PROCESSLIST”, quando possuo muitos processos fica um tanto difícil de conseguir verificar todos os usuários. A saída do “SHOW PROCESSLIST” seria a abaixo descreita no meu PC que não esta sendo acessado por ninguém além de mim:mysql> SHOW PROCESSLIST;
+----+------+-----------+-------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+-------+---------+------+-------+------------------+
| 51 | root | localhost | teste | Query | 0 | NULL | SHOW PROCESSLIST |
+----+------+-----------+-------+---------+------+-------+------------------+
1 row in set (0.00 sec)
Podemos modificar para termos uma saída mais ou menos assim:+-----------------+-----------------+----------+
| host_short | users | count(*) |
+-----------------+-----------------+----------+
| slave1 | repl | 1 |
| slave2 | repl | 1 |
| localhost | event_scheduler | 1 |
| 111.111.222.111 | root, foo | 2 |
| 111.111.222.222 | appuser, bar | 3 |
| 111.111.222.333 | appuser, moshe | 9 |
+-----------------+-----------------+----------+
E para isso eu só preciso fazer uma simples query como esta descrita abaixo:SELECT LEFT(host, IF(LOCATE(':', host), LOCATE(':', host), LENGTH(host) + 1) - 1
) AS
host_short,GROUP_CONCAT(DISTINCT USER) AS users,COUNT(*)
FROM information_schema.processlist
GROUP BY host_short
ORDER BY COUNT(*),host_short;
Essa saída mostrará de forma mais simples os usuários que encontram-se conectados ao seu banco.
fonte: sholimoid