2016-11-08 63 views
0

我們已經創建了鏡像數據庫,它是我們應用程序主數據庫的副本。目標是在不可用的情況下在兩個數據庫之間跳轉。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

對我來說,似乎最好的選擇是讓負載均衡器執行故障轉移選擇的骯髒工作。 – 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'); 

我確實假設某種方法可行。