多个数据库 读写分离怎么配置呢? [ 未指定版本 ]
多个数据库 读写分离怎么配置呢?
共 3 个回答
-
首先,你得配置多个db
return [ // ... 'components' => [ // 配置主库 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=mydatabase', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], //可以配置多个从库,只要负责读 'dbread' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=mydatabase2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], ], // ... ];
接下来,如果你的业务处理是读取的,你就获取读取的实例:
$connection2 = \Yii::$app->dbread;
如果是需要写的业务,你就获取可读写的实例
$connection2 = \Yii::$app->db;
共 2 条回复 -
ActiveRecord有个getDb方法,你可以重写他
public static function getDb() { return Yii::$app->getDb(); }
其他它最终调用的是Application的getDb方法
public function getDb() { return $this->get('db'); }
所以,你可以根据你自己的业务,然后重写这个方法,返回你想要的db。
最好自己写个类,比如:class BackBaseActiveRecord extends ActiveRecord{ }
然后让你所有的model都继承BackBaseActiveRecord,这样你在BackBaseActiveRecord中重写getDb方法
你试试看行不行
共 6 条回复@javalzbin 两个mysql服务我明白一点,主要是各方面限制,想一台服务器做个主从的、、、
@javalzbin 在我自己这个类BackBaseActiveRecord 里面怎么去区分请求过来的是写操作 还是读操作呢 我要在这个类里面去区分读操作让他执行从库 写操作执行主库
yg
注册时间:2016-04-01
最后登录:2016-04-12
在线时长:1小时30分
最后登录:2016-04-12
在线时长:1小时30分
- 粉丝2
- 金钱40
- 威望0
- 积分50