hainet50b

MySQL セッション管理

データベースごとのセッションを確認する

SELECT
  db       AS データベース,
  user     AS ユーザー,
  COUNT(*) AS 接続数
FROM information_schema.processlist
WHERE
  db IS NOT NULL
  AND db = 'programacho_db'
GROUP BY
  db,
  user
ORDER BY
  db,
  user;

+--------------------+--------------+-----------+
| データベース       | ユーザー     | 接続数    |
+--------------------+--------------+-----------+
| programacho_db     | root         |         1 |
+--------------------+--------------+-----------+

SHOW PROCESSLISTコマンドもあるが、柔軟なクエリを発行できない。

SHOW PROCESSLIST;

+----+-----------------+------------------+----------------+---------+-------+------------------------+------------------+
| Id | User            | Host             | db             | Command | Time  | State                  | Info             |
+----+-----------------+------------------+----------------+---------+-------+------------------------+------------------+
|  9 | root            | 172.17.0.1:41624 | programacho_db | Query   |     0 | init                   | SHOW PROCESSLIST |
+----+-----------------+------------------+----------------+---------+-------+------------------------+------------------+

特定のデータベースのセッションを強制終了させる

SELECT
  id                       AS ID,
  db                       AS データベース,
  user                     AS ユーザー,
  CONCAT('KILL ', id, ';') AS セッションキルコマンド
FROM information_schema.processlist
WHERE
  db IS NOT NULL
  AND db = 'programacho_db'
ORDER BY
  db,
  user,
  id;

+----+--------------------+--------------+-----------------------------------+
| ID | データベース       | ユーザー     | セッションキルコマンド            |
+----+--------------------+--------------+-----------------------------------+
|  8 | programacho_db     | root         | KILL 8;                           |
+----+--------------------+--------------+-----------------------------------+