[PHP] CodeIgniterでalready has more than ‘max_user_connections’ active connectionsエラーの対応

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サーバーですが、実運用を考えるといろいろ手間がかかりそうです。