項目做大了,數據庫主從還是不可少的。使用Yii框架開發,如何設置數據庫的主從呢?其實很簡單。
先說一個主數據庫服務器和多個從數據庫服務器的情況,修改配置文件 config/db.php ,其中 slaveConfig 里的為從服務器的公共部分,也可以設置到 slaves 里的各個從服務器的配置里。
'class' => 'yii\db\Connection',
// 配置主服務器
'dsn' => 'dsn for master server',
'username' => 'master',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'php_',//默認為空
// 配置從服務器
'slaveConfig' => [
'username' => 'slave',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'php_',
'attributes' => [
// use a smaller connection timeout
PDO::ATTR_TIMEOUT => 10,
],
],
// 配置從服務器組
'slaves' => [
['dsn' => 'dsn for slave server 1'],
['dsn' => 'dsn for slave server 2'],
['dsn' => 'dsn for slave server 3'],
['dsn' => 'dsn for slave server 4'],
],
還可以主服務器也是多個的那主服務器的配置就是下面的樣子,其中字符編碼集,表前綴等設置參考上面的。
// 配置主服務器 'masterConfig' => [ 'username' => 'master', 'password' => '', 'attributes' => [ // use a smaller connection timeout PDO::ATTR_TIMEOUT => 10, ], ], // 配置主服務器組 'masters' => [ ['dsn' => 'dsn for master server 1'], ['dsn' => 'dsn for master server 2'], ],
配置好了,那么如何使用呢,Yii這點做的特別好,因為你幾乎不用修改你的代碼,不用考慮你代碼里的數據庫操作如何使用主服務器配置還是從數據庫配置,框架本身已經實現了。默認系統里 execut()函數操作的是主庫,其他情況都操作從庫,比如queryAll()。而且對於AR操作也是如此,因為他就是基於Yii::$app->db來實現的。
更多詳細的可以參考官方文檔 http://www.yiichina.com/doc/guide/2.0/db-dao
