2016年6月1日水曜日

MySQLにてtoo many connections のエラーが出たときの対処

稼働中アプリを動かしていたところ、システムエラーが発生しました。
エラーログを見てみると [ too many connections ] と。
MySQLのエラーということはわかったので、mysqlサーバーへコンソールログインして確認、処置を行います。

現在の接続状況を確認

> show processlist;
+------+-------+-----------------+-----------+---------+------+------+------+
| Id   | User  | Host            | db        | Command | Time | State| Info |
+------+-------+-----------------+-----------+---------+------+------+------+
| 1944 | user  | hostname : port | dbName    | Sleep   |    6 |      | NULL |
+------+-------+-----------------+-----------+---------+------+------+------|
140 rows in set (0.00 sec)

ここでいうところのrows が接続数

設定の確認

> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

現在は151

> show variables like "%wait_timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+

8時間って・・・長いし。(デフォルトでした)

一時しのぎとしてオンラインで設定変更

> set global max_connections = 300;
からの確認

> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 300   |
+-----------------+-------+

変わりました。

永続設定

/etc/my.cnfへ記載します。
[mysqld]
wait_timeout=3600
max_connections=200