野鳥日記

野鳥と技術のブログ http://www.kiriya-system.com/

fuelPHPでMySQLのREPLICATION (Master-Slave)を使う

fuelPHPMySQLREPLICATIONを使う

fuelPHP
MySQLレプリケーション(REPLICATION )構成にアクセスする方法

ちなみに実際にはAWSのリードレプリカ(MySQL Read Replicas)を使ってます。


 

http://php6.tumblr.com/post/38309122629/fuelphp-advent-calendar-2012

http://fuelphp.com/forums/discussion/7061

http://d.hatena.ne.jp/Kenji_s/20130606/fuelphp_env_config

↑参考にしたページ

 

db.phpの親子関係をちゃんと理解してなかった為にすごいハマった。

だって、公式ドキュメントに書いてないし・・・

 

 

まずはDB全環境共通設定を編集する

 

DB全環境共通設定

config/db.php

return array(
'default' => array(
    'type'             => 'mysqli',
    'connection'     => array(
        'hostname'         => 'ここは上書きされるのでなんでもよし',
        'port'             => '3306',
        'database'         => 'ここは上書きされるのでなんでもよし',
        'username'         => 'ここは上書きされるのでなんでもよし',
        'password'         => 'ここは上書きされるのでなんでもよし',
        'persistent'     => false,
        'compress'         => false,
    ),
    'identifier'     => '`',
    'table_prefix'     => '',
    'charset'         => 'utf8',
    'enable_cache'     => true,
    'profiling'      => false,
    'readonly'       => array('hoge-slave1'),
),
'hoge-slave1' => array(
    'type'             => 'mysqli',
    'connection'     => array(
        'hostname'         => 'ここは上書きされるのでなんでもよし',
        'port'             => '3306',
        'database'         => 'ここは上書きされるのでなんでもよし',
        'username'         => 'ここは上書きされるのでなんでもよし',
        'password'         => '',
        'persistent'     => false,
        'compress'         => false,
    ),
    'identifier'     => '`',
    'table_prefix'     => '',
    'charset'         => 'utf8',
    'enable_cache'     => true,
    'profiling'      => false,
    'readonly'       => false,
),
);

 

次に環境ごとの設定ファイルを用意します。

※環境について

development:開発環境

test:テスト環境

staging:ステージング環境

production:本番環境

 

config/development/db.php

 return array(
    'default' => array(
        'connection'  => array(
            'hostname'         => 'hoge.hoge',
            'port'             => '3306',
            'database'         => 'hogedb',
            'username'     => 'hoge-san',
            'password'     => 'hogehoge',
        ),
    ),
    'hoge-slave1' => array(
        'connection'  => array(
            'hostname'         => 'hoge.hoge',
            'port'             => '3306',
            'database'         => 'hogeslavedb',
            'username'     => 'hoge-san',
            'password'     => 'hogehoge',
        ),
    ),
);

 

slaveに対してSQLを発行する

model側

 

$result = DB::query('SELECT * FROM `users`')->execute('hoge-slave1');

 

 

まとめ

共通設定はconfig/db.phpに書く

環境ごとの値はconfig/development/db.phpなどに書く

設定項目のキーが一緒の部分だけ上書きされる。

fuelPHPの公式ドキュメントは役に立たない。

 

※pdoとmysqliの書き方が混在してたので、mysqliに統一