ARTICLE

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.phpsfDoctrineMasterSlavePlugin が有効化されていますが、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.ymlall に以下のように記述し、各環境で 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

これで検証して、オッケーだったら設定完了です。

強制的にマスターへ向けたい場合などは参考記事に載っていましたのでそちらをご覧ください。

参考記事

blog comments powered by Disqus

Categories