2016-11-08 10 views
0

私たちのアプリケーションのメインデータベースのレプリカであるミラーデータベースを作成しました。目標は、利用できない場合に2つのデータベース間を移動することです。Laravel 4 - ミラーデータベース?

私はLaravel 4でこのようなことをどのように実装できますか?私は基本的に別のホストが、同じ資格情報

'mysql' => array(
     'driver' => 'mysql', 
     'host'  => '172.22.22.22', 
     'port'  => '3306', 
     'database' => 'db', 
     'username' => 'username', 
     'password' => 'password', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

'mysql' => array(
     'driver' => 'mysql', 
     'host'  => '172.22.22.23', 
     'port'  => '3306', 
     'database' => 'db', 
     'username' => 'username', 
     'password' => 'password', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

を考えてみましょう。それらのデータベースの1つが利用できない場合、それらのデータベース間の切り替えを設定するにはどうすればよいですか?すべてのソースまたはドキュメントが評価されます。

+1

私には、ロードバランサにフェイルオーバー選択の汚い作業をさせるのが最善の選択肢のようです。 – Repox

答えて

0

接続性に応じて接続を設定するヘルパー関数を記述できます。

コンフィグファイル:

# Our primary database connection 
    'mysql' => array(
     'driver' => 'mysql', 
     'host'  => 'host1', 
     'database' => 'database1', 
     'username' => 'user1', 
     'password' => 'pass1' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

    # Our secondary database connection 
    'mysql2' => array(
     'driver' => 'mysql', 
     'host'  => 'host2', 
     'database' => 'database2', 
     'username' => 'user2', 
     'password' => 'pass2' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

ヘルパー関数ファイル:

function db($modelName){ 
try { 
//Get underlaying PDO connection. 
DB::connection()->getPdo(); 
$m = new $modelName; 
$m->setConnection('mysql'); 
} 
catch(\Exception $e) 
{ 
$m = new $modelName; 
$m->setConnection('mysql2'); 
} 
} 

そして、すべてのモデルファイルでこの設定になります。

を私はそれがこのようなものになるだろうだろうな方法
protected $connection = HelperClass::db('mymodelname'); 

私はこれがうまくいくようなアプローチをとっています。