本篇文章给大家带来的内容是关于laravel学习:主从读写分离配置的实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在DB的连接工厂中找到以下代码
.../vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
protected function getReadConfig( array $config )
{
$readConfig = $this ->getReadWriteConfig( $config , 'read' );
return $this ->mergeReadWriteConfig( $config , $readConfig );
}
protected function getReadWriteConfig( array $config , $type )
{
if (isset( $config [ $type ][0])) {
return $config [ $type ][ array_rand ( $config [ $type ])];
}
return $config [ $type ];
}
protected function mergeReadWriteConfig( array $config , array $merge )
{
return array_except( array_merge ( $config , $merge ), [ 'read' , 'write' ]);
}
|



链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5
免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424。
工厂类通过随机获取读DB配置来进行读取操作,由此可推出DB的配置应该如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'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' => '' ,
]
|
加强版,支持多主多从,支持独立用户名和密码,配置如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
'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变化来确定配置是否生效