ユーザーごとのアクティブなMySQL接続を表示する


9

特定のユーザーに対して、特定のデータベースへのアクティブな接続数または開いている接続数を取得するクエリが必要です。私は何時間も探していましたが、今のところ何も思いつきませんでした。私は近いので、ここで私が試したことがあります。

  1. SHOW STATUS WHERE `variable_name` = 'Threads_connected';

  2. SHOW STATUS LIKE '%onn%';

  3. SELECT * FROM information_schema.processlist WHERE USER='database_user';

私はWebホスティング会社で働いており、クライアントの1つが彼のmax_user_connections限界に達し続けているため、ユーザーが共有サーバーではないため、ユーザーが現在使用している接続の数を知る必要がある理由をトラブルシューティングします。現在、MySQL(InnoDB)バージョン5.5.36を使用しています。どんな助けでも大歓迎です!

回答:


11

必要なのは、ユーザーとホスト名別の内訳と合計

SELECT IFNULL(usr,'All Users') user,IFNULL(hst,'All Hosts') host,COUNT(1) Connections
FROM
(
    SELECT user usr,LEFT(host,LOCATE(':',host) - 1) hst
    FROM information_schema.processlist
    WHERE user NOT IN ('system user','root')
) A GROUP BY usr,hst WITH ROLLUP;

これは、ホスト名とポート番号をコロンで区切ったホストアドレスを処理します

誰もがrootとしてログインしていないことを願っています


-1

これについての詳細な議論がありました:https : //dba.stackexchange.com/a/47160/385

要するに、必要なクエリは

SELECT max_user_connections FROM mysql.user WHERE user='db_user' AND host='localhost';

そして

SHOW VARIABLES LIKE 'max_user_connections';

更新

多分これはあなたの質問への直接の回答ではありませんが、http: //dev.mysql.com/doc/refman/5.5/en/user-resources.htmlによれば、MySQLでは1時間あたりのアクセス数を制限できます。したがって、プロセスリストによると、特定のユーザーが接続の数が少ないのに、特定のユーザーが制限に達した理由はそれで解決するかもしれません。残念ながら、アクセスカウンターの取得方法に関するリファレンスは見つかりません。


max_user_connectionsの数を変更したり、max_user_connectionsを表示したりしたくないので、その方法を知っています。特定のユーザーがアクティブにしている接続の数を表示したいと思います。
ウィルヒューズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.