2016-11-08 5 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' => '', 
    ), 

Функция Helper файла:

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'); 

Я предполагаю, что такой подход будет работать.