2017-06-19 19 views
5

Google Cloud SQLにPHPアプリケーション(Googel Cloud Platform以外のサーバーから)を接続したいと考えています。私は、データベースを適切にフェールオーバーするためにアプリケーションを設計する方法を知りたい。 manualによるとGoogle Cloud SQLのフェールオーバーはどのように機能しますか?

帯状停電が発生し、ご主人があなたのフェイルオーバー レプリカにフェールオーバーする場合は、インスタンスへの既存の接続が閉じられています。ただし、 アプリケーションは同じ接続文字列またはIP アドレスを使用して再接続できます。フェールオーバー後にアプリケーションを更新する必要はありません。

すべてが自動的に起こっているように見えますが、データベースのIPアドレスが切れていたり、タイムアウトした場合はどうなりますか?

+1

フェールオーバー後にIPが新しいインスタンスに移動されます。アプリで何も起こる必要はありません。 – Vadim

答えて

0

Googleがバックエンドにデータベースサービスを提供するために使用しているが、私の仮定は何であるかhere明らかにしない:マスターに障害が発生したとき

  • それ故、コネクタをマスターするためにトラフィックをルーティングしている仮想IPを使用しているが仮想IPをアドバタイズするようになると、TCP接続が失敗します。

php.iniであなたのmysqli.reconnectは、障害が発生したときに、あなたのPHPコードが自動的にバックアップMySQLのコネクタに接続できるようにするために有効にする必要がある場合、コメントを意味します。 read here

mysqli.reconnectが有効な場合、何も心配する必要はありません。

編集:SQLトランザクションに関して疑問が生じた場合の回答 - SQLトランザクションコードがトランザクション中にいつでも切断される可能性がある予防措置で書かれていない場合はもちろん混乱になります。コード。自動コミットが有効になっていて、トランザクション内にいない場合、単純な自動再接続はほとんどの他のシナリオを解決します。

+0

PHPのmysqliは、接続がリストのときにトランザクションを破ります。自動的に再接続すると、部分的なトランザクションはROLLBACKされ、新しいトランザクションが開始されます。この_may_は混乱の原因になります。自動再接続しないでください。失敗したトランザクションとして処理し、_code_トランザクションを再起動するようにしてください。 –

+0

もちろん、トランザクション中に接続が切断される可能性があるという注意を払ってSQLトランザクションコードを記述していないと、そのシナリオをコードで処理する必要があります。自動コミットが有効になっていて、トランザクション内にいない場合、単純な自動再接続はほとんどの他のシナリオを解決します。 –

+0

(私はこのスレッドを読んでいる初心者に "もちろん"を指摘する必要があると感じました。) –

関連する問題