symfony1.4 の Doctrine で MySQL レプリケーション対応(Master / Slave)
symfony1.4 の Doctrine ではデフォルトで対応していないのでプラグインを使う必要があります。
sfDoctrineMasterSlavePlugin | http://www.symfony-project.org/plugins/sfDoctrineMasterSlavePlugin
sfDoctrineMasterSlavePlugin プラグインをインストールします。
php symfony plugin:install sfDoctrineMasterSlavePlugin
>> sfSymfonyPluginManager Installation successful for plugin "sfDoctrineMasterSlavePlugin"
プラグインインストール後、自動で ProjectConfiguration.class.php に sfDoctrineMasterSlavePlugin が有効化されていますが、sfDoctrinePlugin の前にくるように書き換えましょう。
// config/ProjectConfiguration.class.php
<?php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->enablePlugins('sfDoctrineMasterSlavePlugin');
$this->enablePlugins('sfDoctrinePlugin');
}
}
databases.yml の all に以下のように記述し、各環境で param.dsn, username, password を適宜書き換えましょう。
// config/databases.yml
all:
doctrine:
class: sfDoctrineDatabase
param:
is_master: true
attributes:
default_table_charset: utf8
default_table_collate: utf8_general_ci
quote_identifier: true
slave:
class: sfDoctrineDatabase
param:
attributes:
default_table_charset: utf8
default_table_collate: utf8_general_ci
quote_identifier: true
これで検証して、オッケーだったら設定完了です。
強制的にマスターへ向けたい場合などは参考記事に載っていましたのでそちらをご覧ください。