本篇文章给大家带来的内容是关于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变化来确定配置是否生效