どurakuの作ったもの、作ろうとしているもの、作ろうとしていたものの近況。メニューコンテンツへ移動TopAboutSoftwareTwitter(外部)Pixiv(外部)CodeigniterのDB接続不可をハンドリングして再接続する目的CodeigniterのDB接続不可時に処理をエラーにせずなんとか再接続したい。前提・用途DBに繋がらないからといってクラッシュされては困るようなクリティカルな処理が有る。RDSのマルチAZ等のように、冗長化されてはいるが数秒~2分程度のダウンタイムは発生するような構成であり、それに耐えたい。APIを提供しているなど、瞬間的に大量のアクセスが発生しDBのmax_connectionを使い切るような状況が起こり得る。普段のアクセスは少ない。Codeigniter標準のDBフェイルオーバー機能が使えるほど冗長化された構成ではない(=フェイルオーバー用のDBが無い)。この記事はMySQLにmysqliを使って接続する前提になっています。メソッドはただただfalseを返すような実装になっています。見る事で確認可能です。$this->db->conn_idがfalseであった場合はスクリプトの実行可能時間を延ばしたうえで、再度databaseのロードを試みます。上手く接続できた場合はfalseではなくmysqliのオブジェクトが入っており、DBを使う処理の続行が可能になります。上記のような処理を前述のクリティカルな場所に仕込んでおきます。DBがダウンしていたり、DB側のコネクション制限を使い切っている場合でも再接続の機会を得る事が出来ます。注意点あくまでDBへの再接続チャンスを得るための処理なので万能ではありません。上記例の場合、15秒ごとの8回のリトライに失敗すればDBには接続できないままです。かなりの時間を待たせる処理になるので、クリティカルな処理、バッチ的な処理、API的な処理でのみ保険的に利用するべきでしょう。バッチ的な処理など、それなりに時間がかかる処理の中で何度もDBにアクセスするような場合は、最初に接続確認を行っても途中でDBがダウンして接続出来なくなるような事も考えられます。プロパティを更新したうえで再度、再接続処理を実行する事もできるはずですが、運悪くDB処理の真っ最中にダウンしたような場合に対しては無力です。trueにしている場合、DB周りでのError・Warningはそのまま処理の即時停止となり、この再接続処理にたどり着きません。している環境でのみ動作します。上記と同様にディスプレイにPHPのエラーを表示する設定も、DB接続失敗時にWarningが発生しているため非推奨です。用法、用量を守ってご参考程度に。