プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
MySQL、「too many connections」エラーを解消する
結論から書くと

・最大同時接続数を増やす
・1回の接続を短くする


で改善できます。
具体的には「/etc/my.cnf」の中に

[MySQLd]
max_connections = 200
wait_timeout = 60

のように

max_connections:最大同時接続数
wait_timeout:接続タイムアウト秒


の2つを記述して

service mysqld restart

でMySQLを再起動します。
「max_connections」は現在の値よりも大きい値を、
「wait_timeout」の値は、現在の値よりも小さい値を指定してくださいね。

それでは、詳細を書いていきます。

宣伝ですが、私は

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

というWebサイトを運営していてですね。
最近アクセス数が増えてきたためか、たまに

too many connections うんちゃらかんちゃら

とかいうエラーメッセージが出力されて、コケるようになりました。
嬉しい悲鳴と言えなくもないですが、改善しないとヤバいよね?(--ゞというのが今回のきっかけです。

Google先生、教えてけろ(-人-)

ふむふむ(--)

MySQLのコネクションの

・最大同時接続数を増やす
・1回の接続を短くする


の対処を行えば改善できるっぽいと分かりました。

なるほどね。

エラーの内容が「コネクションが多すぎるよ!」だから
許容するコネクションの数を増やすか、
コネクションの数を減らせば解消できるわけですね。

最大同時接続数を増やせば「多すぎるよ!」と判断する基準が変わります。
例えば、今まで100人でギブアップしていたのが200人まで耐えるようになるわけです。

また、1回の接続時間を短くすれば、コネクションを掴んでいる時間が減ります。
それによって時間当たりの同時接続数が減るだろうな理屈です。

それでは、やってみましょう。

まずは、現在の最大同時接続数と接続タイムアウト秒を確認します。
MySQLに接続して、以下のクエリを実行します。

■max_connections(最大同時接続数)の確認
show global variables like 'max_connections';

■wait_timeout(接続タイムアウト秒)の確認
show global variables like 'wait_timeout';

私の環境では、以下の結果が表示されました。

■max_connections(最大同時接続数)の確認
Variable_nameValue
max_connections151


■wait_timeout(接続タイムアウト秒)の確認
Variable_nameValue
wait_timeout28800


最大同時接続数が「151」で接続タイムアウト秒が「28800秒(8時間)」ですね。

ちなみに、実際に今までにあった同時接続数の最大は

show global status like 'max_used_connections';

で取得できます。
私の環境では、以下の結果が表示されました。

Variable_nameValue
Max_used_connections152


ふむ(--)
許容している最大接続数が151なのに対して、152(以上)の接続が来ています。
そりゃー、エラーになりますわな(^^ゞ

ということで、現状が把握できたので

max_connections(最大同時接続数):300
wait_timeout(接続タイムアウト秒):60秒(1分)

に変更することにしました。
最大同時接続数は、もっと増やせそうですが、
取りあえず倍あれば当分は大丈夫でしょ。

「/etc/my.cnf」の中に

[MySQLd]
max_connections = 300
wait_timeout = 60

を記述して、保存して、SSHとかでサーバに接続して

service mysqld restart

でMySQLを再起動して完了でっす\(--)/

「/etc/my.cnf」を書き換えないで
MySQLのコンソール上から変更するやり方もあるようですけどね。
例えば

set global max_connections=300;

とかのクエリを実行しても、変更できるみたいです。
私は試してないけど。

これで「too many connections」エラーが解消!……したかどうかは実は分からないですけどね。
取りあえず様子見の段階ですが、今のところエラーには、なっていません。
多分、解消したのだと思います。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● MySQL  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事