BLOG

2014年9月3日/ AWS, max_connections, MYSQL

MySQLでtoo many connectionsエラーが発生した際の対処方法

こんにちは。エンジニアの宮本です。

先日アプリ開発をしていると「too many connections」というエラーが発生し、MySQLにアクセスできなくなりました。

 

「too many connections」、つまり接続数が多いという理由のため、MySQLの設定を変更し接続数(max_connections)を増やす、1回の接続時間(wait_timeout)を短くするなどの対策をとれば解決します。

その方法は、SSHでサーバへログインし「/etc/my.cnf」を編集することによって可能です。

 

しかし、クランチタイマーではアプリ開発・運用環境としてAWS(Amazon Web Service)を使っており、データベースサーバーはRDSを使用しているため、ターミナルを使用してSSHで直接ログインし、「/etc/my.cnf」を直接編集することができませんでした。

どうすればよいかと調べていると、RDSのウェブコンソールより「Parameter Groups」を変更することによりMySQLの設定が変更できることが分かりました。

 

参考記事:Amazon RDS の MySQL で UTF-8 のデータベースを作る : まだプログラマーですが何か?

 

本日はMySQLでtoo many connectionsエラーが発生した際の通常の対処方法、及びAWSのRDS利用の場合の対処方法についてご紹介したいと思います。

 

目次

  • too many connectionsが出たらmax_connections、wait_timeoutを確認してみよう
  • AWSのRDSでmax_connections、wait_timeoutを変更する
  • 最後に

too many connectionsが出たらmax_connections、wait_timeoutを確認してみよう

「too many connections」はMySQLへの接続数が多いというエラーです。そういう時には「max_connections」「wait_timeout」というMySQLの設定を確認してみましょう。

 

「max_connections」・・・MySQLへの最大同時接続数する。
「wait_timeout」・・・MySQLへの最後のアクションから何秒過ぎればMySQLへの接続を切るかを設定する。

 

つまり今、「max_connections」を増やして一度に接続できる数を増やしてあげるか、「wait_timeout」を減らし、接続してアクションしていない人の接続を早く切るようにしてあげることで今回のエラーは解消します。

現在のそれぞれの数値を確認する方法はターミナル等を立ち上げ、SSHでサーバーへログイン後にMySQLへ接続し、それぞれ以下コマンドで確認できます。

 

「wait_timeout」の確認は、

 

「max_connections」の確認は、

 

これらを変更するには、サーバー内の/etc/my.cnfを編集すればよいです。

 

これでそれぞれの設定変更が完了しました。もう一度上記記載のコマンドでそれぞれの数値を確認してみてください。

しかしAWSのRDSを利用している場合はそれができません。RDSの場合で「max_connections」などを変更する方法を次に記載します。

AWSのRDSでmax_connections、wait_timeoutを変更する

冒頭にも記載した通り、AWSのRDSのMySQLの設定変更は、/etc/my.cnfを直接編集するのではなく、RDSのウェブコンソールより「Parameter Groups」を変更することで可能です。

rds_1

まずはAWSにサインアップし、RDWのウェブコンソールを開き、メニューの中からParameter Groupsをクリックし、新しいParameter Groupを作成します。

 

rds_2

Parameter Group一覧から先ほど作ったGroupの横にある虫メガネボタンをクリックします。

 

rds_3

Filterのテキストボックスに、変更したいパラメータの名前を入力します。今回は「wait_timeout」を変更します。もともと前述の通り「28800秒(8時間)」でしたが、「100秒」にしたいと思います。変更したいパラメータが表示されたら、「Edit Parameters」ボタンをクリックします。

 

rds_4

変更したいパラメータの値を設定し、「Save Changes」ボタンをクリックします。

 

rds_5

最後に変更したいInstanceを開き、Parameter Groupを作ったGroupに変更することにより、RDSのMySQLの「max_connections」「wait_timeout」などの設定を変更することが可能となります。

最後に

いかがでしたでしょうか。AWSは特殊な環境のため今まで通りのやり方ではうまくいかないこと多いですよね。

それに管理画面も英語。私のような英語があまり得意でない方にとってはいちいち大変です。

しかし今後ますますAWSを使うケースは増えてくると思います。少しずつでも勉強していきましょう。

Resent Posts

Category