读写分离,主从切换,是基本所有的高可用系统必备的,可以买云服务器多节点自动保证数据主从不同,主主同步等。现在在YII中引入配置
①在config/ind_db.php配置中配置主从数据库
return [
'class' => 'yii\db\Connection',
'serverRetryInterval' => 10,//在[[主服务器]]和[[从服务器]]中列出的死服务器的重试间隔(以秒为单位)。
'slaves' => [ //主库列表 配置单项
['dsn' => 'mysql:host=XXXX;port=23367;dbname=XXX',],
],
'slaveConfig' => [ //主库通用配置
'username' => 'root',
'password' => 'XXX',
'attributes' => [
PDO::ATTR_TIMEOUT => 5
]
],
'masters' => [ //从库列表 配置单项
['dsn' => 'mysql:host=localhost;port=3306;dbname=XXX'],
],
'masterConfig' => [ //从库通用配置
'username' => 'root',
'password' => '123456',
'attributes' => [
PDO::ATTR_TIMEOUT => 60
]
],
'charset' => 'utf8',
'tablePrefix' => 'xcxmall_',
];
当然里面可以配置多主多从那些,需要时再配置。
②使用,当然你可以再其中判断库是否可用等的业务逻辑
//查从库
$model = ShareOrder::find()->where(['order_id' => 303130, 'type' => 0])->one();
$data = [
'order_id'=>303130,
'type'=>0,
];
//查主库
$users = ShareOrder::getDb()->useMaster(function($db) use ($data) {
/** @var $db \yii\db\Connection */
return $db->createCommand("SELECT * FROM " . ShareOrder::tableName() . " where `order_id` =:order_id AND `type`=:type", [
':order_id' => $data['order_id'],
':type' => $data['type'],
])->queryOne(\PDO::FETCH_OBJ);
});
print_r($users);die;