fuelPHPでMySQLのREPLICATION (Master-Slave)を使う
fuelPHPでMySQLのREPLICATIONを使う
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に統一