欢迎来到曹鸿源的个人站点
希望我们可以相互学习,谢谢!^o^

       

Yii2.0 主从库的配置方法

 2019-10-26 16:40:32   {{zan}}   0   83 

工作中遇到需要配置主从库的问题,当然主要目读写分离

1.原理:让主数据库(master)处理事务性增、改、删操作,而从数据库(slave)处理查询操作。

2.好处:备份数据库,分担数据库压力,承受更大的访问量。


而 Yii2.0 实现读写分离非常简单,只需要在配置文件中写几个配置参数即可实现。

首先由两个数据库供测试使用:

1. 主库:master,其中有一个 user 表,输入 username 为 master_user。

image.png

2. 从库:slave,也配置了一个 user 表,输入 username 为 slave_user。

image.png

下面配置 db.php 文件:

<?php
return [
    'class' => 'yii\db\Connection',
    
    // 主库通用的配置
    'masterConfig' => [
        'username' => 'root',
        'password' => 'root',
        'attributes' => [
            \yii\db\mssql\PDO::ATTR_TIMEOUT => 10,
        ],
    ],

    // 主库配置列表
    'masters' => [
        ['dsn' => 'mysql:host=127.0.0.1;dbname=master'],
    ],
    
    // 从库的通用配置
    'slaveConfig' => [
        'username' => 'root',
        'password' => 'root',
        'attributes' => [
            \yii\db\mssql\PDO::ATTR_TIMEOUT => 10,
        ],
    ],

    // 从库的配置列表
    'slaves' => [
        ['dsn' => 'mysql:host=127.0.0.1;dbname=slave'],
    ],
];

看上面应该可以看得懂,当然也可以移步直接看 Yii2.0 官方教程:https://www.yiichina.com/doc/guide/2.0/db-dao


后面我们测试看看:

public function actionIndex(){
    # 正常读取,读取从库内容
    echo '从库 slave 的内容:<br/>';
    $slave_users = User::find()->asArray()->one();
    var_export($slave_users);

    echo '<br/>';
    # 关闭从库,强制读取主库内容
    echo '从库 master 的内容:<br/>';
    Yii::$app->db->enableSlaves = false;
    $master_users = User::find()->asArray()->one();
    var_export($master_users);
}

打印结果:

image.png


这样就可以实现了。


本文链接地址,转载请标注:https://caohongyuan.cn/article/132

(邮箱不会公开,只会做回复通知用) 提交 清空 {{comment.content}}
Re:{{response.content}}