モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

MySQLの接続最大数に達した時にどのクエリの問題か確認する

MySQLで障害時にprocesslistを表示したいが、接続クライアント数最大に達していて入れず、セッション消費してるはずのアプリ側デーモン止めてもクライアント数減らないような場合があると思います。

このような場合に、Javaのスレッドダンプ的に外から状況を吐かせたい、と思うことってありますよね。


んでそんなことをtwitterで嘆いていたら、とみたさんから

のように教えていただきました。


なんと、なにもしなくてもMySQLrootアカウントなら1接続だけ入れるとのこと!


MySQL :: MySQL 5.6 リファレンスマニュアル :: B.5.2.7 接続が多すぎます

mysqld は実際には max_connections+1 クライアントの接続を許可します。余分な接続は、SUPER 権限を持つアカウントが使用するために予約されています。SUPER 権限を管理者に付与して、通常のユーザー (その権限の必要のないユーザー) に付与しないことによって、権限のないクライアントが最大数接続されていても、管理者はサーバーに接続して SHOW PROCESSLIST を使用し、問題を診断することができます。


まさにやりたかったことをやるために用意されている心づかいでした。


ちなみにflatさんからPostgreSQLにも同様の仕組みがあることを教えていただきました。

接続と認証

superuser_reserved_connections

PostgreSQLのスーパユーザによる接続のために予約されている接続


次、同じ障害出たらこれで processlist 取れるぞ!