[PHP] CodeIgniterでalready has more than 'max_user_connections' active connectionsエラーの対応
CodeIgniterの接続先DBサーバーをConoHaのDBサーバーにしたところ、下記のmax_user_connectionsが出たので、対策を調べてみました。
更新日: 2018.7.17公開日: 2017.9.4
CodeIgniterの接続先DBサーバーをConoHaのDBサーバーにしたところ、下記のmax_user_connectionsが出たので、対策を調べてみました。
エラーの詳細と原因
MYSQLエラー「max_user_connections」は、1ユーザーあたりの同時接続数を制限するものです。
mysqli::real_connect(): (HY000/1203): User xxxx already has more than 'max_user_connections' active connections
自分でインストールしたMYSQLではエラーが起こっていなかったのになぜエラーが起きたのだろうと思ったら、ConoHaのDBサーバーはmax_user_connectionsが30に設定されているので、そこに引っかかった模様。
CodeIgniterはDB接続を明示的にクローズしないでも、勝手に閉じてくれると公式に書いてあったので、今までクローズしないで使ってきたんですが、ConoHaのDBサーバーで使うなら都度閉じる必要がありそうです。
手動切断
CodeIgniter はデータベースの切断を賢く行なってくれますが、 明示的に接続を閉じることもできます。
codeigniter.jp
エラーの対策
対策はちょっと厨二っぽいSEのブログさんの記事に記載の通りです。
$db[‘default’][‘connect’] = FALSE;
$db[‘default’][‘autoinit’] = FALSE;
上記の記事にもあるように、毎度接続するコストがかかるのでPHPの処理的には少し遅くるかもしれません。
ただし、ConoHaのDBサーバーでは、max_user_connectionsを自分で設定することはできないので、ConoHaのDBサーバーで利用する場合はこの点を気をつける必要があります。
今回のエラーは、どちらかというとCodeIgniter側というよりDBサーバー側の問題でした。
格安で比較的速度も速いConoHaのDBサーバーですが、実運用を考えるといろいろ手間がかかりそうです。