Foreword
MySQL master-slave synchronization is a widely used database architecture at present. The technology is relatively mature and the configuration is not complicated. Especially for websites with heavy loads, master-slave synchronization can effectively alleviate the pressure of database reading and writing. When using yii1 in the past, the support of master-slave database was not so convenient. You could only write components of multiple DBs, and then return the corresponding db in AR's getDB. This can also be used to deal with the master-slave database
Implementation method
Yii2 has solved this problem and can be processed directly in the code:
PHP code
'db' =>[ '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, ], ], ];
Isn’t it super convenient? Not only that, you can also configure the slave server group:
PHP code
'db'=>[ //...上面是一些标准配置 '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'], ], ]
What’s more commendable is that the master server is also a configuration of multiple master servers, which is as follows, including character encoding set, table prefix Please refer to the settings above.
PHP code
'db'=>[ // 配置主服务器 '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'], ], //other ...slaves ];
It’s really easy.
Of course, if you want to use it more easily, you actually need to use the AR of YII2. You don't need to change the code. .