yii2.0主从数据库实现源码分析

751人阅读 评论(0)

The Connection component supports load balancing and failover between slaves. When performing a read query for the first time, theConnection component will randomly pick a slave and try connecting to it. If the slave is found "dead", it will try another one. If none of the slaves is available, it will connect to the master. By configuring a yii\db\Connection::serverStatusCache, a "dead" server can be remembered so that it will not be tried again during a yii\db\Connection::serverRetryInterval.

// common configuration for slaves
'slaveConfig' => [

'username' => 'root',
'password' => 'xxxx',
'charset' => 'utf8',
'attributes' => [
\PDO::ATTR_TIMEOUT => 10,
],
],
'slaves' => [
['dsn' => 'mysql:host=xxxx;dbname=yii2advanced'],
//['dsn' => 'mysql:host=xxxx;dbname=yii2advanced'],//其他从服务器


$this->pdo =$this->createPdoInstance();
$this->initConnection(); 会初始化PDO，所以请求过来的时候，如果不进行数据库操作，则不初始化pdo，如果是读操作，会初始化一个pdo，从数据库的，如果是写操作，则会初始化两个pdo一个主的一个从的。写操作时候如下： 写操作的原理，代码部分： 打印出来的栈信息，从这个栈信息，可以看出来先是会初始化一个从的pdo， 在初始化主pdo的时候， getMasterPdo()->open()$this->masters不为空，所以会调用openFromPool()
openFromPool里面又会调用open()，不同的是这一次\$this->masters为空了，所有就会走到try里面，这也就是22只打印了两次，另一次是初始化从的时候，open栈信息却有三次。

个人资料
等级：
访问量： 1万+
积分： 248
排名： 30万+
文章分类