[PHP] Larval 主从读写分离配置

在DB的连接工厂中找到以下代码
.../vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php

/**
 * Get the read configuration for a read / write connection.
 *
 * @param  array  $config
 * @return array
 */
protected function getReadConfig(array $config)
{
    $readConfig = $this->getReadWriteConfig($config, 'read');  

    return $this->mergeReadWriteConfig($config, $readConfig);
}  

/**
 * Get a read / write level configuration.
 *
 * @param  array   $config
 * @param  string  $type
 * @return array
 */
protected function getReadWriteConfig(array $config, $type)
{
    if (isset($config[$type][0])) {
        return $config[$type][array_rand($config[$type])];
    }  

    return $config[$type];
} 

/**
 * Merge a configuration for a read / write connection.
 *
 * @param  array  $config
 * @param  array  $merge
 * @return array
 */
protected function mergeReadWriteConfig(array $config, array $merge)
{
    return array_except(array_merge($config, $merge), ['read', 'write']);
}

工厂类通过随机获取读DB配置来进行读取操作,由此可推出DB的配置应该如下

'mysql' => [
    'write'    => [
        'host' => '192.168.1.180',
    ],
    'read'     => [
        ['host' => '192.168.1.182'],
        ['host' => '192.168.1.179'],
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]

加强版,支持多主多从,支持独立用户名和密码,配置如下

'mysql' => [
    'write'    => [
        [
            'host' => '192.168.1.180',
            'username'  => '',
            'password'  => '',
        ],
    ],
    'read'     => [
        [
            'host' => '192.168.1.182',
            'username'  => '',
            'password'  => '',
        ],
        [
            'host' => '192.168.1.179',
            'username'  => '',
            'password'  => '',
        ],
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]

验证
开启MySQL的general-log,通过tail -f的方式监控log变化来确定配置是否生效

时间: 2025-01-20 09:07:54

[PHP] Larval 主从读写分离配置的相关文章

使用Amoeba实现MySQL的主从读写分离的例子

主从同步架构的优点 读取工作交给了从服务器,降低了主服务器的压力 在从服务器进行备份,避免备份期间影响主服务器服务 当主服务器出现问题时,可以切换到从服务器. Amoeba介绍  代码如下 复制代码 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件.这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发.座落与 Client.DB

Yii实现多数据库主从读写分离的方法_php实例

本文实例讲述了Yii实现多数据库主从读写分离的方法.分享给大家供大家参考.具体分析如下: Yii框架数据库多数据库.主从.读写分离 实现,功能描述: 1.实现主从数据库读写分离 主库:写 从库(可多个):读 2.主数据库无法连接时 可设置从数据库是否 可写 3.所有从数据库无法连接时 可设置主数据库是否 可读 4.如果从数据库连接失败 可设置N秒内不再连接 利用yii扩展实现,代码如下: 复制代码 代码如下: <?php /**  * 主数据库 写 从数据库(可多个)读  * 实现主从数据库 读

SQL Server AlwaysOn读写分离配置图文教程

概述 Alwayson相对于数据库镜像最大的优势就是可读副本,带来可读副本的同时还添加了一个新的功能就是配置只读路由实现读写分离:当然这里的读写分离稍微夸张了一点,只能称之为半读写分离吧!看接下来的文章就知道为什么称之为半读写分离. 数据库:SQLServer2014 db01:192.168.1.22 db02:192.168.1.23 db03:192.168.1.24 监听ip:192.168.1.25 配置可用性组 可用性副本概念辅助角色支持的连接访问类型 1.无连接 不允许任何用户连接

MySQL主从同步、读写分离配置步骤_Mysql

现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168.0.2 (Slave) MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1 1.登录Master服务器,修改my.cnf,添加如下内容: server-id = 1 //数据库ID号,

Yii多数据库主从读写分离实例介绍

Yii框架数据库多数据库.主从.读写分离 实现 功能描述: 1.实现主从数据库读写分离 主库:写 从库(可多个):读 2.主数据库无法连接时 可设置从数据库是否 可写 3.所有从数据库无法连接时 可设置主数据库是否 可读 4.如果从数据库连接失败 可设置N秒内不再连接 利用yii扩展实现:  代码如下 复制代码 <?php   /**  * 主数据库 写 从数据库(可多个)读  * 实现主从数据库 读写分离 主服务器无法连接 从服务器可切换写功能  * 从务器无法连接 主服务器可切换读功  *

MySQL5.6 Replication主从复制(读写分离) 配置完整版_Mysql

MySQL5.6主从复制(读写分离)教程 1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTID(全局事务标示符). 需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的. 所以本教程主要是告诉大家如何通过日志(binlog)方式做主从复制! 2.MySQL官方提供的MySQL Replication教程: http://dev.mysql.com/

Mycat读写分离配置实践

   工作这些年来,也去了一些地方,有了一些见闻,隐隐感觉很多文化和猫有着千丝万缕的联系.就拿IT行业来说吧,猫有着很高的曝光率,比如大名鼎鼎的 tomcat,是由SUN的软件构架师詹姆斯·邓肯·戴维森开发,并由Sun贡献给Apache软件基金会,他希望这种动物能够自己照顾自己,将其命名为 Tomcat,于是乎这个名字就留下来了.   在Oracle中我最喜欢查看的一个数据字典试图就是cat,这是典型的猫文化,没有其他的技术意味.   最早听到mycat的时候,我意味是一个国外的开源项目,但是紧

yii2 数据库读写分离配置示例

开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.PHP),DSN( Data Source Name )是数据源名称,用于指定数据库信息.如下所示: return [ // ... 'components' => [ // ... 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbna

MySQL5.5读写分离配置的详解

一.服务器配置 主库:192.168.204.132 vim /etc/my.cnf server-id= 1 log-bin=mysql-bin binlog_format=mixed #需要同步的二进制数据库名 binlog-do-db=test #不同步的二进制数据库名 binlog-ignore-db=mysql binlog-ignore-db=performance_schema #可选参数 sync-binlog = 1 #日志保留天数 expire_logs_days = 7 从