yii mysql 主从_MySQL主从复制读写分离的总结

MySQL主从复制实现方式

首先说明这种方式一般分为两种:

1.采用代码形式,就是在代码中判断我是否要进行查询还是更新或增加,对应的去不同服务器的从库或主库进行操作。

2.使用MySQL proxy 来进行这样可以不用从代码来直接区分是增删改查的语句,直接去MySQL proxy去执行操作,然后MySQL proxy回去对应的主库或者从库执行操作。一般称这样的方式为中间件,除了有MySQL proxy之外还有HAproxy(付费)等。

这两种方式各有其适用的场景,不能片面的指出那种方式比较好,只能是根据自己的业务需求去决定。

关于 MySQL的主从复制的配置以及MySQL proxy的配置

在以下这篇文章当中会详细讲到:

或者可以参考这个

接下来我们要说的是在Yii2中是如何实现这个代码层级的读写分离.

Yii2中主从复制和读写分离

这里主要围绕最新的Yii2英文文档中的一小节“主从复制与读写分离”展开进行介绍。为什么是英文文档?目前中文翻译的文档不是最新的。

首先我们需要在 web.php中配置一下在component(组件)数组中按照下文进行配置,或者是直接覆盖到config文件夹当中的db.php文件。[    'class' => 'yii\db\Connection',

// configuration for the master

//dsn=>’mysql:host=localhost;dbname=xxx’

'dsn' => 'dsn for master server',    'username' => 'master',

'password' => '',

// common configuration for slaves

'slaveConfig' => [

'username' => 'slave',

'password' => '',

'attributes' => [

// use a smaller connection timeout

PDO::ATTR_TIMEOUT => 10,

],

],

// list of slave configurations

'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'],

],

]

这个配置项都比较清楚,没有太难的点去解释slaves 的每个dsn分别对应的是每个从库的地址。

在这里需要注意的是通过yii\db\Command::execute()都会被当做写操作,也就意味着这样的命令会在主库中执行。你也许会createCommand(’select * from users’)->excute(),这样执行但是这样的语句都会在主库中执行。在其他所有的情况下,包含查询的语句会在从库中进行查询。Yii2在支持负载均衡以及故障转移。当第一次执行查询时,连接组件随机选取一个从库去连接它,如果失败则连接下一个从库,直到没有一个从库可用才回去连接主库。在上述的配置文件中的一项PDO::ATTR_TIMEOUT的值对于每一个从库都生效。

其他:

我们有可能需要从主库读取数据:$rows = Yii::$app->db->useMaster(function ($db) {

return $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();

});

我们也可以通过Yii::$app->db->slave获取当前连接并可用的从库。

结语

本文总结了一下MySQL的读写分离以及如何在Yii2中的实现,Yii2也提供了多主多从的配置方案,在这里不做赘述有兴趣的可以http://www.yiiframework.com/doc-2.0/guide-db-dao.html 查照Replication and Read-Write Splitting这一节。如果有什么意见或者建议欢迎提出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值